2013-08-02 53 views
4

我正在開發基於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」:有佔位符(表達式)將被翻譯。

所以我的問題是:如何在例如 在角度服務(而不是表達式/佔位符)內的通知警報?

+0

另外採取官方I18N角文件看看=):https://github.com/angular/bower-angular-i18n –

回答

12

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

您的「純」文本始終是一個具體的翻譯。因此,如果您想讓i18n進入您的通知,您的通知必須使用翻譯服務的翻譯編號(如果您使用angular-translate,例如)。

尤其是,當使用角度翻譯時,您實際上可以簡單地將具體文本傳遞給翻譯組件(服務,過濾器指令)。如果翻譯表中沒有翻譯ID,看起來像傳遞的值(在你的情況下是一個具體的文本),它會返回該字符串,所以這也將工作。

<ANY translate="{{notificationFromService}}"></ANY>

如果您有任何疑問角翻譯,請讓我再知道了!

1

對於服務內部的翻譯,只需將翻譯服務添加到服務中,例如在服務中使用$ http的方式。

我最喜歡的翻譯/ i18n模塊是角度翻譯。 我有shared here爲什麼。

Here is an example如何在控制器內使用角度轉換服務(在服務中使用相同的方式)。

0

我知道@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"); 
}]); 

並將範圍變量傳遞給您要顯示的警報。

我想這種方法你不必將每個過濾器(如果多於一個的話)傳遞給控制器​​並獲得相同的結果。

3

你可以看看在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.