[damned-lies] Fix language_from_ianacode method (#664197)



commit 95b0c60f20e39013103c5c9261214530afd10239
Author: Claude Paroz <claude 2xlibre net>
Date:   Wed Nov 16 15:40:46 2011 +0100

    Fix language_from_ianacode method (#664197)

 languages/models.py         |    4 +++-
 languages/tests/__init__.py |   14 ++++++++++++++
 2 files changed, 17 insertions(+), 1 deletions(-)
---
diff --git a/languages/models.py b/languages/models.py
index 1096802..c57fa93 100644
--- a/languages/models.py
+++ b/languages/models.py
@@ -1,4 +1,5 @@
 from django.db import models
+from django.db.models import Q
 from django.utils.translation import ugettext as _
 from teams.models import Team, FakeTeam
 
@@ -20,9 +21,10 @@ class Language(models.Model):
         """ Return a matching Language object corresponding to LANGUAGE_CODE (BCP47-formatted)
             This is a sort of BCP47 to ISO639 conversion function """
         iana_splitted = ianacode.split("-", 1)
+        lang_code = iana_splitted[0]
         iana_suffix = len(iana_splitted) > 1 and iana_splitted[1] or ""
         iana_suffix = iana_suffix.replace('Latn','latin').replace('Cyrl','cyrillic')
-        lang_list = cls.objects.filter(locale__startswith=iana_splitted[0])
+        lang_list = cls.objects.filter(Q(locale=lang_code) | Q(locale__regex=r'^%s[ _] +' % lang_code))
         if len(lang_list) == 0:
             return None
         elif len(lang_list) > 1:
diff --git a/languages/tests/__init__.py b/languages/tests/__init__.py
index 3b82d14..14aca91 100644
--- a/languages/tests/__init__.py
+++ b/languages/tests/__init__.py
@@ -21,9 +21,23 @@
 from django.core.urlresolvers import reverse
 from django.test import TestCase
 
+from languages.models import Language
+
 class LanguageTestCase(TestCase):
     fixtures = ['sample_data.json']
 
     def testLanguageReleaseXML(self):
         response = self.client.get(reverse("languages.views.language_release_xml", args=['fr', 'gnome-2-30']))
         self.assertContains(response, """<stats language="fr" release="gnome-2-30">""")
+
+    def test_language_from_ianacode(self):
+        Language.objects.create(name='Belarussian', locale='be')
+        Language.objects.create(name='French (Belgium)', locale='fr_BE')
+        Language.objects.create(name='Chinese (Taiwan)', locale='zh_TW')
+
+        self.assertEqual(Language.get_language_from_ianacode('fr-ch').locale, 'fr')
+        self.assertEqual(Language.get_language_from_ianacode('fr-be').locale, 'fr_BE')
+        self.assertEqual(Language.get_language_from_ianacode('be').locale, 'be')
+        self.assertEqual(Language.get_language_from_ianacode('be-latin-RU').locale, 'be')
+        self.assertEqual(Language.get_language_from_ianacode('zh-tw').locale, 'zh_TW')
+        self.assertEqual(Language.get_language_from_ianacode('xx'), None)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]