From 902a7c9a72c28a46c948e24c1ac113715df17e48 Mon Sep 17 00:00:00 2001 From: wrwrwr Date: Fri, 24 Oct 2014 12:13:45 +0200 Subject: [PATCH] Fixed Indonesian translation field and ForeignKey field name clash. The official ISO-639-1 code for Indonesia is "id"; replaced this problematic suffix with the ISO-639-2 3-letter code in the translation field names (http://en.wikipedia.org/wiki/Indonesian_language). --- modeltranslation/tests/tests.py | 4 ++++ modeltranslation/utils.py | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/modeltranslation/tests/tests.py b/modeltranslation/tests/tests.py index e8d3ffa..0ba4d41 100644 --- a/modeltranslation/tests/tests.py +++ b/modeltranslation/tests/tests.py @@ -965,6 +965,10 @@ class ForeignKeyFieldsTest(ModeltranslationTestBase): self.assertEqual(manager.filter(test_fks__title='f_title_de').count(), 0) self.assertEqual(manager.filter(test_fks__title_de='f_title_de').count(), 1) + def test_indonesian(self): + field = models.ForeignKeyModel._meta.get_field('test') + self.assertNotEqual(field.attname, build_localized_fieldname(field.name, 'id')) + def assertQuerysetsEqual(self, qs1, qs2): pk = lambda o: o.pk return self.assertEqual(sorted(qs1, key=pk), sorted(qs2, key=pk)) diff --git a/modeltranslation/utils.py b/modeltranslation/utils.py index 3a1eb64..7461aa2 100644 --- a/modeltranslation/utils.py +++ b/modeltranslation/utils.py @@ -30,10 +30,16 @@ def get_translation_fields(field): def build_localized_fieldname(field_name, lang): + if lang == 'id': + # The 2-letter Indonesian language code is problematic with the + # current naming scheme as Django foreign keys also add "id" suffix. + lang = 'ind' return str('%s_%s' % (field_name, lang.replace('-', '_'))) def _build_localized_verbose_name(verbose_name, lang): + if lang == 'id': + lang = 'ind' return force_text('%s [%s]') % (force_text(verbose_name), lang) build_localized_verbose_name = lazy(_build_localized_verbose_name, six.text_type)