From fbf1d0164ad32748f8af3d93cc17b09b6659ce27 Mon Sep 17 00:00:00 2001 From: Thomas Petazzoni Date: Tue, 5 Jan 2010 23:56:40 +0100 Subject: [PATCH] Add support for Spanish language Signed-off-by: Thomas Petazzoni --- ocitysmap/i18n.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/ocitysmap/i18n.py b/ocitysmap/i18n.py index 5533900..879a7b5 100644 --- a/ocitysmap/i18n.py +++ b/ocitysmap/i18n.py @@ -163,6 +163,51 @@ class i18n_it_generic(i18n): def first_letter_equal(self, a, b): return self._upper_unaccent_string(a) == self._upper_unaccent_string(b) +class i18n_es_generic(i18n): + APPELLATIONS = [ u"Avenida", u"Avinguda", u"Calle", u"Camino", u"Camí", u"Carrer", + u"Carretera", u"Plaza", u"Plaça", u"Ronda" ] + DETERMINANTS = [ u" de", u" de la", u" del", u" de las", + u" dels", u" de los", u" d'", u" de l'", 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) + N_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) + s = self.N_ACCENT.sub("n", 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): self.language = str(language) @@ -209,6 +254,7 @@ language_class_map = { 'de_DE.UTF-8': i18n_generic, 'de_LU.UTF-8': i18n_generic, 'de_CH.UTF-8': i18n_generic, + 'es_ES.UTF-8': i18n_es_generic, } def install_translation(locale_name, locale_path):