你如何在i18next中使用多个命名空间?

时间:2014-11-18 20:49:42

标签: javascript namespaces 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>

2 个答案:

答案 0 :(得分:2)

我在github上发布了同样的问题,并从 jamuhl 收到了以下工作答案:

  

如果资源不在默认命名空间中,则使用:

    <li class="xl8" data-i18n="colors:colors.blue">b</li> --> namespace:key

答案 1 :(得分:0)

对于您描述的用例,不确定这是否有点破解,但是(假设您只想在任何时候激活两个名称空间并且键不会发生冲突),您可以这样做:

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

这并非真正为您的用例设计 - 它更适用于您希望根据其他因素以不同方式显示某些翻译的情况 - 例如,为商业用户显示“员工”的应用或为学校显示“学生”的应用用户 - 但主要使用相同的默认值。