GrampsLocale: Replace use of get_language_string with GrampsLocale.get_language_dict

Permits sorting by localized language name.
Also hides the language code, which the user doesn't really care about.
Removes get_language_string from libtranslate.py, no longer needed.

svn: r21236
This commit is contained in:
John Ralls 2013-01-27 21:10:17 +00:00
parent a65dbaddcb
commit c8bfe1db3b
5 changed files with 95 additions and 82 deletions

View File

@ -223,6 +223,7 @@ class GrampsLocale(object):
self.translation = self._get_translation(self.localedomain, self.translation = self._get_translation(self.localedomain,
self.localedir, self.language) self.localedir, self.language)
self._set_dictionaries()
@ -251,6 +252,76 @@ class GrampsLocale(object):
domain, languages, localedir) domain, languages, localedir)
return GrampsNullTranslations() return GrampsNullTranslations()
def _set_dictionaries(self):
"""
Create a dictionary of language names localized to the
GrampsLocale's primary language, keyed by language and
country code.
"""
_ = self.translation.gettext
self.lang_map = {
"bg" : _("Bulgarian"),
"ca" : _("Catalan"),
"cs" : _("Czech"),
"da" : _("Danish"),
"de" : _("German"),
"el" : _("Greek"),
"en" : _("English"),
"eo" : _("Esperanto"),
"es" : _("Spanish"),
"fi" : _("Finnish"),
"fr" : _("French"),
"he" : _("Hebrew"),
"hr" : _("Croatian"),
"hu" : _("Hungarian"),
"it" : _("Italian"),
"ja" : _("Japanese"),
"lt" : _("Lithuanian"),
"mk" : _("Macedonian"),
"nb" : _("Norwegian Bokmal"),
"nl" : _("Dutch"),
"nn" : _("Norwegian Nynorsk"),
"pl" : _("Polish"),
"pt" : _("Portuguese"),
"ro" : _("Romanian"),
"ru" : _("Russian"),
"sk" : _("Slovak"),
"sl" : _("Slovenian"),
"sq" : _("Albanian"),
"sv" : _("Swedish"),
"tr" : _("Turkish"),
"uk" : _("Ukrainian"),
"vi" : _("Vietnamese"),
"zh" : _("Chinese")
}
self.country_map = {
"BR" : _("Brazil"),
"CN" : _("China"),
"PT" : _("Portugal")
}
def _get_language_string(self, lang_code):
"""
Given a language code of the form "lang_region", return a text string
representing that language.
"""
code_parts = lang_code.rsplit("_")
lang = code_parts[0]
if lang in self.lang_map:
lang = self.lang_map[lang]
country = None
if len(code_parts) > 1:
country = code_parts[1]
if country in self.country_map:
country = self.country_map[country]
lang = "%(language)s (%(country)s)" % \
{ 'language' : lang, 'country' : country }
return lang
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Public Functions # Public Functions
@ -368,6 +439,18 @@ class GrampsLocale(object):
return languages return languages
def get_language_dict(self):
'''
return a dictionary of language names : codes for use by language
pickers.
'''
langs = {}
for code in self.get_available_translations():
langs[self._get_language_string(code)] = code
return langs
def trans_objclass(self, objclass_str): def trans_objclass(self, objclass_str):
""" """
Translates objclass_str into "... %s", where objclass_str Translates objclass_str into "... %s", where objclass_str

View File

@ -42,79 +42,6 @@ from gramps.gen.config import config
from gramps.gen.lib.grampstype import GrampsType from gramps.gen.lib.grampstype import GrampsType
from gramps.gen.constfunc import cuni from gramps.gen.constfunc import cuni
#------------------------------------------------------------------------
#
# Private Constants
#
#------------------------------------------------------------------------
_LANG_MAP = {
"bg" : _("Bulgarian"),
"ca" : _("Catalan"),
"cs" : _("Czech"),
"da" : _("Danish"),
"de" : _("German"),
"el" : _("Greek"),
"en" : _("English"),
"eo" : _("Esperanto"),
"es" : _("Spanish"),
"fi" : _("Finnish"),
"fr" : _("French"),
"he" : _("Hebrew"),
"hr" : _("Croatian"),
"hu" : _("Hungarian"),
"it" : _("Italian"),
"ja" : _("Japanese"),
"lt" : _("Lithuanian"),
"mk" : _("Macedonian"),
"nb" : _("Norwegian Bokmal"),
"nl" : _("Dutch"),
"nn" : _("Norwegian Nynorsk"),
"pl" : _("Polish"),
"pt" : _("Portuguese"),
"ro" : _("Romanian"),
"ru" : _("Russian"),
"sk" : _("Slovak"),
"sl" : _("Slovenian"),
"sq" : _("Albanian"),
"sv" : _("Swedish"),
"tr" : _("Turkish"),
"uk" : _("Ukrainian"),
"vi" : _("Vietnamese"),
"zh" : _("Chinese")
}
_COUNTRY_MAP = {
"BR" : _("Brazil"),
"CN" : _("China"),
"PT" : _("Portugal")
}
#------------------------------------------------------------------------
#
# Public Functions
#
#------------------------------------------------------------------------
def get_language_string(lang_code):
"""
Given a language code of the form "lang_region", return a text string
representing that language.
"""
code_parts = lang_code.rsplit("_")
lang = code_parts[0]
if lang in _LANG_MAP:
lang = _LANG_MAP[lang]
if len(code_parts) > 1:
country = code_parts[1]
if country in _COUNTRY_MAP:
country = _COUNTRY_MAP[country]
retstr = _("%(language)s (%(country)s)") % \
{ 'language' : lang, 'country' : country }
else:
retstr = lang
return retstr
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -53,7 +53,7 @@ from gramps.gen.plug.report import Report
from gramps.gen.plug.report import utils as ReportUtils from gramps.gen.plug.report import utils as ReportUtils
from gramps.gen.plug.report import MenuReportOptions from gramps.gen.plug.report import MenuReportOptions
from gramps.plugins.lib.libnarrate import Narrator from gramps.plugins.lib.libnarrate import Narrator
from gramps.plugins.lib.libtranslate import Translator, get_language_string from gramps.plugins.lib.libtranslate import Translator
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -300,8 +300,9 @@ class AncestorOptions(MenuReportOptions):
trans = EnumeratedListOption(_("Translation"), trans = EnumeratedListOption(_("Translation"),
Translator.DEFAULT_TRANSLATION_STR) Translator.DEFAULT_TRANSLATION_STR)
trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default")) trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default"))
for language in glocale.get_available_translations(): languages = glocale.get_language_dict()
trans.add_item(language, get_language_string(language)) for language in sorted(languages):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report.")) trans.set_help(_("The translation to be used for the report."))
menu.add_option(category_name, "trans", trans) menu.add_option(category_name, "trans", trans)

View File

@ -56,7 +56,7 @@ from gramps.gen.plug.report import endnotes
from gramps.gen.plug.report import utils as ReportUtils from gramps.gen.plug.report import utils as ReportUtils
from gramps.gen.plug.report import MenuReportOptions from gramps.gen.plug.report import MenuReportOptions
from gramps.plugins.lib.libnarrate import Narrator from gramps.plugins.lib.libnarrate import Narrator
from gramps.plugins.lib.libtranslate import Translator, get_language_string from gramps.plugins.lib.libtranslate import Translator
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -754,8 +754,9 @@ class DetAncestorOptions(MenuReportOptions):
trans = EnumeratedListOption(_("Translation"), trans = EnumeratedListOption(_("Translation"),
Translator.DEFAULT_TRANSLATION_STR) Translator.DEFAULT_TRANSLATION_STR)
trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default")) trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default"))
for language in glocale.get_available_translations(): languages = glocale.get_language_dict()
trans.add_item(language, get_language_string(language)) for language in sorted(languages):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report.")) trans.set_help(_("The translation to be used for the report."))
addopt("trans", trans) addopt("trans", trans)

View File

@ -60,7 +60,7 @@ from gramps.gen.plug.report import endnotes
from gramps.gen.plug.report import utils as ReportUtils from gramps.gen.plug.report import utils as ReportUtils
from gramps.gen.plug.report import MenuReportOptions from gramps.gen.plug.report import MenuReportOptions
from gramps.plugins.lib.libnarrate import Narrator from gramps.plugins.lib.libnarrate import Narrator
from gramps.plugins.lib.libtranslate import Translator, get_language_string from gramps.plugins.lib.libtranslate import Translator
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -929,8 +929,9 @@ class DetDescendantOptions(MenuReportOptions):
trans = EnumeratedListOption(_("Translation"), trans = EnumeratedListOption(_("Translation"),
Translator.DEFAULT_TRANSLATION_STR) Translator.DEFAULT_TRANSLATION_STR)
trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default")) trans.add_item(Translator.DEFAULT_TRANSLATION_STR, _("Default"))
for language in glocale.get_available_translations(): languages = glocale.get_language_dict()
trans.add_item(language, get_language_string(language)) for language in sorted(languages):
trans.add_item(languages[language], language)
trans.set_help(_("The translation to be used for the report.")) trans.set_help(_("The translation to be used for the report."))
add_option("trans", trans) add_option("trans", trans)