如何在Django 4.2.1中实现URL路径的多语言翻译?
Django URL路径国际化实现方法
要把URL中的静态路径段(my_app1、hello、world)翻译成对应法语表述(mon_app1、bonjour、monde),需通过Django的URL翻译功能实现,具体步骤如下:
1. 确认URL翻译基础配置
在core/settings.py中补充或确认以下配置:
# 启用本地化支持(URL翻译依赖此配置) USE_L10N = True # 指定翻译文件存放目录(若未自定义则保持默认即可) LOCALE_PATHS = [ BASE_DIR / 'locale', ]
2. 标记URL中需翻译的路径段
修改路由配置文件,用gettext_lazy()包装所有需要翻译的静态路径部分:
项目根urls.py
from django.conf.urls.i18n import i18n_patterns from django.urls import path, include from django.utils.translation import gettext_lazy as _ urlpatterns = i18n_patterns( path(_('my_app1/'), include('my_app1.urls')), # 其他路由规则... )
应用my_app1的urls.py
from django.urls import path from django.utils.translation import gettext_lazy as _ from . import views urlpatterns = [ path(_('hello/') + _('world/'), views.hello_world, name='hello-world'), # 也可拆分层级写法: # path(_('hello/'), include([ # path(_('world/'), views.hello_world, name='hello-world'), # ])), ]
3. 提取URL中的翻译字符串
运行命令将标记的URL字符串提取到法语翻译文件中:
python manage.py makemessages -l fr
4. 完成URL字符串的法语翻译
打开locale/fr/LC_MESSAGES/django.po文件,找到对应msgid并补充msgstr:
msgid "my_app1" msgstr "mon_app1" msgid "hello" msgstr "bonjour" msgid "world" msgstr "monde"
5. 编译翻译文件
编译更新后的.po文件,生成Django可识别的二进制翻译文件:
python manage.py compilemessages
6. 验证效果
重启Django开发服务器,此时访问http://localhost:8000/fr/mon_app1/bonjour/monde/即可正常映射到原视图,同时原英文路径http://localhost:8000/en/my_app1/hello/world/也能正常访问(若项目启用了英文语言选项)。
注意事项
- 必须使用
gettext_lazy而非普通gettext,因为URL配置在项目启动时加载,懒加载翻译字符串能确保请求时根据当前语言获取正确翻译结果。 - URL中的动态参数(如
<int:pk>)无需翻译,仅处理静态路径段即可。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

