好的,我一直在疯狂地寻找这个我认为简单的问题。
我使用Django 1.4
问题是django不会在我的模板中翻译简单的{%trans“工作”%}。
这就是我所做的:
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
并且它在locale文件夹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>
所以当我访问网站时,我在网址中得到127.0.0.1:8000/en/,这是正确的,因为englisch是默认语言,当我将表单更改为NL时,它会重定向到127.0。 0.1:8000 / nl /但我翻译的文字没有改变。我也确定该语言是NL,因为当我显示{{LANGUAGE_CODE}}时,它表示NL。
有人知道为什么不改变吗?
谢谢m00p
问题已解决
在我添加忘记工作的过程中,我重新启动了部署服务器,但是我没有清除浏览器的缓存它仍在使用旧页面,因此,当我在Chrome中清除浏览器数据并重新访问该页面并更改语言时,它会正确翻译它。不管怎样,谢谢你的建议!
答案 0 :(得分:12)
我花了几个小时试图在处理我的新项目Sportolio时在Django 1.5中修复此问题,结果发现我在LOCALE_PATH结束时错过了逗号
LOCALE_PATHS = (
'/path/to/my/project/locale/',
)
这非常关键,因为Django期望LOCALE_PATHS是一个 TUPLE 而不是一个字符串。
我希望能拯救某人的生命:)。
答案 1 :(得分:5)
在Django 1.4中,不再支持项目根目录下的语言环境目录。您应该将其添加到LOCALE_PATHS
设置,默认情况下为空。 Django Settings
但是,语言环境生成中涉及的管理命令似乎有效,所以我不知道你是否已经这样做了。
答案 2 :(得分:0)
我有同样的情况。部分短语是翻译,但大多数只是显示关键。我们有两种主要语言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 }}
{{ _() }}
他们都没有工作!
但是重新加载服务器会将所有内容整理好。 我希望它可能对某些人有帮助。
答案 3 :(得分:0)
命令位置的关键位置。
就我而言,这是我的项目结构:
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" %}
。
因此,请注意您的位置。