makemessages helyett Babel

A Django temérdek ún. management command-dal (django-admin.py help) érkezik alapkiszerelésben. Ezek között található a makemessages és compilemessages parancspáros gettext alapú fordítási katalógusok előálltására és binárissá alakítására. Mindkét parancs az xgettext és msgfmt eszközökre támaszkodva kínál nagyon kényelmes felületet az alkalmazás többnyelvűsítésének támogatására.

A makemessages előnye, hogy felismeri a Django valamennyi fordító függvényét (ugettext_lazy(), ugettext_noop() stb.) és sablon direktíváját ({% trans %}, {% blocktrans %}), hátránya korlátoltsága:

  • csak az aktív (tipikusan a projekt) könyvtárban gyűjti ki a fordítandó stringeket (szimbolikus linkekkel lehet trükközni),
  • nem hoz létre sablon katalógust (POT),
  • az elavult fordítási kifejezéseket nem törli a katalógusból,
  • csak a Django saját sablonmotorjával működik együtt.

A makemessages helyett könnyen a Djangohoz kapcsolható a Babel. A Babel Python alapú alkalamazások többnyelvűsítésére szakosodott eszközkészlet, valamennyi fenti korlátra megoldást nyújt. Djangohoz projekthez a BabelDjango alkalmazással köthetjük be (pip install BabelDjango). A BabelDjango tartalmazza a Djangora jellemző részleteket. Babel használatakor a megszokott rendben állítható elő és fordítható le a fordítási katalógus. A fordítandó stringek kigyűjtésének menetét konfigurációs állományban (babel.cfg) rögzíthetjük. Mindezen lépésekről részletesen a BabelDjango oldalán olvashatsz.

(Babelre áttérés esetén arra érdemes ügyelni, hogy a djangós kódokban gyakorta előforduló ugettext_lazy() és ugettext_noop() függvényeket (a BabelDjango kötés ellenére) nem ismeri fel az eszköz, így a Babellel frissített PO fájlból a fordítási kifejezések egy része eltűnthet. A Babel az alábbi függvények mentén gyűjti ki a stringeket: gettext(), ngettext(), ugettext(), ungettext(), dgettext(), dngettext(). Feldolgozza továbbá a _ és N_ aliasokkal bevezetett szövegeket is, így a ugettext_lazy() és ugettext_noop() függvényeket mappeljük ezekre. Ezen felül a Babel lehetőséget ad arra, hogy egyénileg definiáljuk az értelmezési tartományát.)

27dec.

Szólj hozzá