我正在尝试使用Angular Translate,我需要在我的控制器中使用翻译,但控制器在我的翻译甚至加载之前运行代码。我的代码是:
var myApp = angular.module('myApp', ['pascalprecht.translate']);
angular.module('myApp').config(function ($translateProvider) {
$translateProvider.useStaticFilesLoader({
prefix: 'locales/validation-',
suffix: '.json'
});
// load 'en' table on startup
$translateProvider.preferredLanguage('en');
});
angular.module('myApp').controller('Ctrl', ['$scope', '$translate', function ($scope, $translate) {
console.debug($translate('INVALID_INTEGER'));
$scope.switchLanguage = function (key) {
$translate.uses(key);
console.debug($translate('INVALID_INTEGER'));
};
}]);
在调用console.debug($translate('INVALID_INTEGER'));
时,它始终显示INVALID_INTEGER
而不是真实的翻译,因此我总结说我的翻译尚未加载。我是Angular和Angular-Translate的新手,所以我不确定下一步该做什么?我需要promise
,我更喜欢angular-translate
内的内置函数。我想要简单的语言环境语言来自每种语言的外部和单独的json
文件。
编辑
我遇到的真正问题是我的所有翻译都直接在控制器内部使用,而不是在视图中使用。似乎angular-translate
适用于视图中显示的任何内容,但在控制器中它不会刷新控制器本身内的代码。
请注意,我现在在Github上有一个有效的Beta项目,我在那里使用翻译...
Angular-Validation (表格验证变得简单)。
我的项目是一个Angular指令并使用locales语言,如果你运行项目并在加载模板之前选择一种语言然后它可以工作,但之后调用$scope.switchLanguage()
虽然视图上的任何翻译都有效,但对控制器没有任何影响。
答案 0 :(得分:2)
好的,从上面的github项目可以看出,由于以下原因,翻译不起作用:
所以你会有一些解决方案,我认为最简单的解决方案是不缓存已翻译的字符串,只是及时翻译 - 在验证器()中。这应该永远有效。如果你想聪明地使用缓存,你必须找到一种方法来确保缓存总是有效的:)我们都知道计算机科学只有两个难题,一个是缓存失效,另一个是[ insert_whatever_youre_working_on_right_now_here]。
详细说明:
在您正在执行的指令中:
messages[i] = $translate('INVALID_URL');
将所有分配替换为:
messages[i] = 'INVALID_URL';
然后在验证器函数内执行:
if(!isValid) {
isFieldValid = false;
message += $translate(messages[j]);
}