Ensure that the iso639 translations are used preferentially to translate language names

This commit is contained in:
Kovid Goyal 2013-11-23 08:55:17 +05:30
parent 20ee0462f3
commit 5326452976

View File

@ -30,7 +30,8 @@ def get_system_locale():
from calibre.constants import get_windows_user_locale_name
lang = get_windows_user_locale_name()
lang = lang.strip()
if not lang: lang = None
if not lang:
lang = None
except:
pass # Windows XP does not have the GetUserDefaultLocaleName fn
if lang is None:
@ -39,7 +40,7 @@ def get_system_locale():
'LC_MESSAGES', 'LANG'])[0]
except:
pass # This happens on Ubuntu apparently
if lang is None and os.environ.has_key('LANG'): # Needed for OS X
if lang is None and 'LANG' in os.environ: # Needed for OS X
try:
lang = os.environ['LANG']
except:
@ -88,7 +89,10 @@ def zf_exists():
return os.path.exists(P('localization/locales.zip',
allow_user_override=False))
_lang_trans = None
def set_translators():
global _lang_trans
# To test different translations invoke as
# CALIBRE_OVERRIDE_LANG=de_DE.utf8 program
lang = get_lang()
@ -126,8 +130,9 @@ def set_translators():
if buf is not None:
t = GNUTranslations(buf)
if iso639 is not None:
iso639 = GNUTranslations(iso639)
iso639 = _lang_trans = GNUTranslations(iso639)
t.add_fallback(iso639)
iso639.add_fallback(t)
if t is None:
t = NullTranslations()
@ -256,6 +261,9 @@ def get_language(lang):
ans = iso639['by_3b'][lang]
else:
ans = iso639['by_3t'].get(lang, ans)
try:
return _lang_trans.ugettext(ans)
except AttributeError:
return translate(ans)
def calibre_langcode_to_name(lc, localize=True):