You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.8 KiB
73 lines
1.8 KiB
define(["app/config", "app/i18n/de", "app/i18n/en", "app/i18n/fr", "app/i18n/ru", "app/i18n/it", "app/i18n/eo"], function(config, de, en, fr, ru, it, eo) {
|
|
|
|
"use strict";
|
|
|
|
var pluralforms = function(lang) {
|
|
switch (lang) {
|
|
case "en":
|
|
case "de":
|
|
case "it":
|
|
case "eo":
|
|
return function(msgs, n) {
|
|
return msgs[n === 1 ? 0 : 1];
|
|
};
|
|
case "fr":
|
|
return function(msgs, n) {
|
|
return msgs[n > 1 ? 1 : 0];
|
|
};
|
|
case "ru":
|
|
return function(msgs, n) {
|
|
if (n % 10 === 1 && n % 100 !== 11) {
|
|
return msgs[0];
|
|
} else if (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)) {
|
|
return msgs[1];
|
|
} else {
|
|
return typeof msgs[2] !== "undefined" ? msgs[2] : msgs[1];
|
|
}
|
|
};
|
|
default:
|
|
return null;
|
|
}
|
|
};
|
|
|
|
// useragent's prefered language (or manually overridden)
|
|
var lang = config.lang;
|
|
|
|
// fall back to English
|
|
if (! pluralforms(lang)) {
|
|
lang = "en";
|
|
}
|
|
|
|
var catalogue = {
|
|
de: de,
|
|
en: en,
|
|
fr: fr,
|
|
ru: ru,
|
|
it: it,
|
|
eo: eo
|
|
};
|
|
|
|
var plural = pluralforms(lang);
|
|
|
|
var translate = function(msgid) {
|
|
return catalogue[lang][msgid] || en[msgid] || "???";
|
|
};
|
|
|
|
var pluralize = function(msgid, n) {
|
|
var msg;
|
|
|
|
msg = translate(msgid);
|
|
if (msg.indexOf("\n") > -1) {
|
|
msg = plural(msg.split("\n"), (+ n));
|
|
}
|
|
|
|
return msg ? msg.replace("{{ n }}", (+ n)) : msg;
|
|
};
|
|
|
|
return {
|
|
lang: lang,
|
|
translate: translate,
|
|
pluralize: pluralize
|
|
};
|
|
});
|