Я работаю над проектом с использованием Python (3.7) и Django (2.2), в котором я должен сделать сайт доступным на 2 языках (английском и китайском). Я много искал и пробовал все возможные решения, но безуспешно. Вот что я попробовал:
- Установить
gettext
в моей системе и связать его Добавить следующий параметр в settings.py
:
Добавитьпромежуточное программное обеспечение 'django.middleware.locale.LocaleMiddleware',
после Session
и до Common
, затем добавьте USE_I18N = True
& USE_L10N = True
, после этого упомяните языки как:
LANGUAGES = (
('en', _('English')),
('zh-hans', _('简体中文')),
)
, затем добавьте путь к локали как:
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
Затем выполните команду как: django-admin makemessages -all
она создаст каталог как:
└── zh_hans
└── LC_MESSAGES
└── django.po
После этого я добавлю переводы в django.po
и запустил команду как django-admin compilemessage
, которая генерирует файл django.mo
Я добавил URL для i18n
как:
re_path(r'^i18n/', include('django.conf.urls.i18))
и ниже - мой шаблон, который загружается на render
из вида:
{% load i18n %}
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}"/>
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% for lang in LANGUAGES %}
<option value="{{ lang.0 }}" {% if lang.0 == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ lang.1 }} ({{ lang.0 }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go"/>
</form>
<h1>{% trans 'Test 2' %}</h1>
{% get_current_language as LANGUAGE_CODE %}
<h3>{{ LANGUAGE_CODE }} </h3>
<h4>{% trans "Welcome to our page" %}</h4>
Когда я меняю язык, выбирая из выпадающего списка,LANGUAGE_CODE
печатается правильно, но текст ниже Welcome to our page
не переводится.
Что я сделал не так?