首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >i18next最佳实践

i18next最佳实践
EN

Stack Overflow用户
提问于 2014-10-25 19:31:37
回答 3查看 4K关注 0票数 6

我已经成功地实现了i18next,顺便说一下,它是一个很棒的库!尽管我还在寻找“最佳实践”。这是我现在的设置,总体上我喜欢:

代码语言:javascript
复制
var userLanguage = 'en'; // set at runtime

i18n.init({
    lng                 : userLanguage,
    shortcutFunction    : 'defaultValue',
    fallbackLng         : false,
    load                : 'unspecific',
    resGetPath          : 'locales/__lng__/__ns__.json'
});

在DOM中,我这样做:

代码语言:javascript
复制
<span data-i18n="demo.myFirstExample">My first example</span>

在JS中,我这样做:

代码语言:javascript
复制
return i18n.t('demo.mySecondExample', 'My second example');

这意味着我在代码本身中维护英语翻译。但是,我使用i18next- translation.json来维护使用单独的解析器的其他语言:

代码语言:javascript
复制
gulp.task('i18next', function()
{
    gulp.src('app/**')
        .pipe(i18next({
            locales : ['nl','de'],
            output  : '../locales'
        }))
        .pipe(gulp.dest('locales'));
});

这一切都很好用。唯一的问题是,当我将'en'设置为userLanguage时,i18next坚持获取/locales/en/translation.json文件,即使它不包含任何翻译。为了防止出现404,我目前在该文件中提供一个空的json对象{}

有没有办法完全防止加载空的.json文件?

EN

回答 3

Stack Overflow用户

发布于 2014-10-30 02:47:18

也许我在这里遗漏了什么,但你不能简单地这样做吗:

代码语言:javascript
复制
if (userLanguage != 'en') {

    i18n.init({
        lng                 : userLanguage,
        shortcutFunction    : 'defaultValue',
        fallbackLng         : false,
        load                : 'unspecific',
        resGetPath          : 'locales/__lng__/__ns__.json'
    });
}

这样,除非你确实需要翻译服务,否则你的脚本i18n不会被初始化。

票数 4
EN

Stack Overflow用户

发布于 2014-12-16 23:16:45

i18next-parser作者在这里,我将解释我是如何使用i18next的,希望它能有所帮助:

1/ i在代码中不使用defaultTranslation。原因是它不属于代码。我理解拥有实际文本的好处,但代码可能会很快变得臃肿。困难的部分在于定义易于理解的翻译关键字。如果这样做了,就不再需要defaultTranslation文本了。翻译关键字是自解释的。

2/如果你在/locales/en/translation.json上有一个404,那么你可能在你的public目录或类似的目录中没有这个文件。通过gulp,你可以有多个目的地,例如,你可以做dest('locales').dest('public/locales')

3/如果目录中没有翻译,请确保首先运行gulp任务。关于用您拥有的defaultTranslation填充目录,这是一个使用正则表达式解决的棘手问题。想一想这个案例<div data-i18n="key">Default <div>translation</div></div>。它需要能够解析内部的html并提取所有内容。我只是从来没有花时间去实现它,因为我不使用它。

票数 4
EN

Stack Overflow用户

发布于 2014-11-04 22:37:23

请参阅“初始化时允许的白名单语言”下的http://i18next.com/pages/doc_init.html (无法在这些文档上分割链接...):

代码语言:javascript
复制
i18n.init({ lngWhitelist: ['de-DE', 'de', 'fr'] });

只允许加载指定的语言。

这应该可以解决你的问题。不过,我想黑名单会更好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26561879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档