Esempio n. 1
0
    def _init_i18n(self):
        # type: () -> None
        """Load translated strings from the configured localedirs if enabled in
        the configuration.
        """
        if self.config.language is None:
            self.translator, has_translation = locale.init([], None)
        else:
            logger.info(bold(
                __('loading translations [%s]... ') % self.config.language),
                        nonl=True)

            # compile mo files if sphinx.po file in user locale directories are updated
            repo = CatalogRepository(self.srcdir, self.config.locale_dirs,
                                     self.config.language,
                                     self.config.source_encoding)
            for catalog in repo.catalogs:
                if catalog.domain == 'sphinx' and catalog.is_outdated():
                    catalog.write_mo(self.config.language)

            locale_dirs = [None, path.join(package_dir, 'locale')] + list(
                repo.locale_dirs)
            self.translator, has_translation = locale.init(
                locale_dirs, self.config.language)
            if has_translation or self.config.language == 'en':
                # "en" never needs to be translated
                logger.info(__('done'))
            else:
                logger.info(__('not available for built-in messages'))
Esempio n. 2
0
 def compile_all_catalogs(self):
     # type: () -> None
     repo = CatalogRepository(self.srcdir, self.config.locale_dirs,
                              self.config.language,
                              self.config.source_encoding)
     message = __('all of %d po files') % len(list(repo.catalogs))
     self.compile_catalogs(set(repo.catalogs), message)
Esempio n. 3
0
    def find_files(self, config: Config, builder: "Builder") -> None:
        """Find all source files in the source dir and put them in
        self.found_docs.
        """
        try:
            exclude_paths = (self.config.exclude_patterns +
                             self.config.templates_path +
                             builder.get_asset_paths())
            self.project.discover(exclude_paths)

            # Current implementation is applying translated messages in the reading
            # phase.Therefore, in order to apply the updated message catalog, it is
            # necessary to re-process from the reading phase. Here, if dependency
            # is set for the doc source and the mo file, it is processed again from
            # the reading phase when mo is updated. In the future, we would like to
            # move i18n process into the writing phase, and remove these lines.
            if builder.use_message_catalog:
                # add catalog mo file dependency
                repo = CatalogRepository(self.srcdir, self.config.locale_dirs,
                                         self.config.language,
                                         self.config.source_encoding)
                for docname in self.found_docs:
                    domain = docname_to_domain(docname,
                                               self.config.gettext_compact)
                    for catalog in repo.catalogs:
                        if catalog.domain == domain:
                            self.dependencies[docname].add(catalog.mo_path)
        except OSError as exc:
            raise DocumentError(
                __('Failed to scan documents in %s: %r') % (self.srcdir, exc))
Esempio n. 4
0
 def compile_update_catalogs(self):
     # type: () -> None
     repo = CatalogRepository(self.srcdir, self.config.locale_dirs,
                              self.config.language, self.config.source_encoding)
     catalogs = {c for c in repo.catalogs if c.is_outdated()}
     message = __('targets for %d po files that are out of date') % len(catalogs)
     self.compile_catalogs(catalogs, message)
Esempio n. 5
0
    def compile_specific_catalogs(self, specified_files: List[str]) -> None:
        def to_domain(fpath: str) -> Optional[str]:
            docname = self.env.path2doc(path.abspath(fpath))
            if docname:
                return docname_to_domain(docname, self.config.gettext_compact)
            else:
                return None

        catalogs = set()
        domains = set(map(to_domain, specified_files))
        repo = CatalogRepository(self.srcdir, self.config.locale_dirs,
                                 self.config.language, self.config.source_encoding)
        for catalog in repo.catalogs:
            if catalog.domain in domains and catalog.is_outdated():
                catalogs.add(catalog)
        message = __('targets for %d po files that are specified') % len(catalogs)
        self.compile_catalogs(catalogs, message)