Többnyelvűsítési (i18n) fejlemények Django 1.3-ban
Az áprilisi budapesti Python meetupon Farkas Szilveszter demonstrálta a Django 1.3-as verziójának újdonságait. A nagyobb volumenű újításokon túl (osztály alapú generikus nézetek, naplózás integráció, gyorstárazás fejlesztések) néhány kis, ám igen hasznos folt is bedolgozásra került.
Ezek közül emelném ki, hogy immáron a fordítói kifejezések kontektusba (message context) helyezhetők; ezzel megoldható az a probléma, amikor az alap nyelvű kifejezés többszöri előfordulását a célnyelven más-más fordításokkal jelölnénk. Angol-magyar relációban tipikusan ilyen helyzetek lehetnek az angolul főnévként és igeként is helytálló kifejezések, amelyeket magyarul eltérően fordítunk.
# A pgettext() függvénynek megadható kontextus.
from django.utils.translation import pgettext
pgettext('Log in', 'button')
pgettext('Log in', 'heading')
# A fordítások kigyűjtését követően kontextusonként
# egy bejegyzés kerül a katalógusba
msgctxt "button"
msgid "Log in"
msgstr "Bejelentkezés"
msgctxt "heading"
msgid "Log in"
msgstr "Jelentkezzen be"
(Némileg sánta a példám, gomennasai.)
A dolog szépség hiába egyelőre, hogy míg kódból megadható fordítói környezet, addig a Django sablonnyelvét még nem készítették erre fel. A dokumentáció nem említi, és sem a trans-t, sem a blocktrans sablontaget nem sikerült rávennem erre a működésre.
További problémát okozhat, ha az idők szavára hallgatva a buta makemessage-t már régen lecseréltük a Babelre. Noha a Babel kezeli a kontextusokat, egyelőre nem képes a sablon fordítási katalógus (POT) előállításakor azokat kiolvasni a projektünk forráskódjából. Hasonlóképpen Babellel akadályoztatott az 1.3-mal érkező fordítói megjegyzések (tanslator comments) bevezetése is. Míg a Babel kigyűjtő (extractor) mechanizmusa jóideje értelmezi a fordításokat megelőző # NOTE: stringgel felvezetett megjegyzéseket, addig a Djangoba újonnan bekerült módi szerint a makemessages a # Translators: kezdetű sorokat keresi, és per pillanat nem találtam még eszközt arra, hogy a Babelt erre az eltérő helyörzőre megtanítsuk.
Posted
by
Я не знаю, что это...