> I tried to create second .po file with manual translations, but had no luck
> either :( `compilemessages` creates the second .mo file, but doesn't use it
> in the app. Only django.mo is used, but all my translations in django.po
> file are commented out after I run `makemessages`.
>
> In the documentation:
>
> "(The caveat with using variables or computed values, as in the previous two
> examples, is that Django's translation-string-detecting utility,
> django-admin.py makemessages, won't be able to find these strings. More on
> makemessages later.)"
>
> But there is no "later" :(
>
> Thanks,
> Martin
>
I had to do some clever things to import languages names from the
CLDR. I ended up writing a small management command (sorry, can't
share the entire thing) which first of all runs makemessages for each
language. This generates/updates the django.po files for each
language.
I then step through each of the languages, load the CLDR xml file, and
manually update the generated po file, inserting/updating entries as
necessary. Having added all the extra translations, I then run
compilemessages, so they are always available.
To update the po file, I use polib - which you can get standalone, but
is also a part of the amazing django-rosetta.
The code to add/update entries using polib is pretty straightforward.
First load the po file, look for your key, if it isn't there add it.
In code:
for (lang, name) in settings.LANGUAGES:
lang_po_path = os.path.join(settings.PROJECT_ROOT, '<projname>',
'locale', lang, 'LC_MESSAGES', 'django.po')
po = polib.pofile(lang_po_path)
cldr = self.load_cldr_data(lang, ccodes)
for code in ccodes:
idx = u'Country code %s' % code
try:
trans = cldr[code]
except KeyError:
self.debug("No translation for country code %s" % code)
continue
entry = po.find(idx)
if entry:
entry.msgstr = trans
entry.obsolete = 0
else:
entry = polib.POEntry(msgid=idx, msgstr=trans)
entry.occurrences = [ ('Common Locale Data Repository', 1), ]
entry.comment = 'Country name, imported from CLDR (Do not
manually translate, translation is automatically updated!)'
entry.tcomment = entry.comment
entry.obsolete = 0
po.append(entry)
po.save()
Obviously, with your problem, you aren't adding the actual
translations, just the msg id, so don't set msgstr. In this example,
I'm adding translations for 'Country code AD' -> 'Country code ZW'
(which will now translate into 'Andorra' -> 'Zimbabwe' :)
Cheers
Tom
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment