0

例として、ここでスペイン語の複数形の部分を見てください。

var PLURAL_CATEGORY = {ZERO: "zero"、ONE: "one"、TWO: "two"、FEW: "few"、MANY: "many"、OTHER: "other"}; どうやら、すべて英語です

これがバグかどうか誰かが説明できますか?

どうもありがとう

リオル

4

2 に答える 2

0

これが私のi18n作業のやり方です。うまく機能しているようです! これは、実行時に初期化される一連のローカライズされたリソース ファイルに基づいています。一番下は、このアプローチを使用して複数形を処理する方法です。

文字列 ID マップとパラメータ挿入を保持する 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);
}]);

1 回限りの翻訳を処理するためのカスタム i18n DIRECTIVE

.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>

パラメータとしてカウントを使用して、リソース ファイルの文字列 ID に一致するカスタム PLURALIZE ディレクティブ。

.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>   

文字列リソース ファイルは resources/locales/en-US.json にあり、次のようになります。

{
    some_string_id: 'This is in English',
    single_item: '%1 item',
    multiple_item: '%1 items'
}

他のロケールは同じ文字列 ID を持ち、翻訳されたテキストは異なります。

于 2014-11-14T23:24:27.763 に答える
0

コードをざっと見てみると、単純な複数形規則のセットであることがわかります。すべてのロケールにこの定数があります。いいえ、それはバグではありません。

于 2013-02-25T17:42:28.207 に答える