当前位置: 首页 > 面试题库 >

设置Django翻译的正确方法是什么?

籍英叡
2023-03-14
问题内容

我在Django 1.6上无法正常使用翻译存在问题。我已将此添加到我的settings.py中:

LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
    ('en', ugettext('English')),
    ('de', ugettext('German')),
)

还添加了中间件:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

以及每当我使用应为l10nd的字符串时的* .py文件:

from django.utils.translation import ugettext_lazy as _

我的模板开始于:

{% extends "base.html" %}
{% load i18n %}

在模板内部,我使用了trans占位符。例如

<h1>{% trans "Register a tank" %}</h1>

我在locale / de / LC_MESSAGES / django.po中提供了翻译:

msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"

问题答案:

添加LOCALE_PATHSsettings.py并将其设置如下:

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

请注意,它LOCALE_PATHS必须是一个元组(请查看路径末尾的逗号)。

现在基于LOCALE_PATHS,该locale文件夹应该位于项目的根目录中。

而且可以肯定的是你运行的命令django-admin.py makemessages -l de,并django-admin.py compilemessages从项目的根。

djPrj
  |
  +---> djPrj
  |
  +---> djApp
  |
  +---> locale
  |
  +---> templates

还重新安排你的MIDDLEWARE_CLASSES是LocaleMiddleware后SessionMiddleware和之前CommonMiddleware提到这里:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

重新启动服务(python manage.py runserver),然后再次检查。

只是为了确保将本地化应用到具有Django默认django.mo文件的Django 管理页面,请执行以下测试:

首先将主要urls.py项目替换patterns为i18n_patterns:

from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns('',
    url(r'^admin/', include(admin.site.urls)),
    # ...
)

现在转到带有de前缀的管理页面,例如:http://127.0.0.1:8000/de/admin/ 并且该管理页面应以德语显示。

好的,你能够以德语查看Django的管理页面吗?

还要检查你的de前缀视图。

根据你的项目代码,有些句子不是成trans块的。将它们作为:

{% trans "your sentence" %}

另外,你还必须在视图和模型的代码中使用ugettext_lazy而不是(请ugettext在此处和此处阅读)。

替换为:

from django.utils.translation import ugettext as _ 

与:

from django.utils.translation import ugettext_lazy as _

现在一切正常。



 类似资料:
  • 我有一个ASPX页面,如下所示: 以及如下所示的web.config: 当我运行我的VS2010 WebApp时,我会得到如下错误: “CodeDom提供程序类型”microsoft.fsharp.compiler.CodeDom.fsharpaspnetCodeProvider, fsharp.compiler.CodeDom,version=2.0.0.0, Culture=neutrine,

  • 问题内容: 我的代码如下: 如果在获取之前设置标题,可以吗?我的标头会被发送,还是服务器会看到默认的用户代理(如果有)? 问题答案: 必须 先设置标头,然后才能产生任何影响- 如果连接已经打开,则将引发。 就头而言,如果已设置,则应将其发送。 请参阅URLConnection JavaDoc。

  • 我正在尝试构建一个私有模块,我知道它只会被另一个TypeScript项目使用。 据此,(https://github.com/Microsoft/TypeScript/issues/5225)我应该能够简单地导入我的其他项目,而不需要构建类型定义。 问题是,当我试图导入该库时,我缺少该库上任何依赖项的类型定义。 情况如下: 假设你有两个项目<代码>库和导入,这是一个纯类型脚本节点模块。 只是从导入

  • 正如我对SpringBoot中REST API的设计所知,我们将为用户设计API 对于get/update/delete=/v1/users/{userId}/addressId/{addressId}(从具有给定用户ID的用户的地址中获取/update/delete地址) 因此,我创建了类似的API,但是对于Add/Get/Update/Delete,我可以通过RestController->S

  • 问题内容: 我正在尝试将log4j配置为使用,但我不断收到中继访问被拒绝的错误。在笔记本电脑上直接从共享托管环境执行代码时,出现此错误。 这是相关的配置: 如果改用,则会收到身份验证错误。我的主机位于DreamHost上,因此如果有人使用DreamHost电子邮件帐户设置了log4j,则可获赠积分。 问题答案: 原来我只是把属性都弄错了。应该:

  • 问题内容: 这个问题应该比关于更多。 我有一个子类(在python 2.7中,numpy 1.6.2),并且我发现在对象时未列出的字段名称(因此,ipython的自动完成功能无效)。 为了修复它,我尝试在子类中重写,如下所示: 结果是:。(我发现这里实际上应该在python 3.3中工作…) 作为一种解决方法,我尝试了: 据我所知,这是可行的,但当然并不优雅。 问题: 后一种解决方案对我而言是否正