i18n2
v1.0.1
Published
Another gettext solution
Downloads
284
Maintainers
Readme
i18n2
Another gettext solution for JavaScript
Installation
$ npm install i18n2
Usage
Once initialized, translation engine should be used across your application as a translator of your messages
var I18n = require('i18n2');
// db (map of translations) is optional and can be provided at later step
var i18n = new I18n(polishLangDb);
// By convention name for gettext translator function is `_`
var _ = i18n;
_("Hello World!"); // Witaj Świecie!
// We can switch database on the go
_.db = italianLangDb
_("Hello World!"); // Ciao World
Contexts
Different contexts can be assigned:
var _ = i18n.bind('admin');
// Resolved in context of 'admin'
_("Hello World!"); // Admin: Witaj Świecie
Configuration of messages
Singular message: _(msg[, inserts])
Singular message can be plain:
_("Hello World!"); // Witaj Świecie!
or filled with substitutions to replace:
_("My name is ${firstName} ${lastName}", {
firstName: "John",
lastName: "Smith"
}); // Nazywam się John Smith
Substitutions syntax follows ECMAScript's 6 template strings format
Singular + plural message: _(singularMsg, pluralMsg, count[, inserts])
Singular and plural key, plus resolved count needs to be provided:
_("${n} cat", "${n} cats", 1); // 1 kot
_("${n} cat", "${n} cats", 3); // 3 koty
_("${n} cat", "${n} cats", 5); // 5 kotów
Same way as in case of singular messages, inserts can be provided as fourth argument
Configuration of translations database
Configuration with no contexts (default
context is assumed):
var db = {
"Hello World": "Witaj Świecie!"
};
With contexts
var db = {
"Hello World": {
default: "Witaj Świecie!",
admin: "Admin: Witaj Świecie!"
}
};
Singular + plural messages
Key of such message is generated with following concatenation rule key = 'n\0' + singularMsg + '\0' + pluralMsg
;
There are two ways of providing translations
with Array of options
var db = {
"\0${n} cat\0${n} cats": [
"${n} kot", // 1
"${n} koty",,, // 2,3,4
"${n} kotów" // 5+
]
};
with Function
In some languages (like Polish) resolving plurals is more tricky, the definite way can only be achieved with custom function:
var db = {
"\0${n} cat\0${n} cats": function (n) {
if (n === 1) return "${n} kot";
n = n % 100;
if ((n > 4) && (n < 22)) return "${n} kotów";
switch (n % 10) {
case 2:
case 3:
case 4:
return "${n} koty";
}
return "${n} kotów";
}
};
Tests
$ npm test