8

我看过一百多篇关于 i18n 问题的帖子,但似乎没有解决方案可以解决我的问题。

我有一个使用 Django 1.3.1 运行的应用程序,它在我的开发机器上运行良好。但是当我带到heroku时,什么也没有发生。这些文件根本没有翻译。似乎找不到我项目中的语言环境文件夹。

语言环境文件夹在我的项目级别,这是我的设置:

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"),
)

语言环境文件夹遵循以下结构:

locale
    pt_BR
        LC_MESAGES
            django.mo
            django.po
4

7 回答 7

6

我发现不同的平台喜欢不同的语言文件夹名称。我在我的开发系统 (Mac OS X) 上大发雷霆,因为 '/pt-br/LC_MESSAGES/' 不起作用,即使 makemessages 以这种方式创建文件夹并且编译消息也可以正常工作。一旦我将语言重命名为“/pt_br/LC_MESSAGES/”(注意下划线),它终于焕发生机。

将同一个项目迁移到生产环境(Ubuntu),它再次停止工作,我在 Sun 下尝试了一切,认为文件夹名称必须已经正确,因为它们在我的开发中工作。机器。最后,出于绝望,我尝试将“/pt_BR/LC_MESSAGES/”之类的国家组件大写,然后,它又开始工作了。

即使认为我的 Python 和 Django 以及我所有的各种 Python/Django 库和应用程序(按设计)都是相同的版本,我怀疑每个系统下面都有不同的 gettext 版本/构建,这可能是造成差异的原因。

于 2013-04-12T22:58:54.893 回答
4

默认情况下,编译的翻译文件 ( *.mo) 会被 git 忽略。确认您已从.gitignore文件中删除此异常。

如果是这种情况,请删除此异常,将这些文件添加到 git,提交并推送到 Heroku 以使它们可用于 Heroku 中的应用程序。

于 2014-05-12T18:12:00.023 回答
3

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

如果没有,请继续阅读!

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

我怀疑你有同样的问题,因为你的“管理”应用程序被翻译但不是你自己的(项目)应用程序。

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

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

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

+-project_top/
  |
  +-project_app/
  | |
  | +-locale/
  | | |
  | | +-pt_BR/
  | |   |
  | |   +-LC_MESSAGES/
  | |     |
  | |     +-django.po
  | |  
  | +-settings.py
  |
  +-manage.py
于 2013-02-17T23:02:20.903 回答
0

首先,您的语言设置错误。

它应该是这样的:

LANGUAGES = (
    ('zh', 'China'),
    ('en', 'English'),
    ('ja', 'Japanese'),
)

接下来,检查 cookie 设置中的域是否正确。

我有同样的问题,并认为 Heroku 的虚拟环境永远不会支持 i18n,但最后发现我在会话 cookie 中的 'django-language' 值属于我的本地测试服务器 '0.0.0.0:5000'。

更改设置后,我在本地服务器上完成的翻译开箱即用。

于 2013-10-12T08:43:33.960 回答
0

在某些情况下,名称中带有“-”或“_”的目录未正确寻址。我解决了将 url 自定义为 2 字符代码的问题。这可以通过创建别名来完成:

from django.conf import global_settings, locale
EXTRA_LANG_INFO = {
    'pt': {
        'fallback': ['pt-br'],
    },
}
LANG_INFO = dict(locale.LANG_INFO, **EXTRA_LANG_INFO)
locale.LANG_INFO = LANG_INFO
于 2019-05-03T12:45:21.637 回答
0

我想强调上面@msaad 的评论。如果您在 Mac OS X 上开发并且您的翻译目录都是小写的,那么将其从 es_es -> es_ES 更改并重新部署。这为我解决了这个问题。在 OS X 上,系统不区分大小写,但在 linux 系统上则不区分大小写。

于 2019-10-23T08:06:25.630 回答
0

我不回答与 Heroku 相关的问题,只是为了收集大多数可能性:

我有 Debian 10 开发和 Debian 10 虚拟服务器在生产中。开发中一切正常,i18n 生产失败。

原因:我需要apt install gettext.

此外,请确保.mo 文件在 git 中并且没有被 .gitignore 禁用(这个答案已经在这里),

于 2020-12-11T14:04:38.927 回答