Django i18n 翻译在生产中不起作用 (Heroku)
Django i18n translations not working in production (Heroku)
我的翻译在本地工作,但在 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/
returnspwd
/app/locale
.
我做错了什么?
我发现了问题:
我的 django.mo
文件被 .gitignore
忽略,因为我使用 default GitHub Python gitignore file.
问题是 .mo
文件(编译的翻译)不存在于 repo 中,因此在 Heroku 构建过程中没有打包与应用程序的其余部分一起部署。
可能的解决方案是:
- 将它们添加到存储库
- 在构建期间生成
.mo
个文件
我建议在构建期间生成它们,原因如下:
- 自动编译,少一个手动步骤
- 它将确保翻译始终是最新的
- 编译后的文件不是源文件,因此应该在存储库中
要生成它们,您可以使用 Heroku 构建的 post 编译挂钩:
使用以下行创建一个文件 bin/post_compile
(没有扩展名,如 procfile):
python ./manage.py compilemessages
您可以选择添加特定语言(例如 python ./manage.py compilemessages -l nl
)
我从 this answer 得到了类似问题的最后一部分。
我的翻译在本地工作,但在 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/
returnspwd
/app/locale
.
我做错了什么?
我发现了问题:
我的 django.mo
文件被 .gitignore
忽略,因为我使用 default GitHub Python gitignore file.
问题是 .mo
文件(编译的翻译)不存在于 repo 中,因此在 Heroku 构建过程中没有打包与应用程序的其余部分一起部署。
可能的解决方案是:
- 将它们添加到存储库
- 在构建期间生成
.mo
个文件
我建议在构建期间生成它们,原因如下:
- 自动编译,少一个手动步骤
- 它将确保翻译始终是最新的
- 编译后的文件不是源文件,因此应该在存储库中
要生成它们,您可以使用 Heroku 构建的 post 编译挂钩:
使用以下行创建一个文件 bin/post_compile
(没有扩展名,如 procfile):
python ./manage.py compilemessages
您可以选择添加特定语言(例如 python ./manage.py compilemessages -l nl
)
我从 this answer 得到了类似问题的最后一部分。