"""
Provide localizable configuration.
"""
from contextlib import suppress
from typing import Self, cast, overload, final
from betty.assertion import assert_len_min
from betty.locale.localizable import (
ShorthandStaticTranslations,
Localizable,
StaticTranslationsLocalizable,
)
from betty.locale.localizable.assertion import assert_static_translations
from betty.locale.localizer import Localizer
from typing_extensions import override
from betty.config import Configuration
from betty.locale import UNDETERMINED_LOCALE
from betty.serde.dump import VoidableDump, Dump, minimize
from betty.typing import Void
[docs]
@final
class StaticTranslationsLocalizableConfiguration(Configuration, Localizable):
"""
Provide configuration for a :py:class:`betty.locale.Localizable`.
Read more at :doc:`multiple translations </usage/configuration/static-translations-localizable>`.
"""
_translations: dict[str, str]
[docs]
def __init__(
self,
translations: ShorthandStaticTranslations | None = None,
*,
minimum: int = 1,
):
"""
:param translations: Keys are locales, values are translations.
"""
super().__init__()
self._minimum = minimum
self._translations: dict[str, str]
if translations is not None:
self.set(translations)
else:
self._translations = {}
[docs]
@override
def dump(self) -> VoidableDump:
if not len(self._translations):
return Void
if len(self._translations) == 1:
with suppress(KeyError):
return self._translations[UNDETERMINED_LOCALE]
return minimize(
self._translations.copy() # type: ignore[arg-type]
)
[docs]
@final
class StaticTranslationsLocalizableConfigurationProperty:
"""
A property (similar to :py:func:`property`) that contains :py:class:`betty.locale.localizable.StaticTranslationsLocalizableConfiguration`.
"""