2012-09-04 81 views
1

我有一個Django項目。它有一個settings.LANGUAGES,看起來有點像下面這樣:將語言代碼映射到Django中的條目語言

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

我想出了這一點:

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])