致电i18n.__n('..')
时总是收到以下错误:
TypeError: Cannot read property 'toLowerCase' of undefined
at Object.i18nTranslatePlural [as __n] (/home/runner/node_modules/i18n/i18n.js:367:31)
at evalmachine.<anonymous>:14:18
at Script.runInContext (vm.js:74:29)
at Object.runInContext (vm.js:182:6)
at evaluate (/run_dir/repl.js:133:14)
at ReadStream.<anonymous> (/run_dir/repl.js:116:5)
at ReadStream.emit (events.js:180:13)
at addChunk (_stream_readable.js:274:12)
at readableAddChunk (_stream_readable.js:261:11)
at ReadStream.Readable.push (_stream_readable.js:218:10)
顺便说一句,i18n.__('..')
就像一个吊饰!
代码如下:
index.js
var i18n = require("i18n");
var path = require('path');
var __dirname = path.resolve();
i18n.configure({
locales:['en', 'de'],
directory: __dirname + '/locales',
defaultLocale: 'de',
});
console.log(i18n.__('test'));
console.log(i18n.__n('%s horse', 3));
locales / de.json
{
"test": "Das ist ein Test",
"%s horse" : {
"one": "%s Pferd",
"other": "%s Pferde"
}
}
locales / en.json
{
"test": "This is a test",
"%s horse" : {
"one": "%s horse",
"other": "%s horses"
}
}
希望有些人可以给我一些建议,我做错了什么或如何解决该问题。我在Mac笔记本和https://repl.it/languages/nodejs上运行了代码。结果相同。
答案 0 :(得分:0)
在调用__n
时,库似乎在查找正确的语言环境方面遇到了麻烦。只需设置i18n.setLocale('de')
就可以了。如下所示的代码将输出
Das ist ein Test
1 Pferd
3 Pferde
我期望defaultLocale就足够了,但似乎还不够。 希望这个答案有帮助!
var i18n = require("i18n");
var path = require('path');
var __dirname = path.resolve();
i18n.configure({
locales:['en', 'de'],
directory: __dirname + '/locales',
defaultLocale: 'de'
});
i18n.setLocale('de')
console.log(i18n.__('test'));
console.log(i18n.__n("%s horse", 1));
console.log(i18n.__n("%s horse", 3));
仅供参考,我通过在configure()
调用中注册了一些调试功能来调试了它
logDebugFn: console.log,
logWarnFn: console.log,
logErrorFn: console.log
然后,没有setLocale()
的电话,我得到了这个WARN: No locale found - check the context of the call to __(). Using de as current locale
。在i18n
对象上强制使用当前语言环境可以解决此问题。