如何在 Django 中翻译 url?

2024-01-26

这是我的django-project下面将其从英语翻译成法语。 *我用姜戈4.2.1:

django-project
 |-core
 |  |-settings.py
 |  └-urls.py
 |-my_app1
 |  |-views.py
 |  └-urls.py
 |-my_app2
 └-locale
    └-fr
       └-LC_MESSAGES
          |-django.po
          └-django.mo

而且,这是core/settings.py below:

# "core/settings.py"

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True

from django.utils.translation import gettext_lazy as _

LANGUAGES = (
    ('en', _('English')),
    ('fr', _('French'))
)

And, 获取文本() https://docs.djangoproject.com/en/4.2/ref/utils/#django.utils.translation.gettext用于翻译Test to Examen in my_app1/views.py如下所示:

# "my_app1/views.py"

from django.shortcuts import render
from django.utils.translation import gettext as _

def test(request):     # ↓ Here ↓
    return HttpResponse(_("Test"))

And, hello/world/路径为test()被设定为urlpatterns in my_app1/urls.py如下所示:

# "my_app1/urls.py"

from django.urls import path
from . import views

app_name = "my_app1"

urlpatterns = [
        # ↓ ↓ Here ↓ ↓
    path("hello/world/", views.test, name="test")
]

And, my_app1/路径为my_app1被设定为urlpatterns with i18n_patterns() https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#language-prefix-in-url-patterns如下所示:

# "core/urls.py"

from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns(
        # ↓ Here ↓
    path("my_app1/", include('my_app1.urls'))
)

And, "Anglais", "Français" and "Examen"设置为"English", "French" and "Test"分别在locale/fr/LC_MESSAGES/django.po如下所示:

# "locale/fr/LC_MESSAGES/django.po"

...

#: .\core\settings.py:140
msgid "English"
msgstr "Anglais" # Here

#: .\core\settings.py:141
msgid "French"
msgstr "Français" # Here

#: .\my_app1\views.py:5
msgid "Test"
msgstr "Examen" # Here

...

然后,我可以将英语翻译成法语,如下所示:

http://localhost:8000/fr/my_app1/hello/world/

现在,如何将上面的英文网址翻译为下面的法文网址?

http://localhost:8000/fr/mon_app1/bonjour/monde/

你应该使用gettext_lazy() https://docs.djangoproject.com/en/4.2/ref/utils/#django.utils.translation.gettext_lazy并替换"hello/world/" with _("hello/world/")如下所示。 *对于路径,gettext_lazy()有效但是获取文本() https://docs.djangoproject.com/en/4.2/ref/utils/#django.utils.translation.gettext不起作用,你可以看到我的答案 https://stackoverflow.com/questions/20467626/whats-the-correct-way-to-set-up-django-translation/76475418#76475418详细解释如何在Django中翻译:

# "my_app1/urls.py"

from django.urls import path
from . import views
from django.utils.translation import gettext_lazy as _ # Here

app_name = "my_app1"

urlpatterns = [
        # ↓ ↓ ↓ Here ↓ ↓ ↓
    path(_("hello/world/"), views.test, name="test")
    # path("hello/world/", views.test, name="test")
]

然后,使用gettext_lazy()并替换"my_app1/" with _("my_app1/")如下所示:

# "core/urls.py"

from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import gettext_lazy as _ # Here

urlpatterns = i18n_patterns(
        # ↓ ↓ Here ↓ ↓
    path(_("my_app1/"), include('my_app1.urls'))
    # path("my_app1/", include('my_app1.urls'))
)

然后,运行以下命令:

django-admin makemessages -l fr

然后加"mon_app1/" and "bonjour/monde/" for "my_app1/" and "hello/world/"分别如下图:

# "locale/fr/LC_MESSAGES/django.po"

...

#: .\core\settings.py:140
msgid "English"
msgstr "Anglais"

#: .\core\settings.py:141
msgid "French"
msgstr "Français"

#: .\core\urls.py:20
msgid "my_app1/"
msgstr "mon_app1/" # Here

#: .\my_app1\urls.py:8
msgid "hello/world/"
msgstr "bonjour/monde/" # Here

#: .\my_app1\views.py:5
msgid "Test"
msgstr "Examen"

...

然后,运行以下命令:

django-admin compilemessages

现在,您可以将英文网址翻译为法文网址,如下所示:

http://localhost:8000/fr/mon_app1/bonjour/monde/

另外,我不知道如何翻译Django Admin中的url,所以我问问题 https://stackoverflow.com/questions/76494207/how-to-translate-the-url-in-django-admin关于它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Django 中翻译 url? 的相关文章

随机推荐

  • Winforms 双缓冲

    我将其添加到表单的构造函数代码中 this SetStyle ControlStyles AllPaintingInWmPaint ControlStyles UserPaint ControlStyles DoubleBuffer tru
  • 将非接口称为“*er”是惯用的吗

    The 有效行动 http golang org doc effective go html interface names states 按照惯例 单方法接口由方法名称加上 er 后缀或类似修饰来构造代理名词 Reader Writer
  • 连接 PhoneGap 与 localhost Web 服务

    我在连接我的 webserwisem PhoneGap Django TastyPie 时遇到问题 我的 PhoneGap 版本 3 3 0 使用纯 html 调用 POST 或 GET 一切正常当我将项目移动到模拟器时问题就开始了 传输无
  • for 循环 vs while 循环 vs foreach 循环 PHP

    首先我是 PHP 新手 我一直在脚本中使用 for 循环 while 循环 foreach 循环 我想知道 哪一个性能更好 选择循环的标准是什么 当我们在另一个循环中循环时应该使用哪个 我一直想知道要使用哪个循环的代码 for i 0 i
  • PHP:调用未定义函数 mb_strlen() - 在启用 mbstring 的自定义编译 PHP 上

    我有这个自定义编译的 PHP v5 3 3 并启用了以下扩展 通过配置 configure prefix usr local php5 3 3 with config file path usr local apache2 conf wit
  • Facebook JS SDK 可以与 Phonegap / Cordova 一起使用吗?

    我有 Senscha 2 0 移动应用程序 我想使用最新的phonegap cordova 构建它 我想添加 Facebook 登录功能 我找到了三个选择 使用ChildBrowser方法 使用应用内浏览器 使用cordova facebo
  • 如何迭代 PostgreSQL jsonb 数组值以在查询中进行匹配

    我的表有很多行 每行都包含一个 jsonb 对象 该对象保存一个数组 其中可能有多个同名但具有不同值的键 我的目标是扫描整个表并验证哪些行在此 json 对象的数组中包含重复值 第 1 行示例数据 Name Bobb Smith Ident
  • javac -parameters 标志的缺点

    我想尝试一些在运行时需要参数名称的框架功能 因此我需要使用以下命令来编译我的应用程序 parameters它将参数的名称存储在 JVM 字节码中 除了jar war的大小之外 该参数的使用还有哪些缺点 将参数名称添加到类文件格式的内容包含在
  • 在 javascript/jquery 中将 base64 转换为图像

    我已经编写了一些使用 javascript jquery 进行图像捕获的代码 下面是代码 function capture image alert capture image var p webcam capture webcam save
  • PHP函数获取数组的前5个值[重复]

    这个问题在这里已经有答案了 Array university gt 57 iit gt 57 jee gt 44 application gt 28 study gt 26 college gt 23 exam gt 19 colleges
  • scons 知道 SConscript 文件位于哪个目录吗?

    我们正在评估 scons 作为构建系统 但我在适应我们的旧系统时遇到了问题 在我们的一些源代码子目录中 我们有一个 sources lib 文件 其中列出了需要编译以组装该目录的目标库的 C 文件的名称 但是 同一目录中还有其他 C 文件
  • 如何将 AutoMapper 与 Ninject.Web.Mvc 结合使用?

    Setup 我有一个AutoMapperConfiguration设置 AutoMapper 映射的静态类 static class AutoMapperConfiguration internal static void SetupMap
  • 将节注入 GNU ld 脚本; binutils 版本之间的脚本兼容性。

    我正在构建类似问题中的东西如何将不同 a 文件中的数据收集到一个数组中 如何使用 ld 脚本保留 a 文件中的部分 https stackoverflow com questions 6568844 how to collect data
  • 从 Fontawesome 导入所有图标

    我在我的 Angular 项目中以这种方式使用 Fontawesome 5 import fontawesome from fortawesome fontawesome import faBold faItalic faUnderline
  • 无论文本长度如何,如何在标签和输入字段之间均匀添加空格?

    假设我有 10 个输入字段 在左侧的输入字段之前有一个 span 标签 它包含文本以指示用户应在字段中输入什么内容 我做了一些事情 但我不确定如何在跨度标签和输入字段之间添加空格 无论文本有多大 像这样 2019年答案 一段时间过去了 我现
  • 如何让 Maven 插件在依赖解析之前运行

    之前有一个答案 但我不认为接受的答案是正确的 https stackoverflow com questions 6120227 how to run maven plugin before dependency check 我创建了一个
  • C# 中的重载除法

    我想在我的 C 类中重载除法运算符 所以 我写道 public string operator object obj 并得到错误 解析器错误 可重载一元运算符除外 那么 我不能重载该运算符吗 在 MSDN 上我没有看到任何示例 http m
  • 仅使用 SameSite Lax cookie 进行 SSO 的可行性?

    背景 我正在考虑实施方面SameSite今天我的饼干 我已经有了HttpOnly and Secure所以我想这可能没什么大不了的 为什么它坏了 好吧 事实证明 一旦我实现了这个设置 很多东西就坏了 两者都发生了这种情况SameSite L
  • C# Selenium:ICabling 不再包含 BrowserName 的定义

    更新到 Selenium 3 14 0 后 BrowserName 属性不再是 ICapativity API 的一部分 还有其他方法获取浏览器名称吗 我找不到更新的文档 这是预期的行为吗 这是一个针对 NET Core 2 1 的测试套件
  • 如何在 Django 中翻译 url?

    这是我的django project下面将其从英语翻译成法语 我用姜戈4 2 1 django project core settings py urls py my app1 views py urls py my app2 locale