addon-sdk/source/lib/sdk/l10n/plural-rules.js

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 // This file is automatically generated with /python-lib/plural-rules-generator.py
     6 // Fetching data from: http://unicode.org/repos/cldr/trunk/common/supplemental/plurals.xml
     8 // Mapping of short locale name == to == > rule index in following list
    10 module.metadata = {
    11   "stability": "unstable"
    12 };
    14 const LOCALES_TO_RULES = {
    15   "af": 3, 
    16   "ak": 4, 
    17   "am": 4, 
    18   "ar": 1, 
    19   "asa": 3, 
    20   "az": 0, 
    21   "be": 11, 
    22   "bem": 3, 
    23   "bez": 3, 
    24   "bg": 3, 
    25   "bh": 4, 
    26   "bm": 0, 
    27   "bn": 3, 
    28   "bo": 0, 
    29   "br": 20, 
    30   "brx": 3, 
    31   "bs": 11, 
    32   "ca": 3, 
    33   "cgg": 3, 
    34   "chr": 3, 
    35   "cs": 12, 
    36   "cy": 17, 
    37   "da": 3, 
    38   "de": 3, 
    39   "dv": 3, 
    40   "dz": 0, 
    41   "ee": 3, 
    42   "el": 3, 
    43   "en": 3, 
    44   "eo": 3, 
    45   "es": 3, 
    46   "et": 3, 
    47   "eu": 3, 
    48   "fa": 0, 
    49   "ff": 5, 
    50   "fi": 3, 
    51   "fil": 4, 
    52   "fo": 3, 
    53   "fr": 5, 
    54   "fur": 3, 
    55   "fy": 3, 
    56   "ga": 8, 
    57   "gd": 24, 
    58   "gl": 3, 
    59   "gsw": 3, 
    60   "gu": 3, 
    61   "guw": 4, 
    62   "gv": 23, 
    63   "ha": 3, 
    64   "haw": 3, 
    65   "he": 2, 
    66   "hi": 4, 
    67   "hr": 11, 
    68   "hu": 0, 
    69   "id": 0, 
    70   "ig": 0, 
    71   "ii": 0, 
    72   "is": 3, 
    73   "it": 3, 
    74   "iu": 7, 
    75   "ja": 0, 
    76   "jmc": 3, 
    77   "jv": 0, 
    78   "ka": 0, 
    79   "kab": 5, 
    80   "kaj": 3, 
    81   "kcg": 3, 
    82   "kde": 0, 
    83   "kea": 0, 
    84   "kk": 3, 
    85   "kl": 3, 
    86   "km": 0, 
    87   "kn": 0, 
    88   "ko": 0, 
    89   "ksb": 3, 
    90   "ksh": 21, 
    91   "ku": 3, 
    92   "kw": 7, 
    93   "lag": 18, 
    94   "lb": 3, 
    95   "lg": 3, 
    96   "ln": 4, 
    97   "lo": 0, 
    98   "lt": 10, 
    99   "lv": 6, 
   100   "mas": 3, 
   101   "mg": 4, 
   102   "mk": 16, 
   103   "ml": 3, 
   104   "mn": 3, 
   105   "mo": 9, 
   106   "mr": 3, 
   107   "ms": 0, 
   108   "mt": 15, 
   109   "my": 0, 
   110   "nah": 3, 
   111   "naq": 7, 
   112   "nb": 3, 
   113   "nd": 3, 
   114   "ne": 3, 
   115   "nl": 3, 
   116   "nn": 3, 
   117   "no": 3, 
   118   "nr": 3, 
   119   "nso": 4, 
   120   "ny": 3, 
   121   "nyn": 3, 
   122   "om": 3, 
   123   "or": 3, 
   124   "pa": 3, 
   125   "pap": 3, 
   126   "pl": 13, 
   127   "ps": 3, 
   128   "pt": 3, 
   129   "rm": 3, 
   130   "ro": 9, 
   131   "rof": 3, 
   132   "ru": 11, 
   133   "rwk": 3, 
   134   "sah": 0, 
   135   "saq": 3, 
   136   "se": 7, 
   137   "seh": 3, 
   138   "ses": 0, 
   139   "sg": 0, 
   140   "sh": 11, 
   141   "shi": 19, 
   142   "sk": 12, 
   143   "sl": 14, 
   144   "sma": 7, 
   145   "smi": 7, 
   146   "smj": 7, 
   147   "smn": 7, 
   148   "sms": 7, 
   149   "sn": 3, 
   150   "so": 3, 
   151   "sq": 3, 
   152   "sr": 11, 
   153   "ss": 3, 
   154   "ssy": 3, 
   155   "st": 3, 
   156   "sv": 3, 
   157   "sw": 3, 
   158   "syr": 3, 
   159   "ta": 3, 
   160   "te": 3, 
   161   "teo": 3, 
   162   "th": 0, 
   163   "ti": 4, 
   164   "tig": 3, 
   165   "tk": 3, 
   166   "tl": 4, 
   167   "tn": 3, 
   168   "to": 0, 
   169   "tr": 0, 
   170   "ts": 3, 
   171   "tzm": 22, 
   172   "uk": 11, 
   173   "ur": 3, 
   174   "ve": 3, 
   175   "vi": 0, 
   176   "vun": 3, 
   177   "wa": 4, 
   178   "wae": 3, 
   179   "wo": 0, 
   180   "xh": 3, 
   181   "xog": 3, 
   182   "yo": 0, 
   183   "zh": 0, 
   184   "zu": 3
   185 };
   187 // Utility functions for plural rules methods
   188 function isIn(n, list) list.indexOf(n) !== -1;
   189 function isBetween(n, start, end) start <= n && n <= end;
   191 // List of all plural rules methods, that maps an integer to the plural form name to use
   192 const RULES = {
   193   "0": function (n) {
   195     return "other"
   196   },
   197   "1": function (n) {
   198     if ((isBetween((n % 100), 3, 10)))
   199       return "few";
   200     if (n == 0)
   201       return "zero";
   202     if ((isBetween((n % 100), 11, 99)))
   203       return "many";
   204     if (n == 2)
   205       return "two";
   206     if (n == 1)
   207       return "one";
   208     return "other"
   209   },
   210   "2": function (n) {
   211     if (n != 0 && (n % 10) == 0)
   212       return "many";
   213     if (n == 2)
   214       return "two";
   215     if (n == 1)
   216       return "one";
   217     return "other"
   218   },
   219   "3": function (n) {
   220     if (n == 1)
   221       return "one";
   222     return "other"
   223   },
   224   "4": function (n) {
   225     if ((isBetween(n, 0, 1)))
   226       return "one";
   227     return "other"
   228   },
   229   "5": function (n) {
   230     if ((isBetween(n, 0, 2)) && n != 2)
   231       return "one";
   232     return "other"
   233   },
   234   "6": function (n) {
   235     if (n == 0)
   236       return "zero";
   237     if ((n % 10) == 1 && (n % 100) != 11)
   238       return "one";
   239     return "other"
   240   },
   241   "7": function (n) {
   242     if (n == 2)
   243       return "two";
   244     if (n == 1)
   245       return "one";
   246     return "other"
   247   },
   248   "8": function (n) {
   249     if ((isBetween(n, 3, 6)))
   250       return "few";
   251     if ((isBetween(n, 7, 10)))
   252       return "many";
   253     if (n == 2)
   254       return "two";
   255     if (n == 1)
   256       return "one";
   257     return "other"
   258   },
   259   "9": function (n) {
   260     if (n == 0 || n != 1 && (isBetween((n % 100), 1, 19)))
   261       return "few";
   262     if (n == 1)
   263       return "one";
   264     return "other"
   265   },
   266   "10": function (n) {
   267     if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))
   268       return "few";
   269     if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))
   270       return "one";
   271     return "other"
   272   },
   273   "11": function (n) {
   274     if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
   275       return "few";
   276     if ((n % 10) == 0 || (isBetween((n % 10), 5, 9)) || (isBetween((n % 100), 11, 14)))
   277       return "many";
   278     if ((n % 10) == 1 && (n % 100) != 11)
   279       return "one";
   280     return "other"
   281   },
   282   "12": function (n) {
   283     if ((isBetween(n, 2, 4)))
   284       return "few";
   285     if (n == 1)
   286       return "one";
   287     return "other"
   288   },
   289   "13": function (n) {
   290     if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))
   291       return "few";
   292     if (n != 1 && (isBetween((n % 10), 0, 1)) || (isBetween((n % 10), 5, 9)) || (isBetween((n % 100), 12, 14)))
   293       return "many";
   294     if (n == 1)
   295       return "one";
   296     return "other"
   297   },
   298   "14": function (n) {
   299     if ((isBetween((n % 100), 3, 4)))
   300       return "few";
   301     if ((n % 100) == 2)
   302       return "two";
   303     if ((n % 100) == 1)
   304       return "one";
   305     return "other"
   306   },
   307   "15": function (n) {
   308     if (n == 0 || (isBetween((n % 100), 2, 10)))
   309       return "few";
   310     if ((isBetween((n % 100), 11, 19)))
   311       return "many";
   312     if (n == 1)
   313       return "one";
   314     return "other"
   315   },
   316   "16": function (n) {
   317     if ((n % 10) == 1 && n != 11)
   318       return "one";
   319     return "other"
   320   },
   321   "17": function (n) {
   322     if (n == 3)
   323       return "few";
   324     if (n == 0)
   325       return "zero";
   326     if (n == 6)
   327       return "many";
   328     if (n == 2)
   329       return "two";
   330     if (n == 1)
   331       return "one";
   332     return "other"
   333   },
   334   "18": function (n) {
   335     if (n == 0)
   336       return "zero";
   337     if ((isBetween(n, 0, 2)) && n != 0 && n != 2)
   338       return "one";
   339     return "other"
   340   },
   341   "19": function (n) {
   342     if ((isBetween(n, 2, 10)))
   343       return "few";
   344     if ((isBetween(n, 0, 1)))
   345       return "one";
   346     return "other"
   347   },
   348   "20": function (n) {
   349     if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(isBetween((n % 100), 10, 19) || isBetween((n % 100), 70, 79) || isBetween((n % 100), 90, 99)))
   350       return "few";
   351     if ((n % 1000000) == 0 && n != 0)
   352       return "many";
   353     if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))
   354       return "two";
   355     if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))
   356       return "one";
   357     return "other"
   358   },
   359   "21": function (n) {
   360     if (n == 0)
   361       return "zero";
   362     if (n == 1)
   363       return "one";
   364     return "other"
   365   },
   366   "22": function (n) {
   367     if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))
   368       return "one";
   369     return "other"
   370   },
   371   "23": function (n) {
   372     if ((isBetween((n % 10), 1, 2)) || (n % 20) == 0)
   373       return "one";
   374     return "other"
   375   },
   376   "24": function (n) {
   377     if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))
   378       return "few";
   379     if (isIn(n, [2, 12]))
   380       return "two";
   381     if (isIn(n, [1, 11]))
   382       return "one";
   383     return "other"
   384   },
   385 };
   387 /**
   388   * Return a function that gives the plural form name for a given integer
   389   * for the specified `locale`
   390   *   let fun = getRulesForLocale('en');
   391   *   fun(1)    -> 'one'
   392   *   fun(0)    -> 'other'
   393   *   fun(1000) -> 'other'
   394   */
   395 exports.getRulesForLocale = function getRulesForLocale(locale) {
   396   let index = LOCALES_TO_RULES[locale];
   397   if (!(index in RULES)) {
   398     console.warn('Plural form unknown for locale "' + locale + '"');
   399     return function () { return "other"; };
   400   }
   401   return RULES[index];
   402 }

mercurial