Как вы используете несколько пространств имен в i18next?

Я только запускаю i18next и хочу создать файл перевода для каждого модуля в моем проекте. Кажется, что использование пространств имен было бы правильным способом сделать это. Проект может создать макет страницы с использованием нескольких представлений, поэтому мне нужно иметь возможность одновременно переводить строки из нескольких пространств имен.

Я создал простой пример с двумя пространствами имен, но я могу заставить i18next переводить строки только для одного пространства имен. Если я использую defaultNs: namespaces[0], то числа переводятся, defaultNs: namespaces[1] переводятся цвета, а defaultNs: namespaces ничего не переводится. Но я не могу понять, как перевести оба пространства имен.

<!doctype html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
        <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
        <script src="i18next.js"></script>
        <script>
        $(document).ready(function(){
            var language = "en";
            var namespaces = [ "numbers", "colors" ];
            var config = {
                lng: language,
                fallbackLng: "en",
                resGetPath: "namespaces/__ns__/__ns__-__lng__.json",
                ns: {
                    namespaces: namespaces,
                    defaultNs: namespaces[0]
                },
                debug: true
            };
            i18n.init( config, function onInitComplete() {
                $(".xl8").i18n();
            });

        });
        </script>
    </head>
    <body>
        <h1>hello, i18n!</h1>
        <ol>
            <li class="xl8" data-i18n="numbers.one">1</li>
            <li class="xl8" data-i18n="numbers.two">2</li>
            <li class="xl8" data-i18n="numbers.three">3</li>
        </ol>
        <ul>
            <li class="xl8" data-i18n="colors.red">r</li>
            <li class="xl8" data-i18n="colors.green">g</li>
            <li class="xl8" data-i18n="colors.blue">b</li>
        </ul>
    </body>
</html>

person Lee Jenkins    schedule 18.11.2014    source источник


Ответы (2)


Я разместил этот же вопрос на github и получил следующий рабочий ответ от jamuhl:

если ресурс не находится в пространстве имен по умолчанию, используйте:

    <li class="xl8" data-i18n="colors:colors.blue">b</li> --> namespace:key
person Lee Jenkins    schedule 19.11.2014

Не уверен, что это немного хакерский вариант использования, который вы описываете, но (при условии, что вы хотите, чтобы в любой момент времени были активны только два пространства имен, а ключи не конфликтовали), вы можете сделать это:

fallbackNS: 'colors',
ns: {
    namespaces: ['colors', 'numbers'],
    defaultNs: 'numbers'
}

Однако на самом деле это не предназначено для вашего варианта использования — оно больше предназначено для ситуации, когда вы хотите отображать некоторые переводы по-разному в зависимости от другого фактора — например, приложение, которое отображает «Сотрудник» для бизнес-пользователей или «Студент» для школьников — но в основном использует один и тот же набор значений по умолчанию.

person joelnb    schedule 05.04.2016