Django语言切换器如何获取带区域的完整语言代码?
解决Django语言切换器中
get_language_info_list返回短语言码的问题 我之前也碰到过一模一样的问题!Django的get_language_info_list确实会悄悄把你配置的带区域的完整语言码(比如en-us、fr-ca)简化成短格式(en、fr),这是因为它内部依赖的get_language_info函数会自动将语言码标准化为ISO 639-1的短版本,默认忽略区域部分。
不过好在有个简单的解决办法,我们可以直接遍历你在settings.py里定义的LANGUAGES元组,而不是依赖get_language_info_list来获取语言码——这样就能保留你配置的完整带区域的代码,同时依然能获取到正确的语言名称。
修改后的模板代码如下:
{% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} {% for lang_code, lang_name in LANGUAGES %} {% get_language_info for lang_code as lang_info %} <a href="/{{ lang_code }}{{ request.get_full_path|slice:'6:' }}" class="{% if lang_code == LANGUAGE_CODE %}selected{% endif %}" lang="{{ lang_code }}"> {{ lang_info.name }} </a> {% endfor %}
代码说明:
- 直接遍历
LANGUAGES里的键值对,lang_code就是你配置的en-us/fr-ca,完美保留完整码; - 用
{% get_language_info for lang_code as lang_info %}来获取该语言的详细信息(比如名称),替代原来的get_language_info_list; - 依然和之前一样对比
lang_code和LANGUAGE_CODE来标记当前选中的语言。
另外要确保你settings.py里的USE_I18N = True(这个你应该已经开启了,毕竟LANGUAGE_CODE能正常返回完整码),其他i18n相关配置也保持不变就好。
内容的提问来源于stack exchange,提问作者ju5t
相关产品推荐
相关产品推荐

