【问题标题】:Django Translations Not WorkingDjango 翻译不工作
【发布时间】:2018-04-15 09:16:16
【问题描述】:

我正在使用 Django 1.9 / python3.5 应用程序,并尝试使用 Django 的翻译实用程序。我有一个语言环境目录,其中有一个用于西班牙语翻译的“es”目录,我在其中创建了一个 .po 文件。我将它设置为有几个翻译只是为了测试它。

msgid "Sign In"
msgstr "Registrarse"

msgid "Create an Account"
msgstr "Crea una cuenta"

我的设置文件也正确配置了

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.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'webapp.middleware.LanguageSwitchMiddleware',
)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'webapp.context_processors.detail_context',
                'django.template.context_processors.i18n'
            ],
        },
    },
]

# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/
LOCALE_PATHS = (
    os.path.join(PROJECT_ROOT, 'locale/'),
)

from django.utils.translation import ugettext_lazy as _

LANGUAGES = (
    ('en', _('English')),  # first language is the default used by modeltranslations
    ('es', _('Spanish')),
)

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/Chicago'

USE_I18N = True

在我的模板中,我使用 Django 'trans' 模板标签作为登录词,并创建一个帐户。一个选择框将编辑我已经测试过的应用程序的 Content-Language http 响应标头,并且它成功地这样做了。但是,标头注册、创建和帐户不会翻译成西班牙语。有没有我遗漏的步骤?

HTML

{% load i18n %}

<ul class="list-inline-xxs">

    {% if customer %}
        <li>
            Welcome,
            <a href='{% url "customer:dashboard" %}'>
                {{ customer.first_name }}
            </a>
        </li>
        <li>
            <a href='{% url "customer:logout" %}'>
                {% trans 'Logout' %}
            </a>
        </li>
    {% else %}
        <li>
            <a href='{% url "customer:login" %}'>
                {% trans 'Sign In' %}
            </a>
        </li>
        <li>
            <a href='{% url "subscription:customer-subscribe" %}'>
                {% trans 'Create an Account' %}
            </a>
        </li>
    {% endif %}

</ul>

【问题讨论】:

  • 一切正常。你在 webapp.middleware.LanguageSwitchMiddleware' 中有什么?

标签: html django translation po


【解决方案1】:

我有一个语言环境目录,其中有一个用于西班牙语的“es”目录 我在其中创建了一个 .po 文件的翻译。

该 ^^^ 行表明您正在手动创建翻译文件。让Django create translation files为你:

django-admin makemessages -a

然后输入你的翻译,保存文件并编译

django-admin compilemessages

重启你的应用,它应该可以工作了。

我整理了一个如何使用 Django 进行翻译的简单示例:https://github.com/DusanMadar/Django-multilang-demo

编辑

正如 django django-admin makemessages -h 建议的那样,--ignore PATTERN, -i PATTERN 是您需要用来忽略第三方目录的。所以像django-admin makemessages -a -i 3rdparty_dir

【讨论】:

  • 我没有,但我只是将它添加到模板配置中,它仍然不起作用:(。我将使用我的模板和中间件配置更新问题。
  • 啊,我明白了。可能是因为我没有编译它们以获得 .mo 文件。当我运行 django admin 命令编译消息时,我收到此错误:找不到 msgfmt。确保您已安装 GNU gettext 工具 0.15 或更新版本。
  • 您需要安装gettext: brew install gettextapt install gettext 甚至根据您的系统安装不同的东西。
  • 有没有办法只在一个语言环境目录上运行编译消息?当我从应用程序的根目录运行它时,它会遍历所有包含语言环境文件的第三方目录,并为这些目录重新创建 .mo 文件。问题是这会导致“复数形式表达式可能是危险的”值错误,因为它正在重新设置某些 .po 文件中的复数形式变量。
猜你喜欢
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
  • 2022-12-19
  • 2015-06-23
  • 2020-10-19
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多