我已经成功地实现了i18next,顺便说一下,它是一个很棒的库!尽管我还在寻找“最佳实践”。这是我现在的设置,总体上我喜欢:
var userLanguage = 'en'; // set at runtime
i18n.init({
lng : userLanguage,
shortcutFunction : 'defaultValue',
fallbackLng : false,
load : 'unspecific',
resGetPath : 'locales/__lng__/__ns__.json'
});在DOM中,我这样做:
<span data-i18n="demo.myFirstExample">My first example</span>在JS中,我这样做:
return i18n.t('demo.mySecondExample', 'My second example');这意味着我在代码本身中维护英语翻译。但是,我使用i18next- translation.json来维护使用单独的解析器的其他语言:
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文件?
发布于 2014-10-30 02:47:18
也许我在这里遗漏了什么,但你不能简单地这样做吗:
if (userLanguage != 'en') {
i18n.init({
lng : userLanguage,
shortcutFunction : 'defaultValue',
fallbackLng : false,
load : 'unspecific',
resGetPath : 'locales/__lng__/__ns__.json'
});
}这样,除非你确实需要翻译服务,否则你的脚本i18n不会被初始化。
发布于 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并提取所有内容。我只是从来没有花时间去实现它,因为我不使用它。
发布于 2014-11-04 22:37:23
请参阅“初始化时允许的白名单语言”下的http://i18next.com/pages/doc_init.html (无法在这些文档上分割链接...):
i18n.init({ lngWhitelist: ['de-DE', 'de', 'fr'] });只允许加载指定的语言。
这应该可以解决你的问题。不过,我想黑名单会更好。
https://stackoverflow.com/questions/26561879
复制相似问题