Python django翻译模板{%trans";something";%}

Python django翻译模板{%trans";something";%},python,django,templates,translation,Python,Django,Templates,Translation,好吧,我一直在疯狂地寻找这个我认为很简单的问题 我使用Django 1.4 问题是django不会在我的模板中翻译一个简单的{%trans“work”%} 这就是我所做的: Settings.py: LANGUAGE_CODE = 'en-us' USE_I18N = True MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.loca

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

我使用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/
myproject/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    apps/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py
所以我跑了

django-admin.py生成消息-l nl-i settings.py

它成功地创建在locale文件夹nl/LC_MESSAGES/django.po中,然后我编辑了它在django.po中找到的翻译

#: templates/base.html:22
msgid "work"
msgstr "ddddddddddddd"
然后运行compile命令

django-admin.py编译消息

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

我也在myproject/url.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>

{%csrf_令牌%}
{%get_language_info_list for LANGUAGES as LANGUAGES%}
{%用于语言中的语言%}
{{language.name_local}}({{language.code}})
{%endfor%}
因此,当我访问该网站时,我在url中得到127.0.0.1:8000/en/,这是正确的,因为英语是默认语言,当我将其形式更改为NL时,它重定向到127.0.0.1:8000/NL/,但我翻译的文本没有更改。我还确定语言是NL,因为当我显示{{language_CODE}}时,它表示NL

有人知道为什么它没有改变吗

谢谢m00p

问题已解决


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

在Django 1.4中,不再支持项目根目录下的区域设置目录。您应该将其添加到默认为空的
LOCALE\u path
设置中


但是,区域设置生成中涉及的管理命令似乎起作用,因此我不知道您是否已经这样做了。

我只是在Django 1.5中花了几个小时试图解决这个问题,而我的新项目在区域设置路径的末尾缺少了一个逗号

LOCALE_PATHS = (
    '/path/to/my/project/locale/',
)
这一点非常关键,因为Django希望LOCALE_路径是一个元组而不是字符串


我希望它能救一个人的命:)

我也遇到过同样的情况。一部分短语是翻译的,但大多数短语只是显示了重点。我们有两种主要语言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生成采购订单和生产订单文件。然而,问题不断显现

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

{% trans ' ' %}
{% trans " " %}
{% blocktrans %} {% endblocktrans %}
{% trans "xyz" az XYZ %} {{ XYZ }}
{{ _() }}
他们都没有工作

但重新加载服务器会使一切正常。
我希望这可能对某些人有所帮助。

您键入命令的位置很重要

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

/
myproject/
apps/
locale/
template/
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
D:\...\myproject> python manage.py makemessages -all
它不会在HTML
{%trans“str”%}
中获取字符串
但如果我调用myproject文件夹中的makemessages,如下所示:

D:\...\myproject\mysite> python ../manage.py makemessages -all
D:\...\myproject> python manage.py makemessages -all
它起作用了!它在HTML中查找所有
{%trans“str”%}


因此,请注意您所在的位置。

我这样做了,但没有做任何更改:(我也在使用这种多语言概念,我做了与您完全相同的事情,但在我的django.po文件中,它不包含我可以编辑的模板文件行,例如,您的.po文件包含
:templates/base.html:22 msgid“work”
…但它包含站点包/django(即管理部分)中的所有文件我不想编辑这些管理文件,但我编辑以查看天气翻译是否有效,但它也不适用于此管理部分…………因此我的主要问题是如何显示我可以编辑的模板数据我已经指定了
{%load i18n%}{%trans“Hello”%}
在我的模板中,以便.po文件选择它,我可以在.po文件中添加翻译后的数据…………但它仍然不会在.po文件中选择这些模板???