3 commits - pykolab/translit.py pykolab/utils.py tests/unit
Jeroen van Meeuwen
vanmeeuwen at kolabsys.com
Fri Feb 8 17:18:05 CET 2013
pykolab/translit.py | 107 +++++++++++++++++++++++++++++++++++
pykolab/utils.py | 10 ++-
tests/unit/test-010-transliterate.py | 39 ++++++++++++
3 files changed, 155 insertions(+), 1 deletion(-)
New commits:
commit 8565c4c13d454819550744672e566bac6714f6c3
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Fri Feb 8 16:17:36 2013 +0000
Add tests for transliteration of ru_RU using the new transliterate() function fallback for utils.translate()
diff --git a/tests/unit/test-010-transliterate.py b/tests/unit/test-010-transliterate.py
index 7f70700..3c98a1a 100644
--- a/tests/unit/test-010-transliterate.py
+++ b/tests/unit/test-010-transliterate.py
@@ -59,6 +59,45 @@ class TestTransliteration(unittest.TestCase):
self.assertEqual('Alvaro', utils.translate(givenname, preferredlanguage))
self.assertEqual('Fuentes', utils.translate(surname, preferredlanguage))
+ def test_005_raw_ru_RU(self):
+ from pykolab import utils
+ givenname = r'Ðиколай'
+ surname = r'РимÑкий-ÐоÑÑаков'
+
+ preferredlanguage = 'ru_RU'
+
+ self.assertEqual('Nikolaj', utils.translate(givenname, preferredlanguage))
+ self.assertEqual('Rimskij-Korsakov', utils.translate(surname, preferredlanguage))
+
+ def test_006_unicode_ru_RU(self):
+ from pykolab import utils
+ givenname = u'Ðиколай'
+ surname = u'РимÑкий-ÐоÑÑаков'
+
+ preferredlanguage = 'ru_RU'
+
+ self.assertEqual('Nikolaj', utils.translate(givenname, preferredlanguage))
+ self.assertEqual('Rimskij-Korsakov', utils.translate(surname, preferredlanguage))
+
+ def test_007_raw_ru_RU(self):
+ from pykolab import utils
+ givenname = r'ЮлиÑ'
+ surname = r'Ðлкина'
+
+ preferredlanguage = 'ru_RU'
+
+ self.assertEqual('Yuliya', utils.translate(givenname, preferredlanguage))
+ self.assertEqual('Yolkina', utils.translate(surname, preferredlanguage))
+
+ def test_008_unicode_ru_RU(self):
+ from pykolab import utils
+ givenname = u'ЮлиÑ'
+ surname = u'Ðлкина'
+
+ preferredlanguage = 'ru_RU'
+
+ self.assertEqual('Yuliya', utils.translate(givenname, preferredlanguage))
+ self.assertEqual('Yolkina', utils.translate(surname, preferredlanguage))
if __name__ == '__main__':
unittest.main()
commit 6c82952f1f737e619d7ef95c0308a83336fa1ce1
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Fri Feb 8 16:16:56 2013 +0000
Attempt to use iconv, but if it fails, fall back to using our own translit function (#1536)
diff --git a/pykolab/utils.py b/pykolab/utils.py
index 7f56c29..c10bbb2 100644
--- a/pykolab/utils.py
+++ b/pykolab/utils.py
@@ -415,10 +415,18 @@ def translate(mystring, locale_name='en_US'):
log.debug(_("Executing '%s | %s'") % (r"%s" % (mystring), ' '.join(command)), level=8)
process = subprocess.Popen(command, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, env={'LANG': locale.normalize(locale_name)})
- print >> process.stdin, r"%s" % mystring
+ try:
+ print >> process.stdin, r"%s" % mystring
+ except UnicodeEncodeError, errmsg:
+ pass
result = process.communicate()[0].strip()
+ if '?' in result or (result == '' and not mystring == ''):
+ log.warning(_("Could not translate %s using locale %s") % (mystring, locale_name))
+ from pykolab import translit
+ result = translit.transliterate(mystring, locale_name)
+
return result
def true_or_false(val):
commit 45078a3b0d84429ccaf8dc6ff5ae7a5eb6751078
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Fri Feb 8 16:16:23 2013 +0000
Provide an initial locale -> translit lookup table set and a function to call
diff --git a/pykolab/translit.py b/pykolab/translit.py
new file mode 100644
index 0000000..ac4d2d7
--- /dev/null
+++ b/pykolab/translit.py
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+# Copyright 2010-2012 Kolab Systems AG (http://www.kolabsys.com)
+#
+# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 3 or, at your option, any later version
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+locale_translit_map = {
+ 'ru_RU': 'cyrillic'
+ }
+
+translit_map = {
+ 'cyrillic': {
+ u'Ð': 'A',
+ u'а': 'a',
+ u'Ð': 'B',
+ u'б': 'b',
+ u'Ð': 'V',
+ u'в': 'v',
+ u'Ð': 'G',
+ u'г': 'g',
+ u'Ð': 'D',
+ u'д': 'd',
+ u'Ð': 'E',
+ u'е': 'e',
+ u'Ð': 'Yo',
+ u'Ñ': 'e',
+ u'Ð': 'Zh',
+ u'ж': 'zh',
+ u'Ð': 'Z',
+ u'з': 'z',
+ u'Ð': 'I',
+ u'и': 'i',
+ u'Ð': 'J',
+ u'й': 'j',
+ u'Ð': 'K',
+ u'к': 'k',
+ u'Ð': 'L',
+ u'л': 'l',
+ u'Ð': 'M',
+ u'м': 'm',
+ u'Ð': 'N',
+ u'н': 'n',
+ u'Ð': 'O',
+ u'о': 'o',
+ u'Ð': 'P',
+ u'п': 'p',
+ u'Ð ': 'R',
+ u'Ñ': 'r',
+ u'С': 'S',
+ u'Ñ': 's',
+ u'Т': 'T',
+ u'Ñ': 't',
+ u'У': 'U',
+ u'Ñ': 'u',
+ u'Ф': 'F',
+ u'Ñ': 'f',
+ u'Ð¥': 'Kh',
+ u'Ñ
': 'kh',
+ u'Ц': 'Tc',
+ u'Ñ': 'tc',
+ u'Ч': 'Ch',
+ u'Ñ': 'ch',
+ u'Ш': 'Sh',
+ u'Ñ': 'sh',
+ u'Щ': 'Shch',
+ u'Ñ': 'shch',
+ u'Ъ': '',
+ u'Ñ': '',
+ u'Ы': 'Y',
+ u'Ñ': 'y',
+ u'Ь': '',
+ u'Ñ': '',
+ u'Ð': 'E',
+ u'Ñ': 'e',
+ u'Ю': 'Yu',
+ u'Ñ': 'yu',
+ u'Я': 'Ya',
+ u'Ñ': 'ya',
+ }
+ }
+
+def transliterate(_input, lang, _output_expected=None):
+ _translit_name = locale_translit_map[lang]
+
+ _output = ''
+
+ for char in _input:
+ if translit_map[_translit_name].has_key(char):
+ _output += translit_map[_translit_name][char]
+ else:
+ _output += char
+
+ return _output
+
More information about the commits
mailing list