refs #1235: i18n: 'doctest-block' and 'raw' node can be translated if gettext_additional_targets has that string.

This commit is contained in:
shimizukawa 2015-02-22 15:36:43 +09:00
parent c53fa4b369
commit 0ad1c154c0
10 changed files with 109 additions and 2 deletions

View File

@ -23,8 +23,12 @@ Features added
nav-item-0, 1, 2...).
* New option `sphinx-quickstart --use-make-mode` for generating Makefile that
use sphinx-build make-mode.
* #1235: i18n: 'literal-block' node can be translated if 'literal-block'
is set to `gettext_additional_targets`.
* #1235: i18n: several node can be translated if it is set to
`gettext_additional_targets` in conf.py. Supported nodes are:
- 'literal-block'
- 'doctest-block'
- 'raw'
Bugs fixed
----------

View File

@ -495,6 +495,8 @@ documentation on :ref:`intl` for details.
:index: index terms
:literal-block: literal blocks: ``::`` and ``code-block``.
:doctest-block: doctest block
:raw: raw content
The default is ``[]``.

View File

@ -161,6 +161,8 @@ class CitationReferences(Transform):
TRANSLATABLE_NODES = {
'literal-block': nodes.literal_block,
'doctest-block': nodes.doctest_block,
'raw': nodes.raw,
}
class ExtraTranslatableNodes(Transform):
"""

View File

@ -75,6 +75,8 @@ IGNORED_NODES = (
)
LITERAL_TYPE_NODES = (
nodes.literal_block,
nodes.doctest_block,
nodes.raw,
)
def extract_messages(doctree):
"""Extract translatable messages from a document tree."""
@ -92,6 +94,8 @@ def extract_messages(doctree):
if isinstance(node, LITERAL_TYPE_NODES):
msg = node.rawsource
if not msg:
msg = node.astext()
else:
msg = node.rawsource.replace('\n', ' ').strip()

View File

@ -21,3 +21,4 @@ CONTENTS
glossary_terms_inconsistency
versionchange
docfields
raw

View File

@ -65,3 +65,22 @@ msgstr ""
"{\n"
" return 0;\n"
"}"
msgid "doctest blocks"
msgstr "DOCTEST-BLOCKS"
msgid ""
">>> import sys # sys importing\n"
">>> def main(): # define main function\n"
"... sys.stdout.write('hello') # call write method of stdout object\n"
">>>\n"
">>> if __name__ == '__main__': # if run this py file as python script\n"
"... main() # call main"
msgstr ""
">>> import sys # SYS IMPORTING\n"
">>> def main(): # DEFINE MAIN FUNCTION\n"
"... sys.stdout.write('hello') # CALL WRITE METHOD OF STDOUT OBJECT\n"
">>>\n"
">>> if __name__ == '__main__': # IF RUN THIS PY FILE AS PYTHON SCRIPT\n"
"... main() # CALL MAIN"

View File

@ -39,3 +39,16 @@ code blocks
return 0;
}
doctest blocks
==============
.. highlight:: python
>>> import sys # sys importing
>>> def main(): # define main function
... sys.stdout.write('hello') # call write method of stdout object
>>>
>>> if __name__ == '__main__': # if run this py file as python script
... main() # call main

View File

@ -0,0 +1,21 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2015, dev
# This file is distributed under the same license as the 1235 package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 1235 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-22 15:22+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "<iframe src=\"http://sphinx-doc.org\"></iframe>"
msgstr "<iframe src=\"HTTP://SPHINX-DOC.ORG\"></iframe>"

View File

@ -0,0 +1,8 @@
===
Raw
===
.. raw:: html
<iframe src="http://sphinx-doc.org"></iframe>

View File

@ -628,6 +628,7 @@ def test_xml_builder(app, status, warning):
def test_additional_targets_should_not_be_translated(app, status, warning):
app.builder.build_all()
## literalblock.txt
result = (app.outdir / 'literalblock.html').text(encoding='utf-8')
# title should be translated
@ -646,17 +647,35 @@ def test_additional_targets_should_not_be_translated(app, status, warning):
expected_expr = """<span class="cp">#include &lt;stdio.h&gt;</span>"""
yield assert_equal, len(re.findall(expected_expr, result)), 1, (expected_expr, result)
# doctest block should not be translated but be highlighted
expected_expr = (
"""<span class="gp">&gt;&gt;&gt; </span>"""
"""<span class="kn">import</span> <span class="nn">sys</span> """
"""<span class="c"># sys importing</span>""")
yield assert_equal, len(re.findall(expected_expr, result)), 1, (expected_expr, result)
## raw.txt
result = (app.outdir / 'raw.html').text(encoding='utf-8')
# raw block should not be translated
expected_expr = """<iframe src="http://sphinx-doc.org"></iframe></div>"""
yield assert_equal, len(re.findall(expected_expr, result)), 1, (expected_expr, result)
@gen_with_intl_app('html', freshenv=True,
confoverrides={
'gettext_additional_targets': [
'index',
'literal-block',
'doctest-block',
'raw',
],
})
def test_additional_targets_should_be_translated(app, status, warning):
app.builder.build_all()
## literalblock.txt
result = (app.outdir / 'literalblock.html').text(encoding='utf-8')
# title should be translated
@ -675,3 +694,17 @@ def test_additional_targets_should_be_translated(app, status, warning):
expected_expr = """<span class="cp">#include &lt;STDIO.H&gt;</span>"""
yield assert_equal, len(re.findall(expected_expr, result)), 1, (expected_expr, result)
# doctest block should not be translated but be highlighted
expected_expr = (
"""<span class="gp">&gt;&gt;&gt; </span>"""
"""<span class="kn">import</span> <span class="nn">sys</span> """
"""<span class="c"># SYS IMPORTING</span>""")
yield assert_equal, len(re.findall(expected_expr, result)), 1, (expected_expr, result)
## raw.txt
result = (app.outdir / 'raw.html').text(encoding='utf-8')
# raw block should be translated
expected_expr = """<iframe src="HTTP://SPHINX-DOC.ORG"></iframe></div>"""
yield assert_equal, len(re.findall(expected_expr, result)), 1, (expected_expr, result)