【问题标题】:django internationalization and translations issuedjango 国际化和翻译问题
【发布时间】:2011-02-08 00:52:27
【问题描述】:

我对 django 翻译有疑问。

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

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

我不认为这是设置问题,因为 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,我更改了。

【问题讨论】:

  • 你准备好关于i18n的文档了吗?我猜,但你是否在模板中启用 i18n 标签?您确定您的 .po 文件在正确的路径中吗?你能写更多信息吗?
  • 嗯,是的。 i18n 在具有 {% load i18n %} 的模板中启用。由于 django.po 文件在正确的路径中(问题 1),我不认为它是启用或加载 i18n 的问题。就像我说的那样 - 现有的翻译正在加载到模板中。但是我怎么知道问题 2 语言环境文件是否在正确的位置?它们在 django-admin.py makemessages -l et 生成的地方
  • 阅读:docs.djangoproject.com/en/1.1/topics/i18n/localization/… 路径将是:your_project/locale/et/LC_MESSAGES/django.po。
  • 嗯,这正是我自己生成的文件所在的位置,那么问题是什么?
  • 再次,我猜,你编译你的 .po 文件吗?你确定你的 .po 文件有问题吗?

标签: django internationalization translation


【解决方案1】:

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

【讨论】:

  • 你必须重启django服务器也是我的经验,但奇怪的是文档中没有提到它。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      确保使用 ugettext_lazy 而不是 ugettext

      【讨论】:

        【解决方案5】:

        遇到了相同/类似的问题,翻译未显示。设置 LOCALE_PATHS 解决了这个问题:

        # settings.py
        USE_I18N = True
        USE_L10N = True
        
        LOCALE_PATHS = (
          '/path/to/djangoapp/locale',
        )
        

        【讨论】:

        • 嗯,是的,自从我发布问题以来,django 已经收到了 4 次重大升级。语言环境路径确实是解决翻译问题的方法之一,我认为它们是在 django 1.4 中添加的。
        • 更好的是我会推荐os.path.join(BASE_DIR, 'locale'),不要使用相对路径,因为虽然它们在开发中工作,但它们可能无法实时工作,具体取决于服务器等。我很难学会这一点。
        【解决方案6】:

        好吧,我刚才也遇到了同样的错误。我解决了它在我的 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:我知道您在几个月前遇到了这个问题,但我留下了这个回复,因为如果您解决了这个问题,我们从未听说过您。

        【讨论】:

        • 我也因为那些fuzzies 拉了几根头发:)
        • 那对我不起作用。 Django 目前正在以一种神秘的方式工作:(
        • 呃!我只花了半个小时试图弄明白,这该死的模糊。
        • 你不知道调试这个问题花了我多少时间......谢谢你的提示!
        【解决方案7】:

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

        【讨论】:

          猜你喜欢
          • 2016-11-30
          • 2019-06-08
          • 1970-01-01
          • 1970-01-01
          • 2017-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多