如何在Django中维护同一语言的不同国家/地区版本?

时间:2016-09-19 16:17:30

标签: python django internationalization django-i18n

我想在Django中使用相同语言的几个不同版本,针对不同国家/地区(例如locale/enlocale/en_CAlocale/en_US等)进行自定义。如果没有特定国家/地区的语言,我希望使用默认语言版本(locale/en)。

然后,在每个网站的设置文件中,我指定了LANGUAGE_CODELANGUAGES

出于某种原因,即使我指定了以下设置,仍会使用locale/en_US翻译:

LANGUAGE_CODE = 'en'
LANGUAGES = (
    ('en', ugettext('English')),
)

虽然我明确指出语言代码应为en(不是en-us)。

我错过了什么吗?已经尝试在多个地方找到答案,包括Django文档。

3 个答案:

答案 0 :(得分:3)

这是Python的一个怪癖(不是特别是Django)和gettext模块。

在1.0版本发布时,Django问题跟踪器上出现了票8626,经过一些建议和辩论后,Django开发人员认为这是一个“不会修复”的问题。

票证线程中有建议使用' en-en'作为默认值。我的记忆有点粗糙,但如果我没记错的话,这种方法与我的i18n工具的其他部分(例如痘库)并不相称。我放弃并决定使用en-US作为项目的默认值,并列出其他变体(例如en-au)作为替代品。

答案 1 :(得分:0)

我可以建议你在LocaleMiddleware类中加一个断点吗?

通过这种方式,您可能会发现一条线索,哪条东西实际上是通过正确的语言获得的。

根据LocaleMiddleware类的source codeHow Django discovers language preference ,可能有很多事情会影响结果。

答案 2 :(得分:0)

该问题的解决方法是将以下代码段添加到settings.py文件中。

import locale
locale.locale_alias.pop('en', None)

能够调查Python locale模块行为的Venelin Stoykov特别感谢。