From 81d21a77143d0f258885f2a93283b9df21e3ca10 Mon Sep 17 00:00:00 2001 From: Nozomu Kaneko Date: Mon, 4 Feb 2013 09:03:34 +0900 Subject: [PATCH] make versionmodified translatable --- sphinx/directives/other.py | 10 +++++++- tests/roots/test-intl/contents.txt | 1 + tests/roots/test-intl/versionchange.po | 33 +++++++++++++++++++++++++ tests/roots/test-intl/versionchange.txt | 16 ++++++++++++ tests/test_intl.py | 33 +++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 tests/roots/test-intl/versionchange.po create mode 100644 tests/roots/test-intl/versionchange.txt diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index 50188ea41..e8955d165 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -194,12 +194,20 @@ class VersionChange(Directive): if len(self.arguments) == 2: inodes, messages = self.state.inline_text(self.arguments[1], self.lineno+1) - node.append(nodes.paragraph('', '', *inodes)) + para = nodes.paragraph(self.arguments[1], '', *inodes) + set_source_info(self, para) + node.append(para) else: messages = [] if self.content: self.state.nested_parse(self.content, self.content_offset, node) if len(node): + if isinstance(node[0], nodes.paragraph) and node[0].rawsource: + content = nodes.inline(node[0].rawsource, translatable=True) + content.source = node[0].source + content.line = node[0].line + content += node[0].children + node[0].replace_self(nodes.paragraph('', '', content)) node[0].insert(0, nodes.inline('', '%s: ' % text)) else: para = nodes.paragraph('', '', nodes.inline('', '%s.' % text)) diff --git a/tests/roots/test-intl/contents.txt b/tests/roots/test-intl/contents.txt index a3c0e3549..b08fc3617 100644 --- a/tests/roots/test-intl/contents.txt +++ b/tests/roots/test-intl/contents.txt @@ -19,4 +19,5 @@ CONTENTS role_xref glossary_terms glossary_terms_inconsistency + versionchange docfields diff --git a/tests/roots/test-intl/versionchange.po b/tests/roots/test-intl/versionchange.po new file mode 100644 index 000000000..911d3d9f4 --- /dev/null +++ b/tests/roots/test-intl/versionchange.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2010, Georg Brandl & Team +# This file is distributed under the same license as the Sphinx package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sphinx 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-12-15 03:17\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "i18n with versionchange" +msgstr "I18N WITH VERSIONCHANGE" + +msgid "This is the *first* paragraph of deprecated." +msgstr "THIS IS THE *FIRST* PARAGRAPH OF DEPRECATED." + +msgid "This is the *second* paragraph of deprecated." +msgstr "THIS IS THE *SECOND* PARAGRAPH OF DEPRECATED." + +msgid "This is the *first* paragraph of versionadded." +msgstr "THIS IS THE *FIRST* PARAGRAPH OF VERSIONADDED." + +msgid "This is the *first* paragraph of versionchanged." +msgstr "THIS IS THE *FIRST* PARAGRAPH OF VERSIONCHANGED." + diff --git a/tests/roots/test-intl/versionchange.txt b/tests/roots/test-intl/versionchange.txt new file mode 100644 index 000000000..4c57e14e3 --- /dev/null +++ b/tests/roots/test-intl/versionchange.txt @@ -0,0 +1,16 @@ +:tocdepth: 2 + +i18n with versionchange +============================ + +.. deprecated:: 1.0 + This is the *first* paragraph of deprecated. + + This is the *second* paragraph of deprecated. + +.. versionadded:: 1.0 + This is the *first* paragraph of versionadded. + +.. versionchanged:: 1.0 + + This is the *first* paragraph of versionchanged. diff --git a/tests/test_intl.py b/tests/test_intl.py index 77b5a5616..4ae430ca8 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -389,6 +389,39 @@ def test_i18n_index_entries(app): assert re.search(expr, result, re.M) +@with_intl_app(buildername='html', cleanenv=True) +def test_versionchange(app): + app.builder.build(['versionchange']) + result = (app.outdir / 'versionchange.html').text(encoding='utf-8') + + def get_content(result, name): + matched = re.search(r'
\n*(.*?)
' % name, + result, re.DOTALL) + if matched: + return matched.group(1) + else: + return '' + + expect1 = ( + u"""

Deprecated since version 1.0: """ + u"""THIS IS THE FIRST PARAGRAPH OF DEPRECATED.

\n""" + u"""

THIS IS THE SECOND PARAGRAPH OF DEPRECATED.

\n""") + matched_content = get_content(result, "deprecated") + assert expect1 == matched_content + + expect2 = ( + u"""

New in version 1.0: """ + u"""THIS IS THE FIRST PARAGRAPH OF VERSIONADDED.

\n""") + matched_content = get_content(result, "versionadded") + assert expect2 == matched_content + + expect3 = ( + u"""

Changed in version 1.0: """ + u"""THIS IS THE FIRST PARAGRAPH OF VERSIONCHANGED.

\n""") + matched_content = get_content(result, "versionchanged") + assert expect3 == matched_content + + @with_intl_app(buildername='text', cleanenv=True) def test_i18n_docfields(app): app.builder.build(['docfields'])