You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:04:44