mirror of
https://github.com/SectorLabs/django-localized-fields.git
synced 2025-04-25 11:42:54 +03:00
Add a language argument to LocalizedValue.translate(..)
This commit is contained in:
parent
e5dcc1b492
commit
7bf0311306
@ -102,17 +102,32 @@ class LocalizedValue(dict):
|
|||||||
for val in value:
|
for val in value:
|
||||||
self._interpret_value(val)
|
self._interpret_value(val)
|
||||||
|
|
||||||
def translate(self) -> Optional[str]:
|
def translate(self, language: Optional[str] = None) -> Optional[str]:
|
||||||
"""Gets the value in the current language or falls back to the next
|
"""Gets the value in the specified language (or active language).
|
||||||
language if there's no value in the current language."""
|
|
||||||
|
|
||||||
fallbacks = getattr(settings, "LOCALIZED_FIELDS_FALLBACKS", {})
|
Arguments:
|
||||||
|
language:
|
||||||
|
The language to get the value in. If not specified,
|
||||||
|
the currently active language is used.
|
||||||
|
|
||||||
language = translation.get_language() or settings.LANGUAGE_CODE
|
Returns:
|
||||||
languages = fallbacks.get(language, [settings.LANGUAGE_CODE])[:]
|
The value in the specified (or active) language. If no value
|
||||||
languages.insert(0, language)
|
is available in the specified language, the value is returned
|
||||||
|
in one of the fallback languages.
|
||||||
|
"""
|
||||||
|
|
||||||
for lang_code in languages:
|
target_language = (
|
||||||
|
language or translation.get_language() or settings.LANGUAGE_CODE
|
||||||
|
)
|
||||||
|
|
||||||
|
fallback_config = getattr(settings, "LOCALIZED_FIELDS_FALLBACKS", {})
|
||||||
|
|
||||||
|
target_languages = fallback_config.get(
|
||||||
|
target_language, [settings.LANGUAGE_CODE]
|
||||||
|
)
|
||||||
|
target_languages.insert(0, target_language)
|
||||||
|
|
||||||
|
for lang_code in target_languages:
|
||||||
value = self.get(lang_code)
|
value = self.get(lang_code)
|
||||||
if value:
|
if value:
|
||||||
return value or None
|
return value or None
|
||||||
|
@ -172,6 +172,18 @@ class LocalizedValueTestCase(TestCase):
|
|||||||
with translation.override("nl"):
|
with translation.override("nl"):
|
||||||
assert localized_value.translate() == "ro"
|
assert localized_value.translate() == "ro"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def test_translate_custom_language():
|
||||||
|
"""Tests whether the :see:LocalizedValue class's translate() ignores
|
||||||
|
the active language when one is specified explicitely."""
|
||||||
|
|
||||||
|
localized_value = LocalizedValue(
|
||||||
|
{settings.LANGUAGE_CODE: settings.LANGUAGE_CODE, "ro": "ro"}
|
||||||
|
)
|
||||||
|
|
||||||
|
with translation.override("en"):
|
||||||
|
assert localized_value.translate("ro") == "ro"
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def test_deconstruct():
|
def test_deconstruct():
|
||||||
"""Tests whether the :see:LocalizedValue class's :see:deconstruct
|
"""Tests whether the :see:LocalizedValue class's :see:deconstruct
|
||||||
|
Loading…
x
Reference in New Issue
Block a user