node.js i18n-无法读取未定义的属性“ toLowerCase”

时间:2018-10-31 09:23:27

标签: node.js i18n-node

致电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上运行了代码。结果相同。

1 个答案:

答案 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对象上强制使用当前语言环境可以解决此问题。