summaryrefslogtreecommitdiff
path: root/bin/tools/misc.py
diff options
context:
space:
mode:
Diffstat (limited to 'bin/tools/misc.py')
-rw-r--r--bin/tools/misc.py46
1 files changed, 29 insertions, 17 deletions
diff --git a/bin/tools/misc.py b/bin/tools/misc.py
index 07e0fc38f8e..e60213ca740 100644
--- a/bin/tools/misc.py
+++ b/bin/tools/misc.py
@@ -820,6 +820,22 @@ class cache(object):
def to_xml(s):
return s.replace('&','&amp;').replace('<','&lt;').replace('>','&gt;')
+def get_encodings():
+ yield 'utf8'
+ from locale import getpreferredencoding
+ prefenc = getpreferredencoding()
+ if prefenc:
+ yield prefenc
+
+ prefenc = {
+ 'latin1': 'latin9',
+ 'iso-8859-1': 'iso8859-15',
+ 'cp1252': '1252',
+ }.get(prefenc.lower())
+ if prefenc:
+ yield prefenc
+
+
def ustr(value):
"""This method is similar to the builtin `str` method, except
it will return Unicode string.
@@ -829,29 +845,25 @@ def ustr(value):
@rtype: unicode
@return: unicode string
"""
+ orig = value
+ if isinstance(value, Exception):
+ return exception_to_unicode(value)
if isinstance(value, unicode):
return value
- if hasattr(value, '__unicode__'):
+ try:
return unicode(value)
-
- if not isinstance(value, str):
- value = str(value)
-
- try: # first try utf-8
- return unicode(value, 'utf-8')
except:
pass
- try: # then extened iso-8858
- return unicode(value, 'iso-8859-15')
- except:
- pass
+ for ln in get_encodings():
+ try:
+ return unicode(value, ln)
+ except:
+ pass
+ raise UnicodeError('unable de to convert %r' % (orig,))
- # else use default system locale
- from locale import getlocale
- return unicode(value, getlocale()[1])
def exception_to_unicode(e):
if (sys.version_info[:2] < (2,6)) and hasattr(e, 'message'):
@@ -914,7 +926,7 @@ def get_languages():
'fr_BE': u'French (BE) / Français (BE)',
'fr_CH': u'French (CH) / Français (CH)',
'fr_FR': u'French / Français',
- 'gl_ES': u'Galician / Spain',
+ 'gl_ES': u'Galician / Galego',
'gu_IN': u'Gujarati / India',
'hi_IN': u'Hindi / India',
'hr_HR': u'Croatian / hrvatski jezik',
@@ -939,8 +951,8 @@ def get_languages():
'ro_RO': u'Romanian / limba română',
'ru_RU': u'Russian / русский язык',
'si_LK': u'Sinhalese / Sri Lanka',
- 'sk_SK': u'Slovak / Slovakia',
- 'sl_SL': u'Slovenian / slovenščina',
+ 'sl_SI': u'Slovenian / slovenščina',
+ 'sk_SK': u'Slovak / Slovenský jazyk',
'sq_AL': u'Albanian / Shqipëri',
'sr_RS': u'Serbian / Serbia',
'sv_SE': u'Swedish / svenska',