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)
我发现不同的平台更喜欢不同的语言文件夹名称。我之所以要在开发系统(Mac OS X)上花点时间,是因为即使makemessages以这种方式创建了文件夹并且编译消息也可以正常工作,但'/ pt-br / LC_MESSAGES /'无法正常工作。当我将语言重命名为'/ pt_br / LC_MESSAGES /'后,它终于如雨后春笋般出现了(注意下划线)。
将同一个项目迁移到生产环境(Ubuntu)后,它再次停止工作,我尝试在Sun进行所有操作,认为文件夹名称必须已经正确,因为它们在我的开发中可以正常使用。机。最后,我出于绝望地尝试将国家组成部分(例如/ pt_BR / LC_MESSAGES /)大写起来,然后繁荣起来,它又开始工作了。
甚至以为我的Python和Django以及我所有的各种Python / Django库和应用程序都是(通过设计)完全相同的版本,我怀疑每个系统下面都有不同的gettext版本/内部版本,这可能是造成差异的原因。
在上面的示例中,您写 LC_MESAGES的是 LC_MESSAGES(注意双 S),我相信这很可能是您的问题。
如果没有,请继续阅读!
我最近(再次!)遇到了这个问题,答案在django 文档的这一部分中找到
我怀疑您也有同样的问题,因为您的“管理”应用程序已翻译,但您自己的(项目)应用程序未翻译。
Django 似乎正在寻找你的翻译,如下所示:
- LOCALE_PATHS 中列出的目录具有最高优先级,先出现的目录优先级高于后出现的目录。
- 然后,它会查找并使用 INSTALLED_APPS 中列出的每个已安装应用程序中是否存在区域设置目录。先出现的优先级高于后出现的。
- 最后,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)
| 归档时间: |
|
| 查看次数: |
1799 次 |
| 最近记录: |