我有一个Django项目。它有settings.LANGUAGES
,看起来有点像:
LANGUAGES = (
('de', 'German'),
('en', 'English'),
('en-us', 'US English'),
)
我有一系列语言代码,因此对于每个代码,django.utils.translation.check_for_language()
都会返回True
,即项目支持它们:
language_codes = ('en', 'en-us', 'en-gb', 'de', 'de-at')
我想转换language_codes
,使每个项目都是LANGUAGES
中的一种语言,即:
transformed_language_codes = ('en', 'en-us', 'en', 'de', 'de')
我想Django在寻找翻译时会做出类似的转变。然而,通过django.utils.translation.trans_real
查看并未发现任何看起来正确的内容。我最好的选择似乎是围绕get_language_from_request()
进行攻击以使用相同的子字符串逻辑,或者自己编写一些内容并调整边缘情况进行拆分。
我是否错过了一些有用的功能,或者我是否需要自己编写?
答案 0 :(得分:0)
我想出了这个:
class UnknownLanguageError(Exception):
pass
def translate_languages(lang_codes, supported_languages):
translated_languages = []
for code in lang_codes:
if not code in supported_languages:
code = code[:2]
if not code in supported_languages:
raise UnknownLanguageError()
translated_languages.append(code)
return zip(lang_codes, translated_languages)
if __name__ == '__main__':
LANGUAGES = (
('de', 'German'),
('en', 'English'),
('en-us', 'US English'),
)
lang_codes = ('en', 'en-us', 'en-gb', 'de', 'de-at')
lang_table = translate_languages(lang_codes, dict(LANGUAGES).keys())
for t in lang_table:
print '%s \t -> %s' % (t[0], t[1])