X-Git-Url: https://git.korewanetadesu.com/?p=python-collate.git;a=blobdiff_plain;f=collate%2F__init__.py;h=6ce11148d836cba02f0d652df60832fff0515af7;hp=1d48178845a7b886e908087901dce2b1e0640034;hb=22570a3c13079d27cfb60110f631b164dbd8b831;hpb=c02c5c3c54d35e7d5836adf54aadac1f79906f05 diff --git a/collate/__init__.py b/collate/__init__.py index 1d48178..6ce1114 100644 --- a/collate/__init__.py +++ b/collate/__init__.py @@ -1,5 +1,8 @@ import locale +if locale.getlocale()[0] is None: + locale.setlocale(locale.LC_COLLATE, '') + import collate.errors try: @@ -10,30 +13,43 @@ except ImportError: pass collator = None +preferred_locale = None + +def _get_collator(backend, locale_code): + for code in [locale_code, + locale_code.split("_")[0], + locale.getlocale(locale.LC_COLLATE)[0], + locale.getlocale(locale.LC_COLLATE)[0].split("_")[0], + locale.getdefaultlocale()[0], + locale.getdefaultlocale()[0].split("_")[0], + None]: + try: + return default.Collator(code) + except collate.errors.InvalidLocaleError: + pass def set_locale(locale_code): global collator + global preferred_locale + preferred_locale = locale_code 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 + c = _get_collator(default, locale_code) + if c is not None: + collator = c else: raise collate.errors.InvalidLocaleError(locale_code) -def get_locale(): - return collator.locale - def set_backend(backend): - pass + global collator + global default + + c = _get_collator(backend, preferred_locale) + if c is not None: + collator = c + default = backend + else: + raise collate.errors.InvalidLocaleError(locale_code) def key(string): return collator.key(string) @@ -41,4 +57,11 @@ def key(string): def cmp(string1, string2): return collator.cmp(string1, string2) -set_locale(locale.getdefaultlocale()[0]) +try: + set_locale(locale.getlocale()[0]) +except collate.errors.InvalidLocaleError: + # There's no way this should fail unless the C locale system is + # fucked or missing all data. + import collator.syslocale + set_backend(collator.syslocale) + set_locale(locale.getlocale(locale.LC_COLLATE)[0])