JS中的Angular Translate同步问题

时间:2015-10-06 10:52:56

标签: javascript angularjs internationalization angular-translate

Angular Translate在视图中非常适合作为过滤器使用。 我正在使用angular-translate-loader-static-files和外部文件,如locale-en.json等。

问题在于我尝试做这样的事情:

var placeholder = $translate('placeholder.NAME')
                    .then(function (translatedValue) {
                        return translatedValue;
                    });

我总是得到一个承诺,在UI中它显示为{},而不是英文名称NAME等。

使用angular-translate在JS中翻译的正确方法是什么?

编辑: 试过这个并得到以下结果(仍未解决)

 var placeholder = '';
                $translate('placeholder.NAME').then(function (translatedValue) {
                    console.log(translatedValue);
                    placeholder = translatedValue;
                }, function(err){
                    console.log(err); // returns placeholder.NAME
                });
                console.log(placeholder);  // returns empty string

4 个答案:

答案 0 :(得分:0)

var placeholder = '';
$translate('placeholder.NAME').then(function (translatedValue) {
  placeholder = translatedValue;
});

答案 1 :(得分:0)

我建议让您的控制器免于翻译逻辑,并在您的视图中直接翻译您的字符串,如下所示:

<h1>{{ 'TITLE.HELLO_WORLD' | translate }}</h1>

答案 2 :(得分:0)

您可以使用instant函数获取没有承诺的值:

var translation = $translate.instant('placeholder.NAME');

但是,这并不等待翻译文件加载。您应确保在加载翻译文件后调用此方法。

答案 3 :(得分:0)

来自网站http://angular-translate.github.io/docs/#/guide/03_using-translate-service635

app.controller('Ctrl', ['$scope', '$translate', function ($scope, $translate) {
$translate(['HEADLINE', 'PARAGRAPH', 'NAMESPACE.PARAGRAPH']).then(function (translations) {
$scope.headline = translations.HEADLINE;
$scope.paragraph = translations.PARAGRAPH;
$scope.namespaced_paragraph = translations['NAMESPACE.PARAGRAPH'];
});
}]);