总之,我正在尝试创建一个多语言网站,该网站必须支持(除其他外)美式英语和英式英语。
我的设置包含:
LANGUAGES = (
('de', u'Deutsch'),
('en_GB', u'English (UK)'),
('en', u'English (US)'),
('es', u'Español'),
('fr', u'Français'),
('pt', u'Português'),
)
所有其他语言都可以正常工作;用户可以切换语言并且一切正常。问题是en_GB。
我尝试将上述配置更改为“en-GB”、“en-gb”或“en_gb”,但行为没有任何变化。
中间件似乎只支持语言路径的前两个字母?如何正确支持基础语言的多种方言?这很容易是 es-US、es-MX、es-ES 或 fr-FR、fr-CA 或 de-DE、de-AT、de-CH 等。
我在 Python 2.7.2 上的 Django 1.4.5 上使用 Django-CMS 2.3.5(这是撰写本文时的最新生产版本)。
更新:我现在似乎可以正常工作了。我认为有两件事阻碍了我的进步。1) 说到英语,最好不要将一个作为“en”,另一个作为“en-gb”。2) 在我所有的实验中,我怀疑我弄乱了 Django-CMS 在数据库中的记录。删除我所有的页面并重新开始似乎已经解决了这个问题(注意:这在生产环境中比在这里更糟糕!)
最后,我发现这些设置对我有用:
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('en-us', u'English (US)'),
('de', u'Deutsch'),
('en-gb', u'English (UK)'),
('es', u'Español'),
('fr', u'Français'),
('pt', u'Português'),
)
CMS_LANGUAGES = LANGUAGES
CMS_LANGUAGE_CONF = {
'de': ['en-gb', 'en-us', 'fr', 'es', 'pt'],
'en-gb': ['en-us', 'fr', 'es', 'de', 'pt'],
'en-us': ['en-gb', 'fr', 'es', 'de', 'pt'],
'es': ['pt', 'fr', 'en-gb', 'en-us', 'de'],
'fr': ['es', 'pt', 'en-gb', 'en-us', 'de'],
'pt': ['es', 'fr', 'en-gb', 'en-us', 'de'],
}
CMS_HIDE_UNTRANSLATED = False
此外,显然 Django-CMS 的模板标签 page_language_url 只会返回小写语言路径元素,因此 en_GB/en-GB 可能在一个级别上工作,但 UI 将因此无法匹配所选语言。