43281e27dac417457f07717b3086691c29632859
4 import collate
._abcollator
6 class Collator(collate
._abcollator
.Collator
):
7 def __init__(self
, locale_code
):
8 default
= locale
.getdefaultlocale()[0]
9 for locale
in [locale_code
, default
]:
11 locale
.setlocale(locale
.LC_COLLATE
, locale_code
)
12 except locale
.Error
as err
:
17 raise collate
.errors
.InvalidLocaleError("no locale found")
18 self
.locale
= locale
.getlocale()[0]
20 self
.__encoding
= locale_code
.split(".")[1]
22 self
.__encoding
= locale_code
.split(locale
.getpreferredencoding())
24 def key(self
, string
):
26 return locale
.strxfrm(string
)
27 except UnicodeEncodeError:
28 return locale
.strxfrm(string
.encode(self
.__encoding
, "replace"))
30 def cmp(self
, string1
, string2
):
31 if isinstance(string1
, str):
32 string1
= string1
.decode(self
.__encoding
, "replace")
33 if isinstance(string2
, str):
34 string2
= string2
.decode(self
.__encoding
, "replace")
35 return locale
.strcoll(string1
, string2
)