Django, интернационализация. Разные переводы для одинаковых слов

Нужны разные переводы для одинаковых фраз.

Например, пункт меню Главная->Main, а далее в тексте Главная->Index.

Для переводов используйте функции из django.utils.translation

В случае, когда одно слово должно переводиться по разному в зависимости от контекст, используют pgettext, pgettext_lazy , где первым аргументом выступает слово, обозначающее смысл перевода, уточнение, а вторым - переводимое слово или фраза

pgettext_lazy('house', 'Home'); # Дом
pgettext_lazy('page', 'Home'); # Главная

В результате, в файлах переводов после генерации будет доп строка, указыывающая на контекст

msgctxt "house"
msgid "Home"
msgstr "Дом"

msgctxt "page"
msgid "Home"
msgstr "Главная"

Для перевода в django шаблонах, есть шаблонные теги.

Подключаются через {% load i18n %}

Используются почти так же - указывается контекст, если слово может быть переведено на разные варианты.

{% load i18n %}
{% translate "Home" context "page" %}
{% translate "Home" context "house %}

{% blocktranslate context "house" %}Home{% endblocktranslate %}
{% blocktranslate context "page" %}Home{% endblocktranslate %}

Источник:

Вернуться на верх