Test script. Add NAME to backends. Some smarter system locale handling.
[python-collate.git] / collate / syslocale / __init__.py
index 6784a97..43281e2 100644 (file)
@@ -1,25 +1,25 @@
-import sys
 import locale
+
 import collate.errors
 import collate._abcollator
 
 class Collator(collate._abcollator.Collator):
-    def __init__(self, locale_code, strict=False):
+    def __init__(self, locale_code):
+       default = locale.getdefaultlocale()[0]
+       for locale in [locale_code, default]:
+           try:
+               locale.setlocale(locale.LC_COLLATE, locale_code)
+           except locale.Error as err:
+               pass
+           else:
+               break
+       else:
+           raise collate.errors.InvalidLocaleError("no locale found")
+        self.locale = locale.getlocale()[0]
         try:
             self.__encoding = locale_code.split(".")[1]
         except IndexError:
-            self.__encoding = locale_code.split(sys.getdefaultencoding())
-        try:
-            locale.setlocale(locale.LC_COLLATE, locale_code)
-        except locale.Error as err:
-            if strict:
-                raise collate.errors.InvalidLocaleError(str(err))
-            try:
-                locale.setlocale(
-                    locale.LC_COLLATE, locale.getdefaultlocale()[0])
-            except locale.Error as err:
-                raise collate.errors.InvalidLocaleError(str(err))
-        self.locale = locale.getdefaultlocale()[0]
+            self.__encoding = locale_code.split(locale.getpreferredencoding())
 
     def key(self, string):
         try: