我正在開發基於Angular JS的Phonegap App。 我發現在角JS I18N 2種選擇:I18N/Angular JS/Javascript Text
1)https://github.com/gertn/ng-i18n
2)http://angularjs.de/artikel/angularjs-i18n-ng-translate
他們都是很 「simliar」:有佔位符(表達式)將被翻譯。
所以我的問題是:如何在例如 在角度服務(而不是表達式/佔位符)內的通知警報?
我正在開發基於Angular JS的Phonegap App。 我發現在角JS I18N 2種選擇:I18N/Angular JS/Javascript Text
1)https://github.com/gertn/ng-i18n
2)http://angularjs.de/artikel/angularjs-i18n-ng-translate
他們都是很 「simliar」:有佔位符(表達式)將被翻譯。
所以我的問題是:如何在例如 在角度服務(而不是表達式/佔位符)內的通知警報?
angular-translate讓你直接使用他們的$translate service。以下是他們文檔中的示例代碼。
var translations = {
HEADLINE: 'What an awesome module!',
PARAGRAPH: 'Srsly!',
NAMESPACE: {
PARAGRAPH: 'And it comes with awesome features!'
}
};
var app = angular.module('myApp', ['pascalprecht.translate']);
app.config(['$translateProvider', function ($translateProvider) {
// add translation table
$translateProvider.translations(translations);
}]);
app.controller('Ctrl', ['$scope', '$translate', function ($scope, $translate) {
// expose translation via `$translate` service
$scope.headline = $translate('HEADLINE');
$scope.paragraph = $translate('PARAGRAPH');
$scope.namespaced_paragraph = $translate('NAMESPACE.PARAGRAPH');
}]);
您的「純」文本始終是一個具體的翻譯。因此,如果您想讓i18n進入您的通知,您的通知必須使用翻譯服務的翻譯編號(如果您使用angular-translate
,例如)。
尤其是,當使用角度翻譯時,您實際上可以簡單地將具體文本傳遞給翻譯組件(服務,過濾器指令)。如果翻譯表中沒有翻譯ID,看起來像傳遞的值(在你的情況下是一個具體的文本),它會返回該字符串,所以這也將工作。
<ANY translate="{{notificationFromService}}"></ANY>
如果您有任何疑問角翻譯,請讓我再知道了!
對於服務內部的翻譯,只需將翻譯服務添加到服務中,例如在服務中使用$ http的方式。
我最喜歡的翻譯/ i18n模塊是角度翻譯。 我有shared here爲什麼。
Here is an example如何在控制器內使用角度轉換服務(在服務中使用相同的方式)。
您可以查看ui-i18n https://github.com/angular-ui/ui-utils/pull/173,性能比angular-translate更好,並且使用更簡單的語法imo更輕。
乾杯, 添甜
我知道@Kevin已經回答烏爾問題,但你也可以做這樣的事情用「$過濾器」。
var translations = {
HEADLINE: 'What an awesome module!',
PARAGRAPH: 'Srsly!',
NAMESPACE: {
PARAGRAPH: 'And it comes with awesome features!'
}
};
var app = angular.module('myApp', ['pascalprecht.translate']);
app.config(['$translateProvider', function ($translateProvider) {
// add translation table
$translateProvider.translations(translations);
}]);
app.controller('Ctrl', ['$scope', '$filter', function ($scope, $filter) {
$scope.headline = $filter('translate')("HEADLINE");
$scope.paragraph = $filter('translate')("PARAGRAPH");
$scope.namespaced_paragraph = $filter('translate')("NAMESPACE.PARAGRAPH");
}]);
並將範圍變量傳遞給您要顯示的警報。
我想這種方法你不必將每個過濾器(如果多於一個的話)傳遞給控制器並獲得相同的結果。
你可以看看在JLG-國際化的GitHub項目:https://github.com/jlguenego/jlg-i18n
的附加值是:
1)沒有像在其他人的解決方案沒有UPPERCASE_TAG。相反,您將原文直接放入原文。所以如果沒有找到翻譯,就會打印原始字符串,並且降解不是全部。與i18n
濾波器的角度表達的 示例:
{{'How are you doing?' | i18n}}
2)有一個內插/複數functionnality。
{{'You have [[nbr]] message(s) and [[err]] error(s)' | i18n:4:0 }}
輸出:
You have 4 messages and no error.
另外採取官方I18N角文件看看=):https://github.com/angular/bower-angular-i18n –