Django:只翻译一个元素

时间:2013-08-14 14:43:02

标签: django django-i18n

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

作为参考,这些问题对我没有帮助:

2 个答案:

答案 0 :(得分:2)

尔加!我和这个家伙有同样的问题: https://code.djangoproject.com/ticket/18492

LOCALE_PATHS元组中缺少尾随逗号。太糟糕了,Django没有引起错误。

答案 1 :(得分:0)

我有一个类似的问题,我决定确保每当我更新django.po文件时,我编译它:

ControllerA->{DependencyA}->ControllerB->{DependencyA,DependencyB}->ControllerC ^ ^ ^ | | | <---------------- <----------------

翻译从编译文件(django.mo)而不是.po文件

完成
  1. 生成翻译文件:./manage.py compilemessages
  2. 翻译:手动或使用自动翻译等工具
  3. 编译文件:./manage.py makemessages -a
  4. 测试以查看更改:不是可以先选择默认语言,请确保更改语言。例如,根据您要查看的语言,将./manage.py compilemessages更改为localhost:8000/en/localhost:8000/fr/
  5. 我希望这会有所帮助