diff --git a/davtelepot/languages.py b/davtelepot/languages.py index b292755..e3a5a66 100644 --- a/davtelepot/languages.py +++ b/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 - Language will be selected in this order: + def set_default_language(self, language): + """Set default language.""" + self._default_language = language + + 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: