django国际化和翻译问题

时间:2010-04-14 17:30:50

标签: django internationalization translation

我的django翻译有问题。

问题1 - 我更新了django.po文件中的字符串,但更改没有出现在网页上。

问题2 - 我用django-admin.py makemessages -l et创建了我自己的语言环境文件,将翻译字符串添加到文件中,但它们也没有出现在页面上。

我不认为这是设置问题,因为django.po文件的翻译确实出现在网站上,只是更改和我自己生成的文件中没有出现的翻译。

编辑: 我的settings.py包含:

gettext = lambda s: s
LANGUAGE_CODE = 'et'

LANGUAGES = (
             ('et', gettext('Estonian')),
             )

我自己的语言环境文件位于

/path/to/project/locale/et/LC_MESSAGES/

,文件是

django.mo和django.po

我在问题1中提到的文件是django own et transaltion,我改变了。

7 个答案:

答案 0 :(得分:26)

嗯,我刚才得到了同样的错误。我解决了它在我的django.po文件中删除翻译字符串上的“#,fuzzy”标记。如果获得此标记,似乎不会提供已翻译的文本,因此请务必翻译文本然后删除此行。

以下是po文件中已翻译文本而非服务器的示例:

     #: course/models.py:13
     #, fuzzy
     msgid "code"
     msgstr "código"

所以,只需删除标志并保留如下:

     #: course/models.py:13
     msgid "code"
     msgstr "código"

我希望这对你有用。祝你好运!

参考:http://share-experiences.com/blog/what-fuzzy-means-python-django-gettext/

PD:我知道你几个月前就遇到过这个问题了,但我留下这个回应是因为如果你解决了这个问题我们从未听说过。

答案 1 :(得分:12)

有相同/类似的问题,翻译没有显示。设置LOCALE_PATHS解决了问题:

# settings.py
USE_I18N = True
USE_L10N = True

LOCALE_PATHS = (
  '/path/to/djangoapp/locale',
)

答案 2 :(得分:7)

翻译文件(PO)只在内存中加载一次,Django不会更改PO文件。要加载新的翻译文件,您需要重新启动Django(例如,停止/启动runserver,Apache或NGINX)。

答案 3 :(得分:1)

Django翻译无法正常工作的另一个原因是使用与用于运行应用程序的Python版本不同的Python版本编译.po文件。确保使用相同的版本。

答案 4 :(得分:0)

确保使用ugettext_lazy而不是ugettext

答案 5 :(得分:0)

如果您使用gettext.translation来获取翻译,即:

text_de = gettext.translation('django', locale_dir, ['de'], fallback=True).ugettext('Welcome to my site')

...您的翻译工作在开发服务器上,但不适用于生产,请注意locale_dir必须指向您的语言环境目录。它可能位于其中一个系统的其他位置。花了2个小时才找到它。

答案 6 :(得分:-2)

检查USE_I18N设置。 More info。无论如何,我认为默认情况下是True ...