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

m00*_*00p 9 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.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'
)
Run Code Online (Sandbox Code Playgroud)

这是我的地图结构:

/
myproject/
apps/
locale/
template/
Run Code Online (Sandbox Code Playgroud)

所以我跑了

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

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

#: templates/base.html:22
msgid "work"
msgstr "ddddddddddddd"
Run Code Online (Sandbox Code Playgroud)

然后我运行编译命令

django-admin.py compilemessages

它还成功地在正确的文件夹中创建了一个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'),
)
Run Code Online (Sandbox Code Playgroud)

我在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>
Run Code Online (Sandbox Code Playgroud)

所以当我进入网站时,我在网址中得到127.0.0.1:8000/en/,这是正确的,因为englisch是默认语言,当我将表单更改为NL时,它重定向到127.0.0.1:8000/nl /但我翻译的文字没有改变.我也确定该语言是NL,因为当我显示{{LANGUAGE_CODE}}时,它表示NL.

有谁知道它为什么不改变?

谢谢m00p

问题解决了

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

小智 12

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

LOCALE_PATHS = (
    '/path/to/my/project/locale/',
)
Run Code Online (Sandbox Code Playgroud)

这是非常关键的,因为Django期望LOCALE_PATHS是TUPLE而不是String.

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

  • +1与逗号相关的解释! (2认同)

esa*_*uro 5

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

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