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

标签 python django templates translation

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

我使用 Django 1.4

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

这是我所做的:

设置.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'
)

这是我的 map 结构:

/
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 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'),
)

我在 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/,这是正确的,因为 englisch 是默认语言,然后当我将它的形式更改为 NL 时,它会重定向到 127.0.0.0。 0.1:8000/nl/但我翻译的文本没有改变。我也确定语言是 NL,因为当我显示 {{ LANGUAGE_CODE }} 它说 NL。

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

谢谢 m00p

问题已解决

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

最佳答案

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

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

这非常重要,因为 Django 期望 LOCALE_PATHS 是一个 TUPLE 而不是一个字符串。

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

关于python - django 翻译模板 {% trans "something"%},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826101/

相关文章:

javascript - Django + js 框架

c++ - 模板推导在 GCC 4.6 和 4.7 上的两个不同结果

python - 枚举纸牌排列的最佳方法是什么?

python - 通过内省(introspection)查找位置参数的名称

python - 将字典列表写入 Pandas Dataframe 中的同一行

python - 数据加密静态加密

django - 服务器滞后 - Django + mongodb + cronjob

django - 如何在条件下使用 ManyToManyField

c++ - 为什么我可以使用模板函数作为 std::sort 的参数,但不能使用模板 lambda(使用成员函数 ptr 作为模板参数)

php - Yii 框架从 Controller 传递变量到 View