【问题标题】:Django i18n translations not working in production (Heroku)Django i18n 翻译在生产中不起作用(Heroku)
【发布时间】:2020-02-21 07:54:38
【问题描述】:

我的翻译在本地工作,但在 Heroku 的生产中,我的网站在更改语言后仍保持其默认语言(英语)。

这些在我的settings.py 文件中:

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

USE_I18N = True
USE_L10N = True

LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')]

这是我的结构:

myproject
├── Procfile
├── locale
│   └── fr
│       └── LC_MESSAGES
│           ├── django.mo
│           └── django.po
├── myproject
│   ├── __init__.py
│   └── settings.py

我以为是path issue,所以我通过 SSH 连接到我的 Heroku 应用并打印了LOCALE_PATHS

>>> from myproject.settings import LOCALE_PATHS
>>> print(LOCALE_PATHS)
['/app/locale']

pwd 中的locale/ 返回pwd /app/locale

我做错了什么?

【问题讨论】:

标签: django heroku django-i18n


【解决方案1】:

我发现了问题:
我的django.mo 文件被.gitignore 忽略,因为我使用default GitHub Python gitignore file

【讨论】:

    【解决方案2】:

    问题是 .mo 文件(编译后的翻译)不存在于 repo 中,因此在 Heroku 构建过程中没有打包以与应用程序的其余部分一起部署。

    可能的解决方案是:

    1. 将它们添加到存储库中
    2. 在构建期间生成.mo 文件

    我建议在构建期间生成它们,原因如下:

    • 它使编译自动化,减少了一个手动步骤
    • 它将确保翻译始终是最新的
    • 编译后的文件不是源文件,因此应该在存储库中

    要生成它们,您可以使用 Heroku 构建的 post compile hook:

    使用以下行创建一个文件 bin/post_compile(无扩展名,如 procfile):

    python ./manage.py compilemessages
    

    您可以选择添加特定语言(例如python ./manage.py compilemessages -l nl

    我从this answer 得到了一个类似问题的最后一部分。

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      • 2016-04-06
      相关资源
      最近更新 更多