UNPKG

granula

Version:

i18n tool for angular.js applications

214 lines (209 loc) 6.6 kB
(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);