我正在使用以下方式实现本地化:
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后端提供(并共享)所有翻译。
$http
次来电。$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);
}
这是由两个按钮触发的:
ng-click="ChangeLanguage('nl-BE')"
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)
似乎不起作用,尽管有正确的文化?