1.0.1 • Published 7 years ago

i18n2 v1.0.1

Weekly downloads
2
License
MIT
Repository
github
Last release
7 years ago

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 (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