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 に答える