Queer European MD passionate about IT
Jelajahi Sumber

More general refactoring

Davte 5 tahun lalu
induk
melakukan
cab54806a7
1 mengubah file dengan 30 tambahan dan 17 penghapusan
  1. 30 17
      davtelepot/languages.py

+ 30 - 17
davtelepot/languages.py

@@ -3,9 +3,6 @@
 # Standard library modules
 import logging
 
-# Project modules
-from .utilities import extract
-
 
 class MultiLanguageObject(object):
     """Make bot inherit from this class to make it support multiple languages.
@@ -20,20 +17,26 @@ class MultiLanguageObject(object):
     def __init__(self):
         """Instantiate MultiLanguage object, setting self.messages."""
         self.messages = dict()
+        self._default_language = 'en'
 
-    def get_message(self, *fields, update=dict(), user_record=dict(),
-                    language=None, **format_kwargs):
-        """Given a list of strings (`fields`), return proper message.
+    @property
+    def default_language(self):
+        """Return default language."""
+        return self._default_language
+
+    def set_default_language(self, language):
+        """Set default language."""
+        self._default_language = language
 
-        Language will be selected in this order:
+    def get_language(self, update=dict(), user_record=dict(), language=None):
+        """Get language.
+
+        Language will be the first non-null value of this list:
         - `language` parameter
         - `user_record['selected_language_code']`: language selected by user
         - `update['language_code']`: language of incoming telegram update
-        - Fallback to English if none of the above fits
-
-        `format_kwargs` will be passed to format function on the result.
+        - Fallback to default language if none of the above fits
         """
-        # Choose language
         if (
             language is None
             and 'selected_language_code' in user_record
@@ -45,8 +48,21 @@ class MultiLanguageObject(object):
             and 'language_code' in update['from']
         ):
             language = update['from']['language_code']
-        if language is None:
-            language = 'en'
+        return language or self.default_language
+
+    def get_message(self, *fields, update=dict(), user_record=dict(),
+                    language=None, **format_kwargs):
+        """Given a list of strings (`fields`), return proper message.
+
+        Language will be determined by `get_language` method.
+        `format_kwargs` will be passed to format function on the result.
+        """
+        # Choose language
+        language = self.get_language(
+            update=update,
+            user_record=user_record,
+            language=language
+        )
         # Find result for `language`
         result = self.messages
         for field in fields:
@@ -65,10 +81,7 @@ class MultiLanguageObject(object):
             result = result[field]
         if language not in result:
             # For specific languages, try generic ones
-            language = extract(
-                language,
-                ender='-'
-            )
+            language = language.partition('-')[0]
             if language not in result:
                 language = 'en'
                 if language not in result: