Bug 1432163 - Add locales to plurals, add exceptions for rule 7 and bs, hr, sr r?pike draft
authorFrancesco Lodolo (:flod) <flod@lodolo.net>
Tue, 20 Feb 2018 14:00:42 +0100
changeset 459 7f3c49eda83ca8976592ed9fc41d75fb1f372050
parent 449 5a024113dd7c60ce98f339c929f426f1aa0449e4
push id154
push userbmo:francesco.lodolo@gmail.com
push dateTue, 20 Feb 2018 13:10:07 +0000
reviewerspike
bugs1432163
Bug 1432163 - Add locales to plurals, add exceptions for rule 7 and bs, hr, sr r?pike MozReview-Commit-ID: GygG2k23W99
compare_locales/integration_tests/test_plurals.py
compare_locales/plurals.py
--- a/compare_locales/integration_tests/test_plurals.py
+++ b/compare_locales/integration_tests/test_plurals.py
@@ -17,30 +17,30 @@ TRANSVISION_URL = (
 )
 
 
 class TestPlural(unittest.TestCase):
     '''Integration test for plural forms and l10n-central.
 
     Having more plural forms than in l10n-central is OK, missing or
     mismatching ones isn't.
-    Depends on transvision.
+    Depends on Transvision.
     '''
     maxDiff = None
 
     def test_valid_forms(self):
         reference_form_map = self._load_transvision()
         compare_locales_map = self._parse_plurals_py()
-        # Notify locales in compare-locales but not in transvision
+        # Notify locales in compare-locales but not in Transvision
         # Might be incubator locales
         extra_locales = set()
         extra_locales.update(compare_locales_map)
         extra_locales.difference_update(reference_form_map)
         for locale in sorted(extra_locales):
-            print("{} not in transvision, OK".format(locale))
+            print("{} not in Transvision, OK".format(locale))
             compare_locales_map.pop(locale)
         # Strip matches from dicts, to make diff for test small
         locales = set()
         locales.update(compare_locales_map)
         locales.intersection_update(reference_form_map)
         for locale in locales:
             if compare_locales_map[locale] == reference_form_map[locale]:
                 compare_locales_map.pop(locale)
@@ -50,17 +50,17 @@ class TestPlural(unittest.TestCase):
     def _load_transvision(self):
         '''Use the Transvision API to load all values of pluralRule
         in intl.properties.
         Skip test on load failure.
         '''
         try:
             data = urllib2.urlopen(TRANSVISION_URL).read()
         except urllib2.URLError:
-            raise unittest.SkipTest("Couldn't load transvision API.")
+            raise unittest.SkipTest("Couldn't load Transvision API.")
         return json.loads(data)
 
     def _parse_plurals_py(self):
         '''Load compare_locales.plurals, parse the AST, and inspect
         the dictionary assigned to CATEGORIES_BY_LOCALE to find
         the actual plural number.
         Convert both number and locale code to unicode for comparing
         to json.
--- a/compare_locales/plurals.py
+++ b/compare_locales/plurals.py
@@ -47,33 +47,44 @@ CATEGORIES_BY_INDEX = (
     ('one', 'two', 'few', 'many', 'other'),
     # 17 (Shuar)
     # CLDR: (missing)
     ('zero', 'other'),
     # 18 (Welsh),
     ('zero', 'one', 'two', 'few', 'many', 'other'),
 )
 
+CATEGORIES_EXCEPTIONS = {
+    7: ('one', 'few', 'other'),
+}
+
 CATEGORIES_BY_LOCALE = {
+    'ace': CATEGORIES_BY_INDEX[0],
     'ach': CATEGORIES_BY_INDEX[1],
     'af': CATEGORIES_BY_INDEX[1],
+    'ak': CATEGORIES_BY_INDEX[2],
     'an': CATEGORIES_BY_INDEX[1],
     'ar': CATEGORIES_BY_INDEX[12],
+    'arn': CATEGORIES_BY_INDEX[1],
     'as': CATEGORIES_BY_INDEX[1],
     'ast': CATEGORIES_BY_INDEX[1],
     'az': CATEGORIES_BY_INDEX[1],
     'be': CATEGORIES_BY_INDEX[7],
     'bg': CATEGORIES_BY_INDEX[1],
     'bn-BD': CATEGORIES_BY_INDEX[2],
     'bn-IN': CATEGORIES_BY_INDEX[2],
     'br': CATEGORIES_BY_INDEX[1],
-    'bs': CATEGORIES_BY_INDEX[7],
+    'brx': CATEGORIES_BY_INDEX[1],
+    'bs': CATEGORIES_EXCEPTIONS[7],
     'ca': CATEGORIES_BY_INDEX[1],
     'cak': CATEGORIES_BY_INDEX[1],
+    'crh': CATEGORIES_BY_INDEX[1],
     'cs': CATEGORIES_BY_INDEX[8],
+    'csb': CATEGORIES_BY_INDEX[9],
+    'cv': CATEGORIES_BY_INDEX[1],
     'cy': CATEGORIES_BY_INDEX[18],
     'da': CATEGORIES_BY_INDEX[1],
     'de': CATEGORIES_BY_INDEX[1],
     'dsb': CATEGORIES_BY_INDEX[10],
     'el': CATEGORIES_BY_INDEX[1],
     'en-GB': CATEGORIES_BY_INDEX[1],
     'en-US': CATEGORIES_BY_INDEX[1],
     'en-ZA': CATEGORIES_BY_INDEX[1],
@@ -83,80 +94,109 @@ CATEGORIES_BY_LOCALE = {
     'es-ES': CATEGORIES_BY_INDEX[1],
     'es-MX': CATEGORIES_BY_INDEX[1],
     'et': CATEGORIES_BY_INDEX[1],
     'eu': CATEGORIES_BY_INDEX[1],
     'fa': CATEGORIES_BY_INDEX[2],
     'ff': CATEGORIES_BY_INDEX[1],
     'fi': CATEGORIES_BY_INDEX[1],
     'fr': CATEGORIES_BY_INDEX[2],
+    'fur': CATEGORIES_BY_INDEX[1],
     'fy-NL': CATEGORIES_BY_INDEX[1],
     'ga-IE': CATEGORIES_BY_INDEX[11],
     'gd': CATEGORIES_BY_INDEX[4],
     'gl': CATEGORIES_BY_INDEX[1],
     'gn': CATEGORIES_BY_INDEX[1],
     'gu-IN': CATEGORIES_BY_INDEX[2],
     'he': CATEGORIES_BY_INDEX[1],
     'hi-IN': CATEGORIES_BY_INDEX[2],
-    'hr': CATEGORIES_BY_INDEX[7],
+    'hr': CATEGORIES_EXCEPTIONS[7],
     'hsb': CATEGORIES_BY_INDEX[10],
+    'hto': CATEGORIES_BY_INDEX[1],
     'hu': CATEGORIES_BY_INDEX[1],
     'hy-AM': CATEGORIES_BY_INDEX[1],
     'ia': CATEGORIES_BY_INDEX[1],
     'id': CATEGORIES_BY_INDEX[0],
     'is': CATEGORIES_BY_INDEX[15],
     'it': CATEGORIES_BY_INDEX[1],
     'ja': CATEGORIES_BY_INDEX[0],
     'ja-JP-mac': CATEGORIES_BY_INDEX[0],
     'jiv': CATEGORIES_BY_INDEX[17],
     'ka': CATEGORIES_BY_INDEX[1],
     'kab': CATEGORIES_BY_INDEX[1],
     'kk': CATEGORIES_BY_INDEX[1],
     'km': CATEGORIES_BY_INDEX[0],
     'kn': CATEGORIES_BY_INDEX[1],
     'ko': CATEGORIES_BY_INDEX[0],
+    'ks': CATEGORIES_BY_INDEX[1],
+    'ku': CATEGORIES_BY_INDEX[1],
+    'lb': CATEGORIES_BY_INDEX[1],
+    'lg': CATEGORIES_BY_INDEX[1],
     'lij': CATEGORIES_BY_INDEX[1],
     'lo': CATEGORIES_BY_INDEX[0],
     'lt': CATEGORIES_BY_INDEX[6],
     'ltg': CATEGORIES_BY_INDEX[3],
     'lv': CATEGORIES_BY_INDEX[3],
     'mai': CATEGORIES_BY_INDEX[1],
+    'meh': CATEGORIES_BY_INDEX[0],
+    'mix': CATEGORIES_BY_INDEX[0],
     'mk': CATEGORIES_BY_INDEX[15],
     'ml': CATEGORIES_BY_INDEX[1],
+    'mn': CATEGORIES_BY_INDEX[1],
     'mr': CATEGORIES_BY_INDEX[1],
     'ms': CATEGORIES_BY_INDEX[0],
     'my': CATEGORIES_BY_INDEX[0],
     'nb-NO': CATEGORIES_BY_INDEX[1],
     'ne-NP': CATEGORIES_BY_INDEX[1],
     'nl': CATEGORIES_BY_INDEX[1],
     'nn-NO': CATEGORIES_BY_INDEX[1],
+    'nr': CATEGORIES_BY_INDEX[1],
+    'nso': CATEGORIES_BY_INDEX[2],
+    'ny': CATEGORIES_BY_INDEX[1],
     'oc': CATEGORIES_BY_INDEX[2],
     'or': CATEGORIES_BY_INDEX[1],
     'pa-IN': CATEGORIES_BY_INDEX[2],
+    'pai': CATEGORIES_BY_INDEX[0],
     'pl': CATEGORIES_BY_INDEX[9],
     'pt-BR': CATEGORIES_BY_INDEX[1],
     'pt-PT': CATEGORIES_BY_INDEX[1],
+    'quy': CATEGORIES_BY_INDEX[1],
+    'qvi': CATEGORIES_BY_INDEX[1],
     'rm': CATEGORIES_BY_INDEX[1],
     'ro': CATEGORIES_BY_INDEX[5],
     'ru': CATEGORIES_BY_INDEX[7],
+    'rw': CATEGORIES_BY_INDEX[1],
+    'sah': CATEGORIES_BY_INDEX[0],
+    'sat': CATEGORIES_BY_INDEX[1],
+    'sc': CATEGORIES_BY_INDEX[1],
+    'scn': CATEGORIES_BY_INDEX[1],
     'si': CATEGORIES_BY_INDEX[1],
     'sk': CATEGORIES_BY_INDEX[8],
     'sl': CATEGORIES_BY_INDEX[10],
     'son': CATEGORIES_BY_INDEX[1],
     'sq': CATEGORIES_BY_INDEX[1],
-    'sr': CATEGORIES_BY_INDEX[7],
+    'sr': CATEGORIES_EXCEPTIONS[7],
+    'ss': CATEGORIES_BY_INDEX[1],
+    'st': CATEGORIES_BY_INDEX[1],
     'sv-SE': CATEGORIES_BY_INDEX[1],
+    'sw': CATEGORIES_BY_INDEX[1],
+    'ta-LK': CATEGORIES_BY_INDEX[1],
     'ta': CATEGORIES_BY_INDEX[1],
     'te': CATEGORIES_BY_INDEX[1],
     'th': CATEGORIES_BY_INDEX[0],
     'tl': CATEGORIES_BY_INDEX[1],
+    'tn': CATEGORIES_BY_INDEX[1],
     'tr': CATEGORIES_BY_INDEX[1],
     'trs': CATEGORIES_BY_INDEX[1],
+    'ts': CATEGORIES_BY_INDEX[1],
+    'tsz': CATEGORIES_BY_INDEX[1],
     'uk': CATEGORIES_BY_INDEX[7],
     'ur': CATEGORIES_BY_INDEX[1],
     'uz': CATEGORIES_BY_INDEX[1],
+    've': CATEGORIES_BY_INDEX[1],
     'vi': CATEGORIES_BY_INDEX[0],
     'wo': CATEGORIES_BY_INDEX[0],
     'xh': CATEGORIES_BY_INDEX[1],
     'zam': CATEGORIES_BY_INDEX[1],
     'zh-CN': CATEGORIES_BY_INDEX[1],
-    'zh-TW': CATEGORIES_BY_INDEX[0]
+    'zh-TW': CATEGORIES_BY_INDEX[0],
+    'zu': CATEGORIES_BY_INDEX[2],
 }