コード例 #1
0
ファイル: jinja2.py プロジェクト: patlx/betty
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
コード例 #2
0
ファイル: app.py プロジェクト: bartfeenstra/betty
    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()
コード例 #3
0
ファイル: __init__.py プロジェクト: rohithjayaraman/betty
 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
コード例 #4
0
ファイル: jinja2.py プロジェクト: ricardokirkner/betty
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
コード例 #5
0
ファイル: site.py プロジェクト: patlx/betty
    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
コード例 #6
0
    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))
コード例 #7
0
ファイル: test_locale.py プロジェクト: rohithjayaraman/betty
 def test(self, expected: Optional[str], preferred_locale: str,
          available_locales: List[str]):
     self.assertEqual(expected,
                      negotiate_locale(preferred_locale, available_locales))