AngularJS: i18n и плюрализация

Наблюдение части плюрализации на испанском языке здесь, как пример:

Я вижу это вар PLURAL_CATEGORY = {НОЛЬ: "ноль", ОДИН: "один", ДВА: "два", НЕМНОГИЕ: "немногие", МНОГИЕ: "многие", ДРУГОЙ:"other"}; по-видимому, все находится на английском языке

кто-либо может объяснить, является ли это ошибкой?

спасибо очень

Lior

0
nl ja de

2 ответы

Глядя код I видит, что это - ряд простых правил плюрализации. Каждое место действия имеет эту константу. Так не, это не ошибка.

0
добавлено
спасибо @stewie, в общем u r право, но для множества, код: функция (n) {если (n> = 0 && n <2) {возвращают PLURAL_CATEGORY.ONE;} возвращают PLURAL_CATEGORY.OTHER;}, который возвратил бы английские глаголы.
добавлено автор Lior, источник
@Lior Нет, та функция не возвращает фактический перевод, это только определяет который ' when' выражение, чтобы использовать в особенности место действия. Посмотрите ngDirective и выражение $watch в ngDirective src
добавлено автор Stewie, источник

Вот то, как я делаю свою работу i18n, это, кажется, работает отлично! Это базируется от ряда локализованных файлов ресурсов, которые инициализируются во времени выполнения. В основании то, как я обращаюсь с плюрализацией, используя этот подход.

Модуль 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);
}]);

Обычай i18n ДИРЕКТИВА, чтобы обращаться с переводами времени

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

Таможенная директива 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'
}

У других мест действия были бы те же самые идентификаторы строки с различными переведенными текстами.

0
добавлено
Angular — русскоговорящее сообщество
Angular — русскоговорящее сообщество
3 960 участник(ов)

Общаемся на темы Angular 4+, его экосистемы, TypeScript, NativeScript и т.д. По вопросам SSR, Angular Universal @angular_universal_ru См. также: @typescript_ru, @react_js, @nodejs_ru, @js_ru Вакансии и поиск работы: @javascript_jobs

Angular.js (1.x) — русскоговорящее сообщество
Angular.js (1.x) — русскоговорящее сообщество
704 участник(ов)

Общаемся и обсуждаем темы, посвященные Angular 1.x и экосистеме.

AngularJS, Javascript
AngularJS, Javascript
370 участник(ов)

Angularjs russian chat