granula
Version:
i18n tool for angular.js applications
214 lines (209 loc) • 6.6 kB
JavaScript
(function() {
var normalizationForms, pluralizationForms;
pluralizationForms = [
{
plural: function(n) {
return (n > 1) ? 1 : 0;
},
languages: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'fr', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt_BR', 'tg', 'ti', 'tr', 'uz', 'wa', 'zh']
}, {
plural: function(n) {
return (n != 1) ? 1 : 0;
},
languages: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'brx', 'ca', 'da', 'de', 'doi', 'el', 'en', 'eo', 'es', 'es_AR', 'et', 'eu', 'ff', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'he', 'hi', 'hne', 'hy', 'hu', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mni', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'se', 'nn', 'no', 'nso', 'or', 'ps', 'pa', 'pap', 'pms', 'pt', 'rm', 'rw', 'sat', 'sco', 'sd', 'si', 'so', 'son', 'sq', 'sw', 'sv', 'ta', 'te', 'tk', 'ur', 'yo']
}, {
plural: function(n) {
return (n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);
},
languages: ['ar']
}, {
plural: function(n) {
return 0;
},
languages: ['ay', 'bo', 'cgg', 'dz', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'my', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh']
}, {
plural: function(n) {
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
},
languages: ['be', 'bs', 'hr', 'ru', 'sr', 'uk']
}, {
plural: function(n) {
return (n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;
},
languages: ['cs', 'sk']
}, {
plural: function(n) {
return n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;
},
languages: ['csb']
}, {
plural: function(n) {
return (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;
},
languages: ['cy']
}, {
plural: function(n) {
return n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4;
},
languages: ['ga']
}, {
plural: function(n) {
return (n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;
},
languages: ['gd']
}, {
plural: function(n) {
return (n%10!=1 || n%100==11) ? 1 : 0;
},
languages: ['is']
}, {
plural: function(n) {
return (n != 0) ? 1 : 0;
},
languages: ['jv']
}, {
plural: function(n) {
return (n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3;
},
languages: ['kw']
}, {
plural: function(n) {
return (n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);
},
languages: ['lt']
}, {
plural: function(n) {
return (n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);
},
languages: ['lv']
}, {
plural: function(n) {
return n==1 || n%10==1 ? 0 : 1;
},
languages: ['mk']
}, {
plural: function(n) {
return (n==0 ? 0 : n==1 ? 1 : 2);
},
languages: ['mnk']
}, {
plural: function(n) {
return (n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3);
},
languages: ['mt']
}, {
plural: function(n) {
return (n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
},
languages: ['pl']
}, {
plural: function(n) {
return (n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);
},
languages: ['ro']
}, {
plural: function(n) {
return (n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);
},
languages: ['sl']
}
];
normalizationForms = {
en: function(word, suffixes) {
return {
word: word,
suffixes: (function() {
switch (suffixes.length) {
case 1:
return ["", suffixes[0]];
default:
return suffixes;
}
})()
};
},
ru: function(word, suffixes) {
var form2Suffix, singularSuffix;
switch (suffixes.length) {
case 1:
return {
word: word,
suffixes: ["", suffixes[0], ""]
};
case 2:
form2Suffix = suffixes[1];
singularSuffix = word.slice(-form2Suffix.length);
return {
word: word.slice(0, -singularSuffix.length),
suffixes: [singularSuffix].concat(suffixes)
};
default:
return {
word: word,
suffixes: suffixes
};
}
}
};
module.exports = function() {
var form, lang, pluralizationRules, _i, _j, _len, _len1, _ref;
pluralizationRules = {};
for (_i = 0, _len = pluralizationForms.length; _i < _len; _i++) {
form = pluralizationForms[_i];
_ref = form.languages;
for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
lang = _ref[_j];
pluralizationRules[lang] = {
pluralize: form.plural,
normalize: normalizationForms[lang]
};
}
}
return {
_get: function(language, options) {
if (options == null) {
options = {
useEnglishAsDefault: true
};
}
if (!pluralizationRules[language] && options.useEnglishAsDefault) {
language = "en";
}
return pluralizationRules[language];
},
getPluralizeForm: function(language, value, options) {
return this._get(language, options).pluralize(value);
},
normalizeForms: function(language, word, suffixes, options) {
var _ref1;
return ((_ref1 = this._get(language, options).normalize) != null ? _ref1 : this._doNotNormalize)(word, suffixes);
},
updatePluralization: function(language, pluralizeFn, normalizeFn) {
return pluralizationRules[language] = {
pluralize: pluralizeFn,
normalize: normalizeFn
};
},
_doNotNormalize: function(word, suffixes) {
return {
word: word,
suffixes: suffixes
};
},
preparePluralizationFn: function(language, word, suffixes, options) {
var res,
_this = this;
res = this.normalizeForms(language, word, suffixes, options);
return function(val) {
return res.word + res.suffixes[_this.getPluralizeForm(language, val, options)];
};
},
getLanguages: function() {
return Object.keys(pluralizationRules);
},
getAll: function() {
return pluralizationRules;
}
};
};
}).call(this);