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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:14