From 12998d2fea89201e82347ae4c51f7003067ae287 Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Wed, 15 Apr 2015 14:04:44 +0200 Subject: [PATCH] Add support for fallbackLanguage This is useful for situations where ID-based translations are used and where a fallback to another language is desirable. Example: * Source strings are ID-based, e.g. `LABEL_SOMETHING` * Strings are translated to English: e.g. "Something" * Strings are translated to German, but missing some translations Setting: ``` gettextContext.setCurrentLanguage('de'); gettextContext.setFallbackLanguage('en'); ``` Should then return the English string if the German string is not available (e.g. `LABEL_SOMETHING` returns "Something" in German). --- src/catalog.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/catalog.js b/src/catalog.js index c6e776e..70dd72d 100644 --- a/src/catalog.js +++ b/src/catalog.js @@ -38,6 +38,7 @@ angular.module('gettext').factory('gettextCatalog', function (gettextPlurals, $h strings: {}, baseLanguage: 'en', currentLanguage: 'en', + fallbackLanguage: undefined, cache: $cacheFactory('strings'), setCurrentLanguage: function (lang) { @@ -49,6 +50,15 @@ angular.module('gettext').factory('gettextCatalog', function (gettextPlurals, $h return this.currentLanguage; }, + setFallbackLanguage: function (lang) { + this.fallbackLanguage = lang; + broadcastUpdated(); + }, + + getFallbackLanguage: function () { + return this.fallbackLanguage; + }, + setStrings: function (language, strings) { if (!this.strings[language]) { this.strings[language] = {}; @@ -80,13 +90,21 @@ angular.module('gettext').factory('gettextCatalog', function (gettextPlurals, $h broadcastUpdated(); }, - getStringForm: function (string, n, context) { - var stringTable = this.strings[this.currentLanguage] || {}; + getStringFormLanguage: function (string, n, context, lang) { + var stringTable = this.strings[lang] || {}; var contexts = stringTable[string] || {}; var plurals = contexts[context || noContext] || []; return plurals[n]; }, + getStringForm: function (string, n, context) { + var result = this.getStringFormLanguage(string, n, context, this.currentLanguage); + if (!result && this.fallbackLanguage) { + result = this.getStringFormLanguage(string, n, context, this.fallbackLanguage); + } + return result; + }, + getString: function (string, scope, context) { string = this.getStringForm(string, 0, context) || prefixDebug(string); string = scope ? $interpolate(string)(scope) : string;