- From: Chris Lamb <lamby@debian.org>
- Date: Thu, 28 Jun 2018 19:30:15 +0100
- Subject: [PATCH] Re-use translated content instead of skipping if previously
- translated.
-
- This fixes an issue where an initial `inline` directive would be translated
- correctly, but subsequent inlines of the same would result in the raw
- contents of the `.po` file being inserted into the page instead.
-
- For example, given a `index.mdwn` containing:
-
- \[[!inline pages="inline" raw="yes"]]
- \[[!inline pages="inline" raw="yes"]]
-
- .. and an `index.de.po` of:
-
- msgid "\[[!inline pages=\"inline\" raw=\"yes\"]]\n"
- msgstr "\[[!inline pages=\"inline.de\" raw=\"yes\"]]\n"
-
- .. together with an `inline.mdwn` of:
-
- This is inlined content.
-
- .. and an `inline.de.po` of:
-
- msgid "This is inlined content."
- msgstr "This is German inlined content."
-
- .. would result in the following translation:
-
- This is the inlined content.
- # SOME DESCRIPTIVE TITLE
- # Copyright (C) YEAR Free Software Foundation, Inc.
- # This file is distributed under the same license as the PACKAGE package.
- # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-
- .. instead of, of course:
-
- This is the inlined content.
- This is the inlined content.
- ---
- IkiWiki/Plugin/po.pm | 15 +++++++++------
- 1 file changed, 9 insertions(+), 6 deletions(-)
-
- diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
- index 418e8e58a..ecd1f5499 100644
- --- a/IkiWiki/Plugin/po.pm
- +++ b/IkiWiki/Plugin/po.pm
- @@ -303,9 +303,12 @@ sub filter (@) {
- my $page = $params{page};
- my $destpage = $params{destpage};
- my $content = $params{content};
- - if (istranslation($page) && ! alreadyfiltered($page, $destpage)) {
- - $content = po_to_markup($page, $content);
- - setalreadyfiltered($page, $destpage);
- + if (istranslation($page)) {
- + if (!defined(alreadyfiltered($page, $destpage))) {
- + $content = po_to_markup($page, $content);
- + setalreadyfiltered($page, $destpage, $content);
- + }
- + $content = alreadyfiltered($page, $destpage);
- }
- return $content;
- }
- @@ -747,15 +750,15 @@ sub myisselflink ($$) {
- my $page=shift;
- my $destpage=shift;
-
- - return exists $filtered{$page}{$destpage}
- - && $filtered{$page}{$destpage} eq 1;
- + return $filtered{$page}{$destpage};
- }
-
- sub setalreadyfiltered($$) {
- my $page=shift;
- my $destpage=shift;
- + my $content=shift;
-
- - $filtered{$page}{$destpage}=1;
- + $filtered{$page}{$destpage}=$content;
- }
-
- sub unsetalreadyfiltered($$) {
- --
- 2.18.0
-
-[[!tag patch]]
-
-> Thank you Chris! I've reviewed the patch (with my "original author of the po plugin" hat on) and it looks good to me. I'm not 100% sure about `alreadyfiltered` being the best name for something that's not a predicated anymore but it's good enough. Then I wore my end-user hat and confirmed that with Chris' patch applied, the reproducer we had for this bug at Tails works fine. So IMO we're good to go and I recommend to apply this patch. Thanks in advance! -- [[intrigeri]]
+[[!meta redir="bugs/po:_second_or_subsequent_inline_of_translated_page_inlines_.po_file__44___not_translated_content"]]