1

角度翻譯在視圖中很有效。 我使用角轉換裝載機,靜態文件與外部文件,如locale-en.jsonJS中的角度翻譯同步問題

問題是,當我嘗試做這樣的事情:

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

我總是得到一個承諾回來,而在UI中,它顯示爲{},而不是英文單詞NAME等。

什麼是使用角度平移翻譯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 

回答

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

我想這一點,太 - 但我會再次嘗試。 – itamar

+0

@itamar這取決於你最終如何使用變量'placeholder'。它可能應該是'$ scope.placeholder'。 – zeroflagL

+0

它實際上用於放入一個範圍數組,所以我把它作爲一個局部變量。 – itamar

0

我建議你保持你的控制器從轉換邏輯自由和視圖裏面像你的字符串直接轉換這樣的:

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

是的。關鍵是這已經在工作 - 我需要在數據顯示之前以控制器的方式進行翻譯。 – itamar

0

可以使用instant函數來獲取值,而不承諾:

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

但是,這並不等待翻譯文件加載。在加載翻譯文件之後,你應該確保你正在調用它。

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']; 
}); 
}]);