diff --git a/app-localize-behavior.html b/app-localize-behavior.html index a990747..3eb6f97 100644 --- a/app-localize-behavior.html +++ b/app-localize-behavior.html @@ -208,13 +208,14 @@ if (!key || !resources || !language) return; + var rawTranslation = proto._extractTranslation(resources, language, key); // Cache the key/value pairs for the same language, so that we don't // do extra work if we're just reusing strings across an application. - var messageKey = key + resources[language][key]; + var messageKey = key + rawTranslation; var msg = proto.__localizationCache.messages[messageKey]; if (!msg) { - msg = new IntlMessageFormat(resources[language][key], language, formats); + msg = new IntlMessageFormat(proto._extractTranslation(resources, language, key), language, formats); proto.__localizationCache.messages[messageKey] = msg; } @@ -227,6 +228,16 @@ }; }, + _extractTranslation: function (resources, language, key){ + var resource = resources[language], keyChain = key.split('.'); + + keyChain.forEach(function (currentKey) { + resource = resource[currentKey]; + }); + + return resource; + }, + __onRequestResponse: function(event) { this.resources = event.response; this.fire('app-resources-loaded'); diff --git a/test/basic-resource-tree.html b/test/basic-resource-tree.html new file mode 100644 index 0000000..b608e93 --- /dev/null +++ b/test/basic-resource-tree.html @@ -0,0 +1,320 @@ + + + + + + app-localize-behavior tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/index.html b/test/index.html index b8845af..ad4a8e4 100644 --- a/test/index.html +++ b/test/index.html @@ -18,7 +18,9 @@ diff --git a/test/resource-tree/locales.json b/test/resource-tree/locales.json new file mode 100644 index 0000000..5205efc --- /dev/null +++ b/test/resource-tree/locales.json @@ -0,0 +1,14 @@ +{ + "en": { + "my": { + "greeting": "hello", + "intro": "my name is {name}. i have {numCats, number} cats." + } + }, + "fr": { + "my": { + "greeting": "bonjour", + "intro": "je m'apelle {name}. j'ai {numCats, number} chats." + } + } +} diff --git a/test/resource-tree/locales2.json b/test/resource-tree/locales2.json new file mode 100644 index 0000000..0abcc76 --- /dev/null +++ b/test/resource-tree/locales2.json @@ -0,0 +1,14 @@ +{ + "en": { + "my": { + "greeting": "hello!", + "intro": "my name is {name}! i have {numCats, number} cats!" + } + }, + "fr": { + "my": { + "greeting": "bonjour!", + "intro": "je m'apelle {name}! j'ai {numCats, number} chats!" + } + } +} diff --git a/test/resource-tree/x-translate-only-imperative.html b/test/resource-tree/x-translate-only-imperative.html new file mode 100644 index 0000000..0bff477 --- /dev/null +++ b/test/resource-tree/x-translate-only-imperative.html @@ -0,0 +1,51 @@ + + + + + + + + + + diff --git a/test/resource-tree/x-translate.html b/test/resource-tree/x-translate.html new file mode 100644 index 0000000..ad05d5d --- /dev/null +++ b/test/resource-tree/x-translate.html @@ -0,0 +1,52 @@ + + + + + + + + + + diff --git a/test/resource-tree/x-translate2.html b/test/resource-tree/x-translate2.html new file mode 100644 index 0000000..58a3a3b --- /dev/null +++ b/test/resource-tree/x-translate2.html @@ -0,0 +1,52 @@ + + + + + + + + + +