我想在Django中使用相同语言的几个不同版本,针对不同国家/地区(例如locale/en
,locale/en_CA
,locale/en_US
等)进行自定义。如果没有特定国家/地区的语言,我希望使用默认语言版本(locale/en
)。
然后,在每个网站的设置文件中,我指定了LANGUAGE_CODE
和LANGUAGES
。
出于某种原因,即使我指定了以下设置,仍会使用locale/en_US
翻译:
LANGUAGE_CODE = 'en'
LANGUAGES = (
('en', ugettext('English')),
)
虽然我明确指出语言代码应为en
(不是en-us
)。
我错过了什么吗?已经尝试在多个地方找到答案,包括Django文档。
答案 0 :(得分:3)
这是Python的一个怪癖(不是特别是Django)和gettext模块。
在1.0版本发布时,Django问题跟踪器上出现了票8626,经过一些建议和辩论后,Django开发人员认为这是一个“不会修复”的问题。
票证线程中有建议使用' en-en'作为默认值。我的记忆有点粗糙,但如果我没记错的话,这种方法与我的i18n工具的其他部分(例如痘库)并不相称。我放弃并决定使用en-US作为项目的默认值,并列出其他变体(例如en-au)作为替代品。
答案 1 :(得分:0)
我可以建议你在LocaleMiddleware类中加一个断点吗?
通过这种方式,您可能会发现一条线索,哪条东西实际上是通过正确的语言获得的。
根据LocaleMiddleware类的source code和How Django discovers language preference ,可能有很多事情会影响结果。
答案 2 :(得分:0)
该问题的解决方法是将以下代码段添加到settings.py
文件中。
import locale
locale.locale_alias.pop('en', None)
能够调查Python locale
模块行为的Venelin Stoykov特别感谢。