Skip to content

Commit

Permalink
Merge pull request #9828 from tk0miya/9618_gettext_allow_fuzzy_transl…
Browse files Browse the repository at this point in the history
…ations

Close #9618: i18n: Add gettext_allow_fuzzy_translations
  • Loading branch information
tk0miya authored Nov 9, 2021
2 parents 563936b + 203094b commit 1317eee
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ Features added
* #9691: C, added new info-field ``retval``
for :rst:dir:`c:function` and :rst:dir:`c:macro`.
* C++, added new info-field ``retval`` for :rst:dir:`cpp:function`.
* #9618: i18n: Add :confval:`gettext_allow_fuzzy_translations` to allow "fuzzy"
messages for translation
* #9672: More CSS classes on Python domain descriptions
* #9695: More CSS classes on Javascript domain descriptions
* #9683: Revert the removal of ``add_stylesheet()`` API. It will be kept until
Expand Down
7 changes: 7 additions & 0 deletions doc/usage/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -802,6 +802,13 @@ documentation on :ref:`intl` for details.
.. versionchanged:: 1.5
Use ``locales`` directory as a default value

.. confval:: gettext_allow_fuzzy_translations

If true, "fuzzy" messages in the message catalogs are used for translation.
The default is ``False``.

.. versionadded:: 4.3

.. confval:: gettext_compact

.. versionadded:: 1.1
Expand Down
3 changes: 2 additions & 1 deletion sphinx/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,8 @@ def _init_i18n(self) -> None:
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)
catalog.write_mo(self.config.language,
self.config.gettext_allow_fuzzy_translations)

locale_dirs: List[Optional[str]] = list(repo.locale_dirs)
locale_dirs += [None]
Expand Down
3 changes: 2 additions & 1 deletion sphinx/builders/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,8 @@ def cat2relpath(cat: CatalogInfo) -> str:
for catalog in status_iterator(catalogs, __('writing output... '), "darkgreen",
len(catalogs), self.app.verbosity,
stringify_func=cat2relpath):
catalog.write_mo(self.config.language)
catalog.write_mo(self.config.language,
self.config.gettext_allow_fuzzy_translations)

def compile_all_catalogs(self) -> None:
repo = CatalogRepository(self.srcdir, self.config.locale_dirs,
Expand Down
1 change: 1 addition & 0 deletions sphinx/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class Config:
'language': (None, 'env', [str]),
'locale_dirs': (['locales'], 'env', []),
'figure_language_filename': ('{root}.{language}{ext}', 'env', [str]),
'gettext_allow_fuzzy_translations': (False, 'gettext', []),

'master_doc': ('index', 'env', []),
'root_doc': (lambda config: config.master_doc, 'env', []),
Expand Down
4 changes: 2 additions & 2 deletions sphinx/util/i18n.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def is_outdated(self) -> bool:
not path.exists(self.mo_path) or
path.getmtime(self.mo_path) < path.getmtime(self.po_path))

def write_mo(self, locale: str) -> None:
def write_mo(self, locale: str, use_fuzzy: bool = False) -> None:
with open(self.po_path, encoding=self.charset) as file_po:
try:
po = read_po(file_po, locale)
Expand All @@ -69,7 +69,7 @@ def write_mo(self, locale: str) -> None:

with open(self.mo_path, 'wb') as file_mo:
try:
write_mo(file_mo, po)
write_mo(file_mo, po, use_fuzzy)
except Exception as exc:
logger.warning(__('writing error: %s, %s'), self.mo_path, exc)

Expand Down
38 changes: 38 additions & 0 deletions tests/test_intl.py
Original file line number Diff line number Diff line change
Expand Up @@ -1301,6 +1301,44 @@ def getwarning(warnings):
return strip_escseq(warnings.getvalue().replace(os.sep, '/'))


@pytest.mark.sphinx('html', testroot='basic',
srcdir='gettext_allow_fuzzy_translations',
confoverrides={
'language': 'de',
'gettext_allow_fuzzy_translations': True
})
def test_gettext_allow_fuzzy_translations(app):
locale_dir = app.srcdir / 'locales' / 'de' / 'LC_MESSAGES'
locale_dir.makedirs()
with (locale_dir / 'index.po').open('wb') as f:
catalog = Catalog()
catalog.add('features', 'FEATURES', flags=('fuzzy',))
pofile.write_po(f, catalog)

app.build()
content = (app.outdir / 'index.html').read_text()
assert 'FEATURES' in content


@pytest.mark.sphinx('html', testroot='basic',
srcdir='gettext_disallow_fuzzy_translations',
confoverrides={
'language': 'de',
'gettext_allow_fuzzy_translations': False
})
def test_gettext_disallow_fuzzy_translations(app):
locale_dir = app.srcdir / 'locales' / 'de' / 'LC_MESSAGES'
locale_dir.makedirs()
with (locale_dir / 'index.po').open('wb') as f:
catalog = Catalog()
catalog.add('features', 'FEATURES', flags=('fuzzy',))
pofile.write_po(f, catalog)

app.build()
content = (app.outdir / 'index.html').read_text()
assert 'FEATURES' not in content


@pytest.mark.sphinx('html', testroot='basic', confoverrides={'language': 'de'})
def test_customize_system_message(make_app, app_params, sphinx_test_tempdir):
try:
Expand Down

0 comments on commit 1317eee

Please sign in to comment.