-import locale
-
import collate.errors
+import collate._locale
+try:
+ import collate.codepoint as default
+except ImportError:
+ pass
try:
import collate.syslocale as default
+except ImportError:
+ pass
+try:
import collate.uca as default
+except ImportError:
+ pass
+try:
import collate.icu as default
except ImportError:
pass
collator = None
-def set_locale(locale_code):
+def set_default(backend=None, locale=None, encoding=None):
global collator
-
- if collator is None or collator.locale != locale_code:
- for code in [locale_code,
- locale_code.split("_")[0],
- locale.getdefaultlocale()[0],
- locale.getdefaultlocale()[0].split("_")[0],
- None]:
- try:
- collator = default.Collator(code)
- except collate.errors.InvalidLocaleError:
- pass
- else:
- break
+ global default
+
+ if backend is None:
+ backend = default
+ locales = collate._locale.localelist(locale)
+ c = None
+ for locale in locales:
+ locale, encoding_ = collate._locale.getpair(locale, encoding)
+ try:
+ c = backend.Collator(locale, encoding_)
+ except collate.errors.InvalidLocaleError:
+ pass
else:
- raise collate.errors.InvalidLocaleError(locale_code)
-
-def get_locale():
- return collator.locale
-
-def set_backend(backend):
- pass
+ break
+ if c is not None:
+ collator = c
+ default = backend
def key(string):
return collator.key(string)
-def cmp(string1, string2):
- return collator.cmp(string1, string2)
+def cmp(a, b):
+ return collator.cmp(a, b)
-set_locale(locale.getdefaultlocale()[0])
+set_default()