# $Id: __init__.py 9030 2022-03-05 23:28:32Z milde $ # Author: David Goodger <goodger@python.org> # Copyright: This module has been placed in the public domain. # Internationalization details are documented in # <https://docutils.sourceforge.io/docs/howto/i18n.html>. """ This package contains modules for language-dependent features of Docutils. """ __docformat__ = 'reStructuredText' from importlib import import_module from docutils.utils import normalize_language_tag class LanguageImporter: """Import language modules. When called with a BCP 47 language tag, instances return a module with localisations from `docutils.languages` or the PYTHONPATH. If there is no matching module, warn (if a `reporter` is passed) and fall back to English. """ packages = ('docutils.languages.', '') warn_msg = ('Language "%s" not supported: ' 'Docutils-generated text will be in English.') fallback = 'en' # TODO: use a dummy module returning empty strings?, configurable? def __init__(self): self.cache = {} def import_from_packages(self, name, reporter=None): """Try loading module `name` from `self.packages`.""" module = None for package in self.packages: try: module = import_module(package+name) self.check_content(module) except (ImportError, AttributeError): if reporter and module: reporter.info(f'{module} is no complete ' 'Docutils language module.') elif reporter: reporter.info(f'Module "{package+name}" not found.') continue break return module def check_content(self, module): """Check if we got a Docutils language module.""" if not (isinstance(module.labels, dict) and isinstance(module.bibliographic_fields, dict) and isinstance(module.author_separators, list)): raise ImportError def __call__(self, language_code, reporter=None): try: return self.cache[language_code] except KeyError: pass for tag in normalize_language_tag(language_code): tag = tag.replace('-', '_') # '-' not valid in module names module = self.import_from_packages(tag, reporter) if module is not None: break else: if reporter: reporter.warning(self.warn_msg % language_code) if self.fallback: module = self.import_from_packages(self.fallback) if reporter and (language_code != 'en'): reporter.info('Using %s for language "%s".' % (module, language_code)) self.cache[language_code] = module return module get_language = LanguageImporter()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
__init__.py | File | 2.85 KB | 0644 |
|
af.py | File | 1.79 KB | 0644 |
|
ar.py | File | 1.9 KB | 0644 |
|
ca.py | File | 1.87 KB | 0644 |
|
cs.py | File | 1.86 KB | 0644 |
|
da.py | File | 1.81 KB | 0644 |
|
de.py | File | 1.69 KB | 0644 |
|
en.py | File | 1.81 KB | 0644 |
|
eo.py | File | 1.89 KB | 0644 |
|
es.py | File | 1.86 KB | 0644 |
|
fa.py | File | 1.91 KB | 0644 |
|
fi.py | File | 1.92 KB | 0644 |
|
fr.py | File | 1.79 KB | 0644 |
|
gl.py | File | 1.94 KB | 0644 |
|
he.py | File | 2.63 KB | 0644 |
|
it.py | File | 1.77 KB | 0644 |
|
ja.py | File | 1.85 KB | 0644 |
|
ko.py | File | 1.79 KB | 0644 |
|
lt.py | File | 1.87 KB | 0644 |
|
lv.py | File | 1.81 KB | 0644 |
|
nl.py | File | 1.83 KB | 0644 |
|
pl.py | File | 1.82 KB | 0644 |
|
pt_br.py | File | 1.88 KB | 0644 |
|
ru.py | File | 2.02 KB | 0644 |
|
sk.py | File | 1.79 KB | 0644 |
|
sv.py | File | 1.82 KB | 0644 |
|
uk.py | File | 2.01 KB | 0644 |
|
zh_cn.py | File | 1.93 KB | 0644 |
|
zh_tw.py | File | 2.68 KB | 0644 |
|