diff --git a/ocitysmap/i18n.py b/ocitysmap/i18n.py index c60df22..563b69f 100644 --- a/ocitysmap/i18n.py +++ b/ocitysmap/i18n.py @@ -118,6 +118,48 @@ class i18n_fr_generic(i18n): def first_letter_equal(self, a, b): return self._upper_unaccent_string(a) == self._upper_unaccent_string(b) +class i18n_it_generic(i18n): + APPELLATIONS = [ u"Via", u"Piazza", u"Scali", u"Strada", u"Largo", + u"Corso", u"Viale", ] + DETERMINANTS = [ u" delle", u" dell'", u" dei", u" degli", + u" della", u" di", u"" ] + + SPACE_REDUCE = re.compile(r"\s+") + PREFIX_REGEXP = re.compile(r"^(?P(%s)(%s)?)\s?\b(?P.+)" % + ("|".join(APPELLATIONS), + "|".join(DETERMINANTS)), re.IGNORECASE + | re.UNICODE) + + # for IndexPageGenerator._upper_unaccent_string + E_ACCENT = re.compile(ur"[éèêëẽ]", re.IGNORECASE | re.UNICODE) + I_ACCENT = re.compile(ur"[íìîïĩ]", re.IGNORECASE | re.UNICODE) + A_ACCENT = re.compile(ur"[áàâäã]", re.IGNORECASE | re.UNICODE) + O_ACCENT = re.compile(ur"[óòôöõ]", re.IGNORECASE | re.UNICODE) + U_ACCENT = re.compile(ur"[úùûüũ]", re.IGNORECASE | re.UNICODE) + + def __init__(self, language, locale_path): + self.language = str(language) + _install_language(language, locale_path) + + def _upper_unaccent_string(self, s): + s = self.E_ACCENT.sub("e", s) + s = self.I_ACCENT.sub("i", s) + s = self.A_ACCENT.sub("a", s) + s = self.O_ACCENT.sub("o", s) + s = self.U_ACCENT.sub("u", s) + return s.upper() + + def language_code(self): + return self.language + + def user_readable_street(self, name): + name = name.strip() + name = self.SPACE_REDUCE.sub(" ", name) + name = self.PREFIX_REGEXP.sub(r"\g (\g)", name) + return name + + def first_letter_equal(self, a, b): + return self._upper_unaccent_string(a) == self._upper_unaccent_string(b) class i18n_generic(i18n): def __init__(self, language, locale_path): @@ -133,8 +175,8 @@ class i18n_generic(i18n): def first_letter_equal(self, a, b): return a == b -language_class_map = { # 'code_CODE.UTF-8': i18n_template_code_CODE(), # example for - # new language +language_class_map = { + # 'code_CODE.UTF-8': 'i18n_class', # example for new language 'C': 'i18n_generic', 'fr_BE.UTF-8': 'i18n_fr_generic', 'fr_FR.UTF-8': 'i18n_fr_generic', @@ -158,7 +200,10 @@ language_class_map = { # 'code_CODE.UTF-8': i18n_template_code_CODE(), # example 'en_ZA.UTF-8': 'i18n_generic', 'en_ZW.UTF-8': 'i18n_generic', 'de_BE.UTF-8': 'i18n_generic', - 'nl_BE.UTF-8': 'i18n_generic'} + 'nl_BE.UTF-8': 'i18n_generic', + 'it_IT.UTF-8': 'i18n_it_generic', + 'it_CH.UTF-8': 'i18n_it_generic', +} def install_translation(language, locale_path): def _construct_by_name(cname,*p,**k):