i18n在heroku的生产环境中不起作用

use*_*310 7 django heroku internationalization

我已经看过一百多个关于i18n问题的帖子,似乎没有任何解决方案可以解决我的问题.

我有一个运行Django 1.3.1的应用程序,它在我的开发机器上运行良好.但是当我带到heroku时没有任何反应.文件根本没有翻译.似乎找不到我项目中的locale文件夹.

Locale文件夹位于我的项目级别,这是我的设置:

BASE_PATH = os.path.dirname(os.path.abspath(__file__))

LANGUAGE_CODE = 'pt-br'

USE_I18N = True

USE_L10N = True

ugettext = lambda s: s
LANGUAGES = (
    ('en-us', ugettext('English')),
    ('pt-br', ugettext('Portuguese')),
)

LOCALE_PATHS = (
       os.path.join(BASE_PATH, "locale"),
)
Run Code Online (Sandbox Code Playgroud)

Locale文件夹遵循以下结构:

locale
    pt_BR
        LC_MESAGES
            django.mo
            django.po
Run Code Online (Sandbox Code Playgroud)

mko*_*nen 6

我发现不同的平台更喜欢不同的语言文件夹名称。我之所以要在开发系统(Mac OS X)上花点时间,是因为即使makemessages以这种方式创建了文件夹并且编译消息也可以正常工作,但'/ pt-br / LC_MESSAGES /'无法正常工作。当我将语言重命名为'/ pt_br / LC_MESSAGES /'后,它终于如雨后春笋般出现了(注意下划线)。

将同一个项目迁移到生产环境(Ubuntu)后,它再次停止工作,我尝试在Sun进行所有操作,认为文件夹名称必须已经正确,因为它们在我的开发中可以正常使用。机。最后,我出于绝望地尝试将国家组成部分(例如/ pt_BR / LC_MESSAGES /)大写起来,然后繁荣起来,它又开始工作了。

甚至以为我的Python和Django以及我所有的各种Python / Django库和应用程序都是(通过设计)完全相同的版本,我怀疑每个系统下面都有不同的gettext版本/内部版本,这可能是造成差异的原因。


tut*_*uju 3

在上面的示例中,您写 LC_MESAGES的是 LC_MESSAGES(注意双 S),我相信这很可能是您的问题。

如果没有,请继续阅读!

我最近(再次!)遇到了这个问题,答案在django 文档的这一部分中找到

我怀疑您也有同样的问题,因为您的“管理”应用程序已翻译,但您自己的(项目)应用程序未翻译。

Django 似乎正在寻找你的翻译,如下所示:

  1. LOCALE_PATHS 中列出的目录具有最高优先级,先出现的目录优先级高于后出现的目录。
  2. 然后,它会查找并使用 INSTALLED_APPS 中列出的每个已安装应用程序中是否存在区域设置目录。先出现的优先级高于后出现的。
  3. 最后,Django 在 django/conf/locale 中提供的基本翻译被用作后备。

使用上面描述的设置,您必须确保您的树看起来像这样(最重要的是 settings.py 位于“locale”目录上方的目录中):

+-project_top/
  |
  +-project_app/
  | |
  | +-locale/
  | | |
  | | +-pt_BR/
  | |   |
  | |   +-LC_MESSAGES/
  | |     |
  | |     +-django.po
  | |  
  | +-settings.py
  |
  +-manage.py
Run Code Online (Sandbox Code Playgroud)