make docfield translatable

This commit is contained in:
Nozomu Kaneko
2012-12-18 06:08:25 +09:00
parent 56ad448526
commit a1e9f2d675
5 changed files with 135 additions and 4 deletions

View File

@@ -67,7 +67,9 @@ class Field(object):
fieldname += nodes.Text(' ')
fieldname += self.make_xref(self.rolename, domain,
fieldarg, nodes.Text)
fieldbody = nodes.field_body('', nodes.paragraph('', '', *content))
par = nodes.paragraph()
par += content
fieldbody = nodes.field_body('', par)
return nodes.field('', fieldname, fieldbody)
@@ -255,6 +257,11 @@ class DocFieldTransformer(object):
[nodes.Text(argtype)]
fieldarg = argname
translatable_content = addnodes.translatable(fieldbody.rawsource)
translatable_content.source = fieldbody.parent.source
translatable_content.line = fieldbody.parent.line
translatable_content += content
# grouped entries need to be collected in one entry, while others
# get one entry per field
if typedesc.is_grouped:
@@ -264,10 +271,11 @@ class DocFieldTransformer(object):
groupindices[typename] = len(entries)
group = [typedesc, []]
entries.append(group)
group[1].append(typedesc.make_entry(fieldarg, content))
entry = typedesc.make_entry(fieldarg, translatable_content)
group[1].append(entry)
else:
entries.append([typedesc,
typedesc.make_entry(fieldarg, content)])
entry = typedesc.make_entry(fieldarg, translatable_content)
entries.append([typedesc, entry])
# step 2: all entries are collected, construct the new field list
new_list = nodes.field_list()

View File

@@ -0,0 +1,39 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2010, Georg Brandl & Team
# This file is distributed under the same license as the Sphinx <Tests> package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Sphinx <Tests> 0.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-16 14:11\n"
"PO-Revision-Date: 2012-12-18 06:14+0900\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 "i18n with docfields"
msgstr "I18N WITH DOCFIELDS"
msgid "description of parameter param"
msgstr "DESCRIPTION OF PARAMETER param"
msgid "description of parameter foo"
msgstr "DESCRIPTION OF PARAMETER foo"
msgid "description of parameter bar"
msgstr "DESCRIPTION OF PARAMETER bar"
msgid "if the values are not valid"
msgstr "IF THE VALUES ARE NOT VALID"
msgid "if the values are out of range"
msgstr "IF THE VALUES ARE OUT OF RANGE"
msgid "a new :class:`Cls3` instance"
msgstr "A NEW :class:`Cls3` INSTANCE"

View File

@@ -0,0 +1,46 @@
:tocdepth: 2
i18n with docfields
===================
.. single TypedField
.. class:: Cls1
:noindex:
:param param: description of parameter param
.. grouped TypedFields
.. class:: Cls2
:noindex:
:param foo: description of parameter foo
:param bar: description of parameter bar
.. single GroupedField
.. class:: Cls3(values)
:noindex:
:raises ValueError: if the values are out of range
.. grouped GroupedFields
.. class:: Cls4(values)
:noindex:
:raises TypeError: if the values are not valid
:raises ValueError: if the values are out of range
.. single Field
.. class:: Cls5
:noindex:
:returns: a new :class:`Cls3` instance
.. Field is never grouped

View File

@@ -6,3 +6,4 @@
external_links
refs_inconsistency
literalblock
docfields

View File

@@ -206,3 +206,40 @@ def test_i18n_literalblock_warning(app):
expected_warning_expr = u'.*/i18n/literalblock.txt:\\d+: ' \
u'WARNING: Literal block expected; none found.'
assert re.search(expected_warning_expr, warnings)
@with_app(buildername='text', cleanenv=True,
confoverrides={'language': 'xx', 'locale_dirs': ['.'],
'gettext_compact': False})
def test_i18n_docfields(app):
app.builder.build(['i18n/docfields'])
result = (app.outdir / 'i18n' / 'docfields.txt').text(encoding='utf-8')
expect = (u"\nI18N WITH DOCFIELDS"
u"\n*******************\n"
u"\nclass class Cls1\n"
u"\n Parameters:"
u"\n **param** -- DESCRIPTION OF PARAMETER param\n"
u"\nclass class Cls2\n"
u"\n Parameters:"
u"\n * **foo** -- DESCRIPTION OF PARAMETER foo\n"
u"\n * **bar** -- DESCRIPTION OF PARAMETER bar\n"
u"\nclass class Cls3(values)\n"
u"\n Raises ValueError:"
u"\n IF THE VALUES ARE OUT OF RANGE\n"
u"\nclass class Cls4(values)\n"
u"\n Raises:"
u"\n * **TypeError** -- IF THE VALUES ARE NOT VALID\n"
u"\n * **ValueError** -- IF THE VALUES ARE OUT OF RANGE\n"
u"\nclass class Cls5\n"
u"\n Returns:"
u'\n A NEW "Cls3" INSTANCE\n')
assert result == expect
@with_app(buildername='html', cleanenv=True,
confoverrides={'language': 'xx', 'locale_dirs': ['.'],
'gettext_compact': False})
def test_i18n_docfields_html(app):
app.builder.build(['i18n/docfields'])
result = (app.outdir / 'i18n' / 'docfields.html').text(encoding='utf-8')
# expect no error by build