Понимание локализации Django в шаблонах - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь использовать два языка на моем веб-сайте, мой родной и английский. Я следовал документации Django, откуда я скопировал код. У меня есть папки и файлы локали.

Когда я открываю сайт, он уже устанавливает язык по умолчанию на словенский, который должен быть английским, и я не знаю почему. main.html выглядит так, когда я открываю сайт:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html"
  xmlns:height="http://www.w3.org/1999/xhtml"
  lang="sl" >

Если я правильно понимаю, lang="sl" должно быть lang="en", и я не знаю, почему это по умолчанию словенский. Даже когда я использую форму, она показывает мне оба варианта (английский и словенский), но когда я выбираю английский и нажимаю кнопку «Перейти», он просто обновляет страницу, но не меняет язык. Текущий язык (словенский) все еще остается выбранным, поэтому я предполагаю, что где-то правильный язык не будет выбран.

Меня также смущает, почему при запуске сервера по умолчанию не используется английский. Кто-нибудь может дать некоторое представление или указать мне правильное направление?

settings.py

LANGUAGE_CODE = 'en-gb'
TIME_ZONE = 'Europe/Ljubljana'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = [
    os.path.join(BASE_DIR, "locale"),
]

ugettext = lambda s: s
LANGUAGES = (
    ('en', ugettext('English')),
    ('sl', ugettext('Slovenian')),
)

main.html

{% load i18n staticfiles bootstrap3 %}
{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
<html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html"
      xmlns:height="http://www.w3.org/1999/xhtml"
      lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
...
<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>

Проект / urls.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^accounts/', include('allauth.urls')),
    url(r'^i18n/', include('django.conf.urls.i18n')),
    url(r'^l10n/', JavaScriptCatalog, js_info_dict),
    url(r'^$', index, name="index"),
]

Сайт / urls.py

from django.conf.urls import include, url
from django.views.i18n import JavaScriptCatalog
from . import views

urlpatterns = [
    url(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    ...
]

1 Ответ

0 голосов
/ 04 июля 2019

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

Когда я изменил язык на браузер по умолчанию, локализация работала правильно. Не уверен, как Django проверяет настройки локализации, но я просто предположил, что сначала он смотрит на cookie, а затем на базу данных. Думаю, я был не прав.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...