Angular-translate本地化 - $ translate.use不适用于文化变更和页面重新加载

时间:2015-07-27 07:57:57

标签: javascript angularjs cookies internationalization culture

我正在使用以下方式实现本地化:

Angular v1.4.2.
Angular Cookies v1.4.2.
Angular Translate v2.7.2

我的app.js文件中设置了本地化:

.config(['$translateProvider', function ($translateProvider) {
    $translateProvider.useSanitizeValueStrategy('sanitize');
    $translateProvider.preferredLanguage('nl-BE');
    $translateProvider.fallbackLanguage('nl-BE');
    $translateProvider.useLoader('customLoader', {});
}
]);

我使用自定义加载器,因为Web API后端提供(并共享)所有翻译。

  • apiService处理所有$http次来电。
  • globalizationService处理所有与全球化相关的功能。 它通过自定义cookieService保存currentCulture,后者处理所有$cookies次调用。
  • loggerService统一确定记录信息的最佳方式。通常至少要控制台。

    myApp.factory('customLoader', [
        'apiService',
        'globalizationService',
        'loggerService',
        function (
            apiService,
            globalizationService,
            loggerService) {
            return function (options) {
                var cultureInfo = globalizationService.GetCulture('currentCulture');
                var uri = 'api/globalization/' + cultureInfo;
                loggerService.Info('app customLoader', uri);
                return apiService.Get(uri);
            }
        }
    ]);
    

    在我的SPA模板的控制器中,我有以下功能:

    $scope.ChangeLanguage = function (cultureInfo) {
        globalizationService.SetCulture(cultureInfo);
        $scope.currentCulture = cultureInfo;
        loggerService.Info('ChangeLanguage', cultureInfo);
        $translate.use(cultureInfo);
    }
    

这是由两个按钮触发的:

  • NL按钮使用:ng-click="ChangeLanguage('nl-BE')"
  • FR按钮使用:ng-click="ChangeLanguage('fr-BE')"

运行时记录结果:

首次加载 - 默认nl-BE

INFO: APP CUSTOMLOADER: api/globalization/nl-BE
INFO: CHANGELANGUAGE: fr-BE
INFO: APP CUSTOMLOADER: api/globalization/fr-BE
INFO: CHANGELANGUAGE: nl-BE
INFO: CHANGELANGUAGE: fr-BE

重要的是要注意,在将文化设置为不同于默认值的文化后关闭会话。

第二次加载 - 默认nl-BE,但Cookie设置为fr-BE。法语翻译按预期加载(即我的cookieService工作)

INFO: APP CUSTOMLOADER: api/globalization/fr-BE
INFO: CHANGELANGUAGE: nl-BE ** has no effect
INFO: CHANGELANGUAGE: fr-BE
INFO: APP CUSTOMLOADER: api/globalization/fr-BE ** sometimes this doesn't happen
INFO: CHANGELANGUAGE: nl-BE
INFO: CHANGELANGUAGE: fr-BE
INFO: CHANGELANGUAGE: nl-BE

正如您所看到的,重新加载时不会发生以下调用:

INFO: APP CUSTOMLOADER: api/globalization/nl-BE

我会断定customLoader没有刷新。

正如您在日志中看到的那样,正确的文化会呈现给$translate.use(cultureInfo),但它似乎对重新加载没有任何影响。

任何想法为什么$translate.use(cultureInfo)似乎不起作用,尽管有正确的文化?

0 个答案:

没有答案