#3594: Translation problem in javascript
-------------------------------------------+--------------------------------
          Reporter:  karsu                 |         Owner:  msaelices
            Status:  reopened              |     Milestone:           
         Component:  Internationalization  |       Version:  SVN      
        Resolution:                        |      Keywords:           
             Stage:  Accepted              |     Has_patch:  1        
        Needs_docs:  0                     |   Needs_tests:  0        
Needs_better_patch:  1                     |  
-------------------------------------------+--------------------------------
Changes (by arkx):

  * needs_better_patch:  0 => 1

Comment:

 I can still reproduce this bug with Django version 1.0.2 final. My
 settings.LANGUAGE_CODE is set to fi, and everything works well when I'm
 using Finnish. However, when I switch to English, only translations in the
 django domain work: Javascript translations stop working due to a bug in
 javascript_catalog in django/views/i18n.py.

 Replying to [comment:11 msaelices]:
 > There are no needs of this patch. It's work for me. I created exactly
 the same testing environment ticket author.

 I think this is the core of the issue. This works for you because you have
 created English translation files. I'm translating from English to
 Finnish, thus no English translation files exist. I suspect the original
 reporter and the people who created the earlier patches work in the same
 way: strings in templates and code are in English and all other languages
 are created through makemessages. This way is actually endorsed by
 Django's i18n documentation.

 This is where the function javascript_catalog in views/i18n.py gets it
 wrong. In my case default_locale is 'fi' and 'locale' is 'en-us' in the
 following excerpts.

 {{{
     # first load all english languages files for defaults
     for package in packages:
         p = importlib.import_module(package)
         path = os.path.join(os.path.dirname(p.__file__), 'locale')
         paths.append(path)
         try:
             catalog = gettext_module.translation(domain, path, ['en'])
             t.update(catalog._catalog)
         except IOError:
             # 'en' catalog was missing. This is harmless.
             pass
 }}}

 This part of the code tries to load English language files, which do not
 exist. It will raise the IOError and it will be passed on.

 {{{
     # next load the settings.LANGUAGE_CODE translations if it isn't
 english
     if default_locale != 'en':
         for path in paths:
             try:
                 catalog = gettext_module.translation(domain, path,
 [default_locale])
             except IOError:
                 catalog = None
             if catalog is not None:
                 #t.update(catalog._catalog)
                 t = catalog._catalog
 }}}

 Now, because my settings.LANGUAGE_CODE and hence default_locale is set to
 'fi', django will fetch and use the Finnish translation. At this point the
 Javascript catalog will hold Finnish translations.

 {{{
     # last load the currently selected language, if it isn't identical to
 the default.
     if locale != default_locale:
         for path in paths:
             try:
                 catalog = gettext_module.translation(domain, path,
 [locale])
             except IOError:
                 catalog = None
             if catalog is not None:
                 t.update(catalog._catalog)
 }}}

 This is where the code fails for me, as I still don't have any English
 translation files -- the code will fail to overwrite the Finnish
 translation files it fetched earlier.

 There is a simple workaround for this bug if you can't wait for it to be
 fixed: create a translation file in djangojs domain for English language
 and fill in the blanks with the original strings. It's tiresome and feels
 unnecessary but it works.

 As a side note, angelolaub's patch doesn't fix the issue for me. The
 earlier patches do (they remove the second part of the function), but they
 cause breakage in situations where users want the fallback language to be
 other than English.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/3594#comment:15>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to