我正在为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
似乎不适合我。
我觉得我在这里错过了一些非常简单的东西。
您要查找的数据位于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
解决方案结果很简单。即使我多次阅读文档,在Nazkter的回答可能是我需要的那天早上再次阅读,谢谢!
事实证明:
{% 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'
。