例として、ここでスペイン語の複数形の部分を見てください。
var PLURAL_CATEGORY = {ZERO: "zero"、ONE: "one"、TWO: "two"、FEW: "few"、MANY: "many"、OTHER: "other"}; どうやら、すべて英語です
これがバグかどうか誰かが説明できますか?
どうもありがとう
リオル
例として、ここでスペイン語の複数形の部分を見てください。
var PLURAL_CATEGORY = {ZERO: "zero"、ONE: "one"、TWO: "two"、FEW: "few"、MANY: "many"、OTHER: "other"}; どうやら、すべて英語です
これがバグかどうか誰かが説明できますか?
どうもありがとう
リオル
これが私のi18n作業のやり方です。うまく機能しているようです! これは、実行時に初期化される一連のローカライズされたリソース ファイルに基づいています。一番下は、このアプローチを使用して複数形を処理する方法です。
.factory('I18n', ['$http', 'User', function($http, User) {
// Resource File
var LANG_FILE;
// Fetch Resource File
function init() {
return $http.get('resources/locales/' + User.locale + '.json')
.then(function(response) {
LANG_FILE = response.data;
});
}
function lang(stringId, params) {
var string = LANG_FILE[stringId] || stringId;
if (params && params.length) {
for (var i = 0; i < params.length; i++) {
string = string.replace('%' + (i + 1), params[i]);
}
}
return string;
}
return {
init: init,
lang: lang
};
}]);
これは .run ブロックを使用して初期化できます
.run(['I18n', function(I18n) {
I18n.init();
}]);
そして、このような文字列を翻訳するためにどこでも使用されます
.controller(['$scope', 'I18n', function($scope, I18n) {
$scope.title = I18n.lang(some_string_id);
}]);
.directive('i18n', ['I18n', function(I18n) {
return {
restrict: 'A',
scope: {},
link: function(scope, $el, attrs) {
$el[0].innerHTML = I18n.lang(attrs.i18n);
}
};
}]);
このように使用できるもの。
<div i18n="some_string_id"></div>
.directive('pluralize', ['I18n', function(I18n) {
return {
restrict: 'A',
scope: {
count: '='
},
link: function($scope, $el, attrs) {
var when = JSON.parse(attrs.when)
, param = [$scope.count];
if (when[$scope.count]) {
$el[0].innerHTML = I18n.lang(when[$scope.count], param);
} else {
$el[0].innerHTML = I18n.lang(when['other'], param);
}
}
};
}]);
と、こんな風に使えます。
<div pluralize count="{{obj.count}}" when="{1:'single_item','other': 'multiple_item'}"></div>
{
some_string_id: 'This is in English',
single_item: '%1 item',
multiple_item: '%1 items'
}
他のロケールは同じ文字列 ID を持ち、翻訳されたテキストは異なります。
コードをざっと見てみると、単純な複数形規則のセットであることがわかります。すべてのロケールにこの定数があります。いいえ、それはバグではありません。