i18n2

1.0.1 • Public • Published

Build status Build status Transpilation status npm version

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 (=== 1) return "${n} kot";
    n = n % 100;
    if ((> 4) && (< 22)) return "${n} kotów";
    switch (% 10) {
      case 2:
      case 3:
      case 4:
      return "${n} koty";
    }
    return "${n} kotów";
  }
};

Tests

$ npm test

Package Sidebar

Install

npm i i18n2

Weekly Downloads

113

Version

1.0.1

License

MIT

Last publish

Collaborators

  • medikoo