Skip to content

Commit f5d0af3

Browse files
author
Konstantinos Bairaktaris
committed
Set current language
1 parent d0081b3 commit f5d0af3

File tree

4 files changed

+54
-5
lines changed

4 files changed

+54
-5
lines changed

tests/native/core/test_cache.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,12 @@ def test_returns_entry_if_exists(self):
3737
assert cache.get('chair', 'el') == u'Μια καρέκλα'
3838
assert cache.get('invalid', 'en') is None
3939
assert cache.get('invalid', 'el') is None
40+
41+
def test_contains(self):
42+
cache = MemoryCache()
43+
cache.update({
44+
'lang1': (True, {'source1': {'string': "translation1"},
45+
'source2': {'string': "translation2"}}),
46+
})
47+
assert 'lang1' in cache
48+
assert 'lang2' not in cache

tests/native/core/test_core.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,13 @@ def test_plural(self, cache_mock):
212212
u"fr_FR",
213213
params={'cnt': 2})
214214
assert translation == u'OTHER'
215+
216+
@patch('transifex.native.core.CDSHandler.fetch_translations')
217+
def test_set_current_language(self, mock_cds):
218+
mock_cds.return_value = {'el': (True, {})}
219+
tx = self._get_tx()
220+
tx.remote_languages = [{'code': "el"}]
221+
tx.set_current_language('el')
222+
223+
assert tx.current_language_code == 'el'
224+
mock_cds.assert_called_once_with('el')

transifex/native/cache.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ def update(self, data):
5151
"""
5252
pass
5353

54+
def __contains__(self, language_code):
55+
""" Check whether language_code has already been added to the cache.
56+
"""
57+
58+
pass
59+
5460

5561
class MemoryCache(AbstractCache):
5662
"""A cache that stores translations in memory."""
@@ -81,3 +87,6 @@ def get(self, key, language_code):
8187
except (ValueError, AttributeError):
8288
pass
8389
return retrieved_translation
90+
91+
def __contains__(self, language_code):
92+
return language_code in self._translations_by_lang

transifex/native/core.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ def setup(self,
4949
"""
5050
if source_language is not None:
5151
self.source_language_code = source_language
52-
if current_language is not None:
53-
self.current_language_code = current_language
5452
if languages is not None:
5553
self.hardcoded_language_codes = languages
5654
if missing_policy is not None:
@@ -62,6 +60,9 @@ def setup(self,
6260
secret=secret,
6361
host=cds_host)
6462

63+
if current_language is not None:
64+
self.set_current_language(current_language)
65+
6566
def fetch_languages(self, force=False):
6667
if self.remote_languages is None or force:
6768
self.remote_languages = self._cds_handler.fetch_languages()
@@ -73,17 +74,34 @@ def fetch_languages(self, force=False):
7374
else:
7475
return self.remote_languages
7576

77+
def set_current_language(self, language_code, force=False):
78+
if language_code not in (language['code']
79+
for language in self.fetch_languages()):
80+
raise ValueError("Language {} is not supported by the application".
81+
format(language_code))
82+
if language_code not in self._cache or force:
83+
self.fetch_translations(language_code=language_code, force=True)
84+
self.current_language_code = language_code
85+
7686
def fetch_translations(self, language_code=None, force=False):
7787
"""Fetch fresh content from the CDS."""
7888
if language_code is None:
7989
for language in self.fetch_languages():
8090
self.fetch_translations(language['code'], force=force)
8191
else:
82-
translations = self._cds_handler.fetch_translations(language_code)
83-
self._cache.update(translations)
92+
if language_code not in [language['code']
93+
for language in self.fetch_languages()]:
94+
raise ValueError(
95+
"Language {} is not supported by the application".
96+
format(language_code)
97+
)
98+
if language_code not in self._cache or force:
99+
translations = self._cds_handler.\
100+
fetch_translations(language_code)
101+
self._cache.update(translations)
84102

85103
def translate(
86-
self, source_string, language_code, is_source=False,
104+
self, source_string, language_code=None, is_source=False,
87105
_context=None, escape=True, params=None
88106
):
89107
"""Translate the given string to the provided language.
@@ -106,6 +124,9 @@ def translate(
106124
if params is None:
107125
params = {}
108126

127+
if language_code is None:
128+
language_code = self.current_language_code
129+
109130
translation_template = self.get_translation(source_string,
110131
language_code,
111132
_context,

0 commit comments

Comments
 (0)