【问题标题】:django translation template {% trans "something" %}django 翻译模板 {% trans "something" %}
【发布时间】:2012-10-01 07:45:23
【问题描述】:

好的,我一直在疯狂寻找这个我认为很简单的问题。

我使用 Django 1.4

问题是 django 不会在我的模板中翻译一个简单的 {% trans "work" %}。

这就是我所做的:

Settings.py:

LANGUAGE_CODE = 'en-us'
USE_I18N = True
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',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
    "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.core.context_processors.request",
)

LOCALE_PATHS = (
    '/home/m00p/PycharmProjects/astrid/locale'
)

这是我的地图结构:

/
myproject/
apps/
locale/
template/

所以我跑了

django-admin.py makemessages -l nl -i settings.py

它确实在语言环境文件夹 nl/LC_MESSAGES/django.po 中成功创建,然后我编辑它在 django.po 中找到的翻译

#: templates/base.html:22
msgid "work"
msgstr "ddddddddddddd"

然后我运行编译命令

django-admin.py 编译消息

它还在正确的文件夹中成功创建了一个 django.mo 文件

我也在 myproject/urls.py 中添加了这个

urlpatterns = patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)

urlpatterns += i18n_patterns('',
    url(r'^$', 'front.views.home', name='home'),
)

我在 base.html 文件中添加了这个,以便能够更改语言

<form action="/i18n/setlang/" method="post">
    {% csrf_token %}
    <input name="next" type="hidden" value="/" />
    <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>

所以当我访问网站时,我在 url 中得到 127.0.0.1:8000/en/,这是正确的,因为英语是默认语言,然后当我使用表单将其更改为 NL 时,它会重定向到 127.0。 0.1:8000/nl/ 但我翻译的文本没有改变。我也确定语言是 NL,因为当我显示 {{ LANGUAGE_CODE }} 时它说 NL。

有人知道为什么它不改变吗?

谢谢m00p

问题已解决

在添加东西的过程中,我忘记了它的工作,我重新启动了我的部署服务器,但我没有清除浏览器的缓存它仍在使用旧页面,因此,当我在 Chrome 中清除浏览器数据并重新访问该页面并更改它正确翻译的语言时。无论如何感谢您的建议!

【问题讨论】:

  • 我也在使用这个多语言概念,我做了你所做的,但是在我的 django.po 文件中它不包含我可以编辑的模板文件行,例如因为您的 .po 文件包含 #: templates/base.html:22 msgid "work"....但是它包含 site-packages/django 内的所有文件(即管理部分)我不想编辑这些管理文件,但我编辑以查看天气翻译是否有效,但它也不适用于此管理部分......所以我的主要问题是如何显示我可以编辑的模板数据
  • 我已经在我的模板中指定了{% load i18n %} {% trans "Hello" %},以便 .po 文件选择它,我可以在 .po 文件中添加翻译数据............但它仍然是不会在 .po 文件中选择这些模板..... ???

标签: python django templates translation


【解决方案1】:

您键入命令的位置很重要。

就我而言,这是我的项目结构:

myproject/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    apps/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

如果我在 mysite 文件夹中调用 makemessages,如下所示:

D:\...\myproject\mysite> python ../manage.py makemessages -all

它不会得到 HTML 中的字符串{% trans "str" %}。
但如果我在 myproject 文件夹中调用 makemessages,如下所示:

D:\...\myproject> python manage.py makemessages -all

有效!它会在 HTML 中找到所有 {% trans "str" %}。
所以要小心你所在的位置。

【讨论】:

    【解决方案2】:

    在 Django 1.4 中,不再支持项目根目录中的语言环境目录。您应该将其添加到 LOCALE_PATHS 设置,默认情况下为空。 Django Settings.

    但是,语言环境生成中涉及的管理命令似乎有效,所以我不知道您是否已经这样做了。

    【讨论】:

    • 我做到了,但没有任何改变:(
    【解决方案3】:

    我也有同样的情况。部分短语是翻译,但大多数只是显示关键。我们有两种主要语言 en 和 fa。两者都有同样的问题。 我在网上查看了所有相同的问题和每一个关于 django 翻译的文档。我可以说我几乎尝试了一切。 唯一的区别是我们在生产服务器上进行测试。 而且我没有重新加载服务器! 所以这个单行命令让我摆脱了痛苦:

    sudo /etc/init.d/uwsgi reload
    

    我做错了什么是我重新启动了 wsgi 而不是 uwsgi!

    如果你喜欢做我做的事,这里是: 我在服务器上按此顺序执行步骤:

    django-admin makemessages -l en
    django-admin makemessages -l fa
    

    添加波斯语短语和一些英文文本进行测试。

    django-admin compilemessages
    python manage.py clear_cache
    python manage.py runserver
    

    服务器运行没有错误。但是 en 或 fa 没有发生任何变化。看起来 django 正在从旧缓存加载。所以,我删除了整个缓存,甚至删除了服务器上的所有文件并重新安装了整个项目。然而同样的问题。

    我在笔记本电脑上从 django 发送消息并将其发送到服务器。 此外,我尝试了不同的文本编辑器和翻译工具,例如 poedit 生成 po 和 mo 文件。然而问题仍然存在。

    我使用并替换了 trans 标签,看看它是否适用于其中的任何一个:

    {% trans ' ' %}
    {% trans " " %}
    {% blocktrans %} {% endblocktrans %}
    {% trans "xyz" az XYZ %} {{ XYZ }}
    {{ _() }}
    

    他们都没有工作!

    但是重新加载服务器会使一切井井有条。 我希望它可能对某些人有所帮助。

    【讨论】:

      【解决方案4】:

      我在处理我的新项目Sportolio 时花了几个小时试图在 Django 1.5 中解决这个问题,结果发现我在 LOCALE_PATH 末尾缺少一个 逗号

      LOCALE_PATHS = (
          '/path/to/my/project/locale/',
      )
      

      这非常关键,因为 Django 期望 LOCALE_PATHS 是 TUPLE 而不是字符串。

      我希望它能拯救某人的生命:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-20
        • 2023-03-09
        相关资源
        最近更新 更多