如何为Django Admin创建i18n语言切换器?
为Django Admin添加语言切换器的实现方法
步骤1:复制并自定义Admin基础模板
Django Admin的页面结构由内置模板控制,你需要复制核心模板到项目目录进行修改:
- 找到Django Admin模板的安装路径,执行命令:
python -c "import django; print(django.__path__[0] + '/contrib/admin/templates/admin/')" - 将该路径下的
base.html文件复制到你项目的templates/admin/目录中(如果admin子目录不存在,自行创建)。
步骤2:在Admin模板中添加语言切换表单
打开复制后的templates/admin/base.html,找到{% block usertools %}区块(这是Admin顶部用户工具区域,适合放置语言切换器),在区块内添加以下代码:
{% load i18n %} <form action="{% url 'set_language' %}" method="post" style="display: inline; margin-left: 15px;"> {% csrf_token %} <input name="next" type="hidden" value="{{ request.path }}"> <select name="language" onchange="this.form.submit()" style="padding: 3px; border-radius: 4px;"> {% get_current_language as LANGUAGE_CODE %} {% get_available_languages as LANGUAGES %} {% get_language_info_list for LANGUAGES as languages %} {% for language in languages %} <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}> {{ language.name_local }} ({{ language.code }}) </option> {% endfor %} </select> </form>
这段代码会生成一个下拉选择框,选择语言后自动提交表单,跳转回当前Admin页面的对应语言版本。
步骤3:确认多语言配置(确保已有)
检查你的core/settings.py中是否包含以下配置(你之前的前端切换应该已经配置过,这里再次确认):
USE_I18N = True # 定义支持的语言 LANGUAGES = [ ('en', 'English'), ('fr', 'Français'), ] # 翻译文件存放路径 LOCALE_PATHS = [ BASE_DIR / 'locale', ]
效果验证
启动Django服务,访问Admin页面,你会在顶部用户区域(用户名旁边)看到语言切换下拉框,选择对应语言后,Admin界面会自动切换为目标语言,且所有Admin内置文本(如按钮、菜单、提示)都会被翻译(前提是你已经生成了对应的语言翻译文件)。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

