在Python 2.6上将Django站点从1.2移植到1.5我遇到了国际化的问题。
奇怪的是,在整个网站中只有一个字符串被翻译(好吧,几乎,日期过滤器可以在我测试时翻译长月名称)。位于同一模板中的其他字符串不会被翻译,并且所有翻译都位于单个po / mo文件中。所有翻译都在那里,用Poedit验证并使用manage.py compilemessages
进行编译。
编辑:单个翻译字符串的原因是它与管理网站中的字符串匹配。
在尝试使其工作时,我清除LOCALE_PATH
,重新启动开发服务器(manage.py runserver),清除任何浏览器缓存(即使该网站的元数据禁用兑现),lo和看,元素仍然被翻译。我通过在之后再次添加相同的文本来验证这一点,并且它仍然被翻译,因此不涉及客户端缓存。
语言切换按预期工作,唯一翻译的元素更改为默认语言,{{ LANGUAGE_CODE }}
确认了这一点。
我已经尝试清除会话数据和django缓存(开发服务器似乎没有使用它)。
有人可以猜出这里发生了什么吗?是不是有任何调试标志来获得更广泛的日志记录或什么?
最小视图:
def locale_test(request):
locale = request.GET.get('l', None)
if locale:
translation.activate(locale)
di = {"foobar": _("foobar")}
return render_to_response('locale_test.html',di, context_instance=RequestContext(request))
相应的模板(locale_test.html
):
{% load i18n %}
<p>Language: {{ LANGUAGE_CODE }}</p>
<p>Matching string from admin site that gets translated correctly: {% trans "Log out" %}</p>
<p>Translated in template: {% trans "Foobar" %}</p>
<p>Translated in view: {{ foobar }}</p>
相关设置:
USE_I18N = True
USE_L10N = True
LANGUAGES = (
('en', 'English'),
('foo', 'Fooo'),
)
LANGUAGE_CODE = 'en'
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
)
LOCALE_PATHS = ('/path/to/my/locale',)
作为参考,这些问题对我没有帮助:
答案 0 :(得分:2)
尔加!我和这个家伙有同样的问题: https://code.djangoproject.com/ticket/18492
即LOCALE_PATHS
元组中缺少尾随逗号。太糟糕了,Django没有引起错误。
答案 1 :(得分:0)
我有一个类似的问题,我决定确保每当我更新django.po文件时,我编译它:
ControllerA->{DependencyA}->ControllerB->{DependencyA,DependencyB}->ControllerC
^ ^ ^
| | |
<----------------
<----------------
翻译从编译文件(django.mo)而不是.po文件
完成./manage.py compilemessages
./manage.py makemessages -a
./manage.py compilemessages
更改为localhost:8000/en/
或localhost:8000/fr/
我希望这会有所帮助