6ce11148d836cba02f0d652df60832fff0515af7
3 if locale
.getlocale()[0] is None:
4 locale
.setlocale(locale
.LC_COLLATE
, '')
9 import collate
.syslocale
as default
10 import collate
.uca
as default
11 import collate
.icu
as default
16 preferred_locale
= None
18 def _get_collator(backend
, locale_code
):
19 for code
in [locale_code
,
20 locale_code
.split("_")[0],
21 locale
.getlocale(locale
.LC_COLLATE
)[0],
22 locale
.getlocale(locale
.LC_COLLATE
)[0].split("_")[0],
23 locale
.getdefaultlocale()[0],
24 locale
.getdefaultlocale()[0].split("_")[0],
27 return default
.Collator(code
)
28 except collate
.errors
.InvalidLocaleError
:
31 def set_locale(locale_code
):
33 global preferred_locale
35 preferred_locale
= locale_code
36 if collator
is None or collator
.locale
!= locale_code
:
37 c
= _get_collator(default
, locale_code
)
41 raise collate
.errors
.InvalidLocaleError(locale_code
)
43 def set_backend(backend
):
47 c
= _get_collator(backend
, preferred_locale
)
52 raise collate
.errors
.InvalidLocaleError(locale_code
)
55 return collator
.key(string
)
57 def cmp(string1
, string2
):
58 return collator
.cmp(string1
, string2
)
61 set_locale(locale
.getlocale()[0])
62 except collate
.errors
.InvalidLocaleError
:
63 # There's no way this should fail unless the C locale system is
64 # fucked or missing all data.
65 import collator
.syslocale
66 set_backend(collator
.syslocale
)
67 set_locale(locale
.getlocale(locale
.LC_COLLATE
)[0])