More general refactoring
This commit is contained in:
parent
4dd88a0b2c
commit
cab54806a7
@ -3,9 +3,6 @@
|
|||||||
# Standard library modules
|
# Standard library modules
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
# Project modules
|
|
||||||
from .utilities import extract
|
|
||||||
|
|
||||||
|
|
||||||
class MultiLanguageObject(object):
|
class MultiLanguageObject(object):
|
||||||
"""Make bot inherit from this class to make it support multiple languages.
|
"""Make bot inherit from this class to make it support multiple languages.
|
||||||
@ -20,20 +17,26 @@ class MultiLanguageObject(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
"""Instantiate MultiLanguage object, setting self.messages."""
|
"""Instantiate MultiLanguage object, setting self.messages."""
|
||||||
self.messages = dict()
|
self.messages = dict()
|
||||||
|
self._default_language = 'en'
|
||||||
|
|
||||||
def get_message(self, *fields, update=dict(), user_record=dict(),
|
@property
|
||||||
language=None, **format_kwargs):
|
def default_language(self):
|
||||||
"""Given a list of strings (`fields`), return proper message.
|
"""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
|
- `language` parameter
|
||||||
- `user_record['selected_language_code']`: language selected by user
|
- `user_record['selected_language_code']`: language selected by user
|
||||||
- `update['language_code']`: language of incoming telegram update
|
- `update['language_code']`: language of incoming telegram update
|
||||||
- Fallback to English if none of the above fits
|
- Fallback to default language if none of the above fits
|
||||||
|
|
||||||
`format_kwargs` will be passed to format function on the result.
|
|
||||||
"""
|
"""
|
||||||
# Choose language
|
|
||||||
if (
|
if (
|
||||||
language is None
|
language is None
|
||||||
and 'selected_language_code' in user_record
|
and 'selected_language_code' in user_record
|
||||||
@ -45,8 +48,21 @@ class MultiLanguageObject(object):
|
|||||||
and 'language_code' in update['from']
|
and 'language_code' in update['from']
|
||||||
):
|
):
|
||||||
language = update['from']['language_code']
|
language = update['from']['language_code']
|
||||||
if language is None:
|
return language or self.default_language
|
||||||
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.
|
||||||
|
|
||||||
|
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`
|
# Find result for `language`
|
||||||
result = self.messages
|
result = self.messages
|
||||||
for field in fields:
|
for field in fields:
|
||||||
@ -65,10 +81,7 @@ class MultiLanguageObject(object):
|
|||||||
result = result[field]
|
result = result[field]
|
||||||
if language not in result:
|
if language not in result:
|
||||||
# For specific languages, try generic ones
|
# For specific languages, try generic ones
|
||||||
language = extract(
|
language = language.partition('-')[0]
|
||||||
language,
|
|
||||||
ender='-'
|
|
||||||
)
|
|
||||||
if language not in result:
|
if language not in result:
|
||||||
language = 'en'
|
language = 'en'
|
||||||
if language not in result:
|
if language not in result:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user