Django i18n 不起作用

2024-01-10

我正在尝试为我的项目激活不同的语言。现在有英语和西班牙语。

我将描述我遵循的所有步骤:

首先,我将自己置于要翻译的目录中。或者更好地说,所有 {% trans %} 标签都是:

$ cd media/templates/landing/
$ mkdir locale
$ django-admin.py makemessages --locale=en

最后一个命令创建目录/文件 /locale/en/LC_MESSAGES/django.po

我打开 django.po 并继续用英语填写所有 msgstr 字段。 msgid 标签是西班牙语。我尊重有关长消息情况的提示。填写此文件后,我制作:

$ django-admin.py compilemessages

此过程 django.po 并创建 django.mo。

所以我修改settings.py。重要线路:

TEMPLATE_CONTEXT_PROCESSORS = (
    'ism.context_processor.user_vars',
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.request',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'pipeline.middleware.MinifyHTMLMiddleware',
}

TIME_ZONE = 'Atlantic/Canary'

LANGUAGE_CODE = 'es'

USE_I18N = True

_ = lambda s: s

LANGUAGES = (
    ('es', _('Espanol')),
    ('en', _('English')),
)

USE_L10N = True

USE_TZ = True

最后,我将这一行添加到 URLS.py 中:

(r'^i18n/', include('django.conf.urls.i18n')),

我重新启动开发服务器,将 Firefox 浏览器配置为首先选择英语作为主要语言,但它不起作用。所有文本仍以西班牙语而不是英语显示。

我确保 Firefox 是用英语配置的,因为在 Django 视图函数(渲染 .html)中,我使用 request.LANGUAGE_CODE 进行打印,它打印“en”。

我做错了什么?


首先,我将自己置于要翻译的目录中。或者 更好地说,所有 {% trans %} 标签都是:

$ cd media/templates/landing/ $ mkdir locale $ django-admin.py makemessages --locale=en

这不是您应该进行翻译的方式。

您为要翻译的语言创建消息文件to不是您要翻译的那个from,这是基础语言。在本例中,即为英语。

该命令还需要从您的项目目录运行;不是模板目录。

所以,你的命令应该是:

$ django-admin.py makemessages --locale=es

您应该从您的根目录运行它project不是模板目录。您也不创建locale目录,该命令将为您创建该目录。

接下来,您添加翻译在西班牙语中到文件。该文件将有英文标签。这告诉 django 加载英语版本的西班牙语版本。

完成后,您可以编译消息文件(再次从根目录)

$ django-admin.py compilemessages

现在翻译已准备好供您申请。你需要告诉 django 你想要哪种语言。由于您使用内置视图来切换语言,因此您需要使用所需的语言调用该视图。

文档中提供了一个您可以使用的模板:

<form action="/i18n/setlang/" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

从此表单中选择语言,以便 django 知道要加载哪些翻译。

你还应该阅读Django 如何发现语言偏好 https://docs.djangoproject.com/en/1.4/topics/i18n/translation/#how-django-discovers-language-preference供您查看和模板。

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

Django i18n 不起作用 的相关文章

随机推荐

  • 有没有专门的方法来获取 python `Enum` 中的项目数量?

    说我有这样一条蟒蛇Enum class from enum import Enum class Mood Enum red 0 green 1 blue 2 有没有一种自然的方法来获取项目总数Mood 就像不必迭代它 或者添加额外的n项目
  • 您不能多次定义关联名称“链接”

    您好 提前谢谢您 我在 Magento 2 3 的产品页面中出现错误 您不能多次定义关联名称 链接 trace 0 您定义的关联名称 链接 不能超过 一次 1 0 home buybionette public html vendor ma
  • 如何制作浮动控件

    我想创建一个控件 该控件 可能 浮动在其包含表单的边界之外 这可能吗 我可以怎样做呢 这与上下文菜单的功能非常相似 只是我需要能够向其中添加其他控件 例如按钮和图像 您想要一个 FormBorderStyle 设置为 None 的表单 如果
  • 如何在 Android Studio IDE 中自定义硬换行垂直线以进行代码格式化

    当我应用 格式化代码 时 即使我的屏幕有足够的空间将其显示在一行上 我的代码行也会自动向下行 多行 我发现这取决于垂直线 图像中的红色 我怎样才能删除这条线或加宽它 我的语言是 Dart 您可以禁用该线路文件 gt 设置 gt 编辑器 gt
  • 我必须以编程方式从 Android 应用程序的 manifest.xml 中检索权限组

    我想以分组方式列出设备上安装的每个应用程序所获取的权限 请看看这个 我希望这对你有帮助 private static final int REQUEST PERMISSIONS 10 Override protected void onCr
  • 从 PHP 查询时,视图内的 Postgresql regexp_matches 始终返回 null

    我有与此类似的观点 CREATE OR REPLACE VIEW regexp test AS SELECT regexp matches decode NTB4 base64 text d x 当我从 pgAdmin 查询视图时 按预期返
  • 代码中的注释有标准格式吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道人们在代码中是否有标准的注释格式 不是方法或类的 xml 注释 而是注释within一个方法 也可以看看 是否有注释 C 代码的标准 如
  • 从代码隐藏访问 div 标签

    我正在使用 asp net 和 c 我有一个div在我的应用程序中标记class something 我需要访问这个某物代码隐藏中的类 我该怎么做 Code div class something somecode div Note 我想要
  • JavaScript:forEach 循环中的奇怪行为

    我的代码如下所示 someArray forEach x gt do something console log calling api for x callAnHttpApiAsync sleep 10 http api 调用是异步的 但
  • 无法在 Spring4D 中使用带有比较器的默认参数值

    我不确定这是否是一些通用问题 还是因为 Spring4D 实现 但我不能使用默认参数值来创建比较器 type TMyClass class class function MyComparer AParam Boolean False ICo
  • 在 Laravel Eloquent 模型中创建动态命名的变体

    我有一个日期字段列表 所有这些字段的变异器都有相同的逻辑 我想将此功能提取到一个特征中 以便将来我需要的只是在模型中创建一个日期字段数组并使用该特征 像这样的事情 foreach dates as date dateCamelCase th
  • 从 Maven 运行 Gradle

    我正在寻找一些 Maven 的 Gradle 执行器插件 类似于 Maven ant run 插件 谷歌没有提供帮助 难道这样的插件不存在吗 我应该尝试这个 https github com if6was9 gradle maven plu
  • 实现docker容器按需启动

    情况 大量重型 docker 容器会在一段时间内定期受到攻击 然后在较长时间内保持未使用状态 希望 按需启动容器 就像 systemd 通过套接字激活启动容器一样 并在空闲一段时间后停止它们 不visible最终用户的停机时间 Option
  • 忘记是行不通的

    如果我尝试从此集合中删除某个项目 examples Example where example data example gt get 通过做 examples gt forget 20 它不会从集合中删除该项目 我仍然取回原来存在的所有项
  • 如何将自定义 Java 类转换为 Spark 数据集

    我无法找到将测试对象列表转换为 Spark 中的数据集的方法 这是我的课 public class Test public String a public String b public Test String a String b thi
  • Brave/Chrome 浏览器中图像周围出现不需要的边框半径角

    我尝试在容器内显示一个简单的图像border radius 5px 但角落处似乎有一个细边框的轮廓 您需要仔细查看下图 如何避免这些角边框 cover margin 1em padding 1em image wrapper height
  • 如何从 Android 删除 Firestore 集合

    Issue 我正在寻找一个临时解决方案来从客户端删除集合以进行概念证明 我最终将按照建议将其重构到服务器上 我添加了删除所有特定 Firestore 用户帐户信息的功能 包括他们在应用程序中保存的内容集合 根据Firestore 文档 ht
  • 标识符 int 不是 struct SOCKET_LOG_DATA 的直接成员

    当我编译以下结构时 typedef PACKED struct PACKED SUFFIX SOCKET LOG DATA typedef PACKED union PACKED SUFFIX PACKED struct PACKED SU
  • Swift 中的条件删除集合的最后一个元素

    我正在尝试删除 从字符串数组的后面直到最后一项包含一些文本 但我的实现没有实现 到目前为止我的实现 var array A B C D while true if array last array last array removeLast
  • Django i18n 不起作用

    我正在尝试为我的项目激活不同的语言 现在有英语和西班牙语 我将描述我遵循的所有步骤 首先 我将自己置于要翻译的目录中 或者更好地说 所有 trans 标签都是 cd media templates landing mkdir locale