すべて、私は (とりわけ) 米国英語と英国英語の両方をサポートする必要がある多言語 Web サイトを作成しようとしています。
私の設定には以下が含まれます:
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」に変更してみましたが、動作は変わりません。
ミドルウェアは、言語パスの最初の 2 文字のみをサポートしているように見えますか? ベース言語の複数の方言を適切にサポートするにはどうすればよいですか? これは簡単に 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 (この記事の執筆時点での最新の製品リリース) を使用しています。
更新:私は今それが働いているようです。私の進歩を妨げていたことが2つあったと思います。1) 英語に関しては、1 つを「en」、もう 1 つを「en-gb」としない方がよいでしょう。2) すべての実験で、DB 内の 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 は 1 つのレベルで機能する可能性がありますが、このため UI は選択した言語と一致しません。