def _filter_select_localizeds( context: Context, localizeds: Iterable[Localized]) -> Iterable[Localized]: locale = resolve_or_missing(context, 'locale') for localized in localizeds: if negotiate_locale(locale, [localized.locale]) is not None: yield localized
async def with_locale(self, locale: str) -> App: """ Temporarily change this application's locale and the global gettext translations. """ locale = negotiate_locale(locale, [ locale_configuration.locale for locale_configuration in self.configuration.locales ]) if locale is None: raise ValueError('Locale "%s" is not enabled.' % locale) previous_locale = self._locale if locale == previous_locale: yield self return await self._wait_for_threads() self._locale = locale with Translations(self.translations[locale]): self.react.getattr('locale').react.trigger() yield self await self._wait_for_threads() self._locale = previous_locale self.react.getattr('locale').react.trigger()
async def _filter_wikipedia_link(self, locale: str, link: Link) -> Optional[Entry]: try: entry_language, entry_name = parse_url(link.url) except NotAnEntryError: return if negotiate_locale(locale, [entry_language]) is None: return try: return await self._retriever.get_entry(entry_language, entry_name) except RetrievalError: return
def _filter_select_localizeds( context: Context, localizeds: Iterable[Localized], include_unspecified: bool = False) -> Iterable[Localized]: locale = resolve_or_missing(context, 'locale') for localized in localizeds: if include_unspecified and localized.locale in { None, 'mis', 'mul', 'und', 'zxx' }: yield localized if localized.locale is not None and negotiate_locale( locale, [localized.locale]) is not None: yield localized
def with_locale(self, locale: str) -> 'Site': locale = negotiate_locale(locale, list(self.configuration.locales.keys())) if locale is None: raise ValueError('Locale "%s" is not enabled.' % locale) if locale == self.locale: return self site = copy(self) site._locale = locale # Clear all locale-dependent lazy-loaded attributes. site._jinja2_environment = None site._renderer = None return site
async def _populate_entity(self, entity: Entity, locales: Set[str]) -> None: if not isinstance(entity, HasLinks): return entry_links = set() for link in entity.links: try: entry_language, entry_name = _parse_url(link.url) entry_links.add((entry_language, entry_name)) except NotAnEntryError: continue entry = None if link.label is None: with suppress(RetrievalError): entry = await self._retriever.get_entry( entry_language, entry_name) await self.populate_link(link, entry_language, entry) for entry_language, entry_name in list(entry_links): entry_translations = await self._retriever.get_translations( entry_language, entry_name) if len(entry_translations) == 0: continue entry_languages = list(entry_translations.keys()) for locale in locales.difference({entry_language}): added_entry_language = negotiate_locale( locale, entry_languages) if added_entry_language is None: continue added_entry_name = entry_translations[added_entry_language] if (added_entry_language, added_entry_name) in entry_links: continue try: added_entry = await self._retriever.get_entry( added_entry_language, added_entry_name) except RetrievalError: continue added_link = Link(added_entry.url) await self.populate_link(added_link, added_entry_language, added_entry) entity.links.add(added_link) entry_links.add((added_entry_language, added_entry_name))
def test(self, expected: Optional[str], preferred_locale: str, available_locales: List[str]): self.assertEqual(expected, negotiate_locale(preferred_locale, available_locales))