При звонке на 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.info(i18n.__('test'));
console.info(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. Тот же результат.
Кажется, библиотека не может найти подходящую локаль при вызове __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.info(i18n.__('test'));
console.info(i18n.__n("%s horse", 1));
console.info(i18n.__n("%s horse", 3));
Для вашего сведения, я отладил его, зарегистрировав некоторые функции отладки, подобные этой, в вызове configure()
.
logDebugFn: console.info,
logWarnFn: console.info,
logErrorFn: console.info
Потом, без звонка setLocale()
, я получил этот WARN: No locale found - check the context of the call to __(). Using de as current locale
. Принудительное использование текущей локали для объекта i18n
решило эту проблему.