From 9041e9503f308a39f2ca5e8017b3289d7cdf34f6 Mon Sep 17 00:00:00 2001 From: Dmitriy Date: Tue, 13 May 2014 11:57:44 +0300 Subject: [PATCH] Update lang.js For getting nested messages. Example: Lang.get('foo.bar.baz.bat') --- js/lang.js | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/js/lang.js b/js/lang.js index 949fcf4..fa134d4 100644 --- a/js/lang.js +++ b/js/lang.js @@ -76,8 +76,9 @@ if (typeof key !== 'string' || !this.messages) { return false; } - key = this.parseKey(key); - return !!(this.messages[key.main] && this.messages[key.main][key.sub] !== undefined); + var message = this._getMessage(key); + + return message !== undefined && typeof message === "string"; }; /** @@ -112,11 +113,11 @@ return null; } var segments = key.split('.'); - var subKey = segments.pop(); - segments.unshift(this.getLocale()); + var main = this.getLocale() + '\\' + segments.shift(); + return { - main: segments.join('.'), - sub: subKey + main: main, + sub: segments }; }; @@ -129,11 +130,33 @@ * @return {string} The translation message for the given key. */ Lang.prototype.getMessage = function(key, replacements) { - key = this.parseKey(key); - var message = this.messages[key.main][key.sub]; + var message = this._getMessage(key); + for (var replace in replacements) { message = message.split(':' + replace).join(replacements[replace]); } + + return message; + }; + + /** + * Get nested message. + * + * @param key + * @returns {*} + * @private + */ + Lang.prototype._getMessage = function (key) { + key = this.parseKey(key); + + var length = key.sub.length, + message = this.messages[key.main], + i; + + for ( i = 0; i < length; i++ ) { + message = message[key.sub[i]]; + } + return message; };