1

我有一个 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()以使用相同的子字符串逻辑,或者自己编写一些东西并调试分裂的边缘情况。

我是否错过了一些有用的功能来做到这一点,还是我需要自己编写?

4

1 回答 1

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])
于 2014-09-24T16:59:54.373 回答