Как мне включить регион в language.code? - PullRequest
0 голосов
/ 19 января 2019

Я создаю переключатель языка для Django.Есть множество примеров, но ни один из них, похоже, не решает проблему, с которой я столкнулся.Я всегда получаю короткую версию языкового кода.Вместо en-us я получаю en.

{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}

  <a href="/{{ language.code }}{{ request.get_full_path|slice:'6:' }}"
     class="{% if language.code == LANGUAGE_CODE %}selected{% endif %}"
     lang="{{ language.code }}">
      {{ language.name }}
  </a>
{% endfor %}

Мои ЯЗЫКИ в settings.py определены как:

LANGUAGES = (
    ('en-us', _('English')),
    ('fr-ca', _('French (Canada)')),
)

Я предполагал, что {{ language.code }} даст мне либо en-us или fr-ca.Вместо этого я получаю en и fr.Просто чтобы убедиться, что я проверил, работает ли LANGUAGE_CODE и возвращает ли он en-us, как ожидалось.Это просто get_language_info_list, что, похоже, не работает для меня.

Я чувствую, что здесь упускаю что-то очень простое.

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Решение оказалось простым. Несмотря на то, что я прочитал документацию несколько раз, читать ее утром после ответа Назктера, наверное, было то, что мне было нужно, спасибо!

Оказывается, что:

{% get_language_info_list for LANGUAGES as languages %}

Не требуется. Более простая версия:

{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% for CODE, NAME in LANGUAGES %}

  <a href="/{{ CODE }}{{ request.get_full_path|slice:'6:' }}"
     class="mx-3 {% if CODE == LANGUAGE_CODE %}selected{% endif %}"
     lang="{{ CODE }}">{{ NAME }}</a>
{% endfor %}

Обратите внимание, что это работает только для полных языковых кодов, например, en-us как мы используем slice:'6'.

0 голосов
/ 19 января 2019

Данные, которые вы ищете, находятся в переменной LANGUAGE_CODE. Вы уже получаете это:

{% get_current_language as LANGUAGE_CODE %}

возвращает значение в формате lang-region, что-то вроде: en-us.

это документация на случай, если вы ищете другие переменные, подобные этой: https://docs.djangoproject.com/en/2.1/topics/i18n/translation/#get-current-language

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