System internacjonalizacji (I18N) Pytigon opiera się na sprawdzonym frameworku tłumaczeń Django, dodając automatyczne wykrywanie tłumaczeń, lokalizację pozycji menu oraz obsługę tłumaczeń po stronie JavaScript.
Pytigon integruje się z opartym na gettext systemem tłumaczeń Django:
_() lub pgettext(){% translate %} lub _("tekst").po poleceniem make_i18n.po przy użyciu dowolnego edytora PO.mo — Django wczytuje je w czasie działaniafrom django.utils.translation import gettext as _
class Album(models.Model):
name = models.CharField(_("Name"), max_length=128)
artist = models.CharField(_("Artist"), max_length=128)
class Meta:
verbose_name = _("Album")
verbose_name_plural = _("Albums")
W szablonach .ihtml:
[translate "Welcome to Pytigon"]
[blocktranslate with name=user.username]
Hello, {{ name }}!
Pytigon automatycznie przeszukuje ciągi do przetłumaczenia w:
python manage.py make_i18n
To polecenie:
1. Przeszukuje wszystkie pliki Python pod kątem wywołań _()
2. Przeszukuje wszystkie szablony .ihtml pod kątem tagów {% translate %}
3. Generuje pliki .po w locale/[lang]/LC_MESSAGES/
4. Aktualizuje istniejące pliki .po o nowe ciągi (zachowując istniejące tłumaczenia)
Pytigon zapewnia obsługę tłumaczeń po stronie klienta przez bibliotekę frontendową:
// JavaScript
ptig.i18n.gettext("Save");
ptig.i18n.pgettext("Button label", "Save");
Katalog tłumaczeń JavaScript jest serwowany automatycznie i buforowany w przeglądarce.
Pozycje menu zdefiniowane w narzędziach developerskich są lokalizowane automatycznie. Pole „Name” jest konwertowane na klucz tłumaczenia poprzez zamianę na małe litery i zastąpienie spacji podkreślnikami. Pliki tłumaczeń zawierają wpisy takie jak:
msgid "user_management"
msgstr "Benutzerverwaltung"
Pytigon wykrywa język użytkownika z:
/en/, /de/, /pl/)Accept-Language przeglądarki użytkownikasettings_app.pySkonfiguruj dostępne języki w ustawieniach:
LANGUAGES = [
('en', 'English'),
('pl', 'Polski'),
('de', 'Deutsch'),
]