Merge branch 'prv/po' into pub/po
commit
265e857f60
|
@ -134,6 +134,7 @@ sub refreshpot ($) { #{{{
|
||||||
# compulsory since this module prevents us from using the porefs option.
|
# compulsory since this module prevents us from using the porefs option.
|
||||||
my %po_options = ('porefs' => 'none');
|
my %po_options = ('porefs' => 'none');
|
||||||
$doc->{TT}{po_out}=Locale::Po4a::Po->new(\%po_options);
|
$doc->{TT}{po_out}=Locale::Po4a::Po->new(\%po_options);
|
||||||
|
$doc->{TT}{po_out}->set_charset('utf-8');
|
||||||
# do the actual work
|
# do the actual work
|
||||||
$doc->parse;
|
$doc->parse;
|
||||||
$doc->writepo($potfile);
|
$doc->writepo($potfile);
|
||||||
|
@ -203,8 +204,8 @@ sub needsbuild () { #{{{
|
||||||
IkiWiki::refresh();
|
IkiWiki::refresh();
|
||||||
IkiWiki::saveindex();
|
IkiWiki::saveindex();
|
||||||
# refresh module's private variables
|
# refresh module's private variables
|
||||||
%filtered=undef;
|
undef %filtered;
|
||||||
%translations=undef;
|
undef %translations;
|
||||||
foreach my $page (keys %pagesources) {
|
foreach my $page (keys %pagesources) {
|
||||||
istranslation($page);
|
istranslation($page);
|
||||||
}
|
}
|
||||||
|
@ -390,6 +391,7 @@ sub otherlanguages ($) { #{{{
|
||||||
sub pagetemplate (@) { #{{{
|
sub pagetemplate (@) { #{{{
|
||||||
my %params=@_;
|
my %params=@_;
|
||||||
my $page=$params{page};
|
my $page=$params{page};
|
||||||
|
my $destpage=$params{destpage};
|
||||||
my $template=$params{template};
|
my $template=$params{template};
|
||||||
|
|
||||||
if (istranslation($page) && $template->query(name => "percenttranslated")) {
|
if (istranslation($page) && $template->query(name => "percenttranslated")) {
|
||||||
|
@ -416,6 +418,24 @@ sub pagetemplate (@) { #{{{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# Rely on IkiWiki::Render's genpage() to decide wether
|
||||||
|
# a discussion link should appear on $page; this is not
|
||||||
|
# totally accurate, though: some broken links may be generated
|
||||||
|
# when cgiurl is disabled.
|
||||||
|
# This compromise avoids some code duplication, and will probably
|
||||||
|
# prevent future breakage when ikiwiki internals change.
|
||||||
|
# Known limitations are preferred to future random bugs.
|
||||||
|
if ($template->param('discussionlink') && istranslation($page)) {
|
||||||
|
my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
|
||||||
|
$template->param('discussionlink' => htmllink(
|
||||||
|
$page,
|
||||||
|
$destpage,
|
||||||
|
$masterpage . '/' . gettext("Discussion"),
|
||||||
|
noimageinline => 1,
|
||||||
|
forcesubpage => 0,
|
||||||
|
linktext => gettext("Discussion"),
|
||||||
|
));
|
||||||
|
}
|
||||||
} # }}}
|
} # }}}
|
||||||
|
|
||||||
sub istranslatable ($) { #{{{
|
sub istranslatable ($) { #{{{
|
||||||
|
|
|
@ -196,6 +196,22 @@ Also, when the plugin has just been enabled, or when a page has just
|
||||||
been declared as being translatable, the needed POT and PO files are
|
been declared as being translatable, the needed POT and PO files are
|
||||||
created, and the PO files are checked into version control.
|
created, and the PO files are checked into version control.
|
||||||
|
|
||||||
|
Discussion pages
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Discussion should happen in the language in which the pages are written for
|
||||||
|
real, *i.e.* the "master" one. If discussion pages are enabled, "slave" pages
|
||||||
|
therefore link to the "master" page's discussion page.
|
||||||
|
|
||||||
|
Translating
|
||||||
|
-----------
|
||||||
|
|
||||||
|
One can edit the PO files using ikiwiki's CGI (a message-by-message interface
|
||||||
|
could also be implemented at some point).
|
||||||
|
|
||||||
|
If [[tips/untrusted_git_push]] is setup, one can edit the PO files in her
|
||||||
|
preferred `$EDITOR`, without needing to be online.
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
====
|
====
|
||||||
|
|
||||||
|
@ -221,36 +237,53 @@ Security checks
|
||||||
gettext/po4a rough corners
|
gettext/po4a rough corners
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
- new translations created in the web interface must get proper charset/encoding
|
|
||||||
gettext metadata, else the next automatic PO update removes any non-ascii
|
|
||||||
chars; possible solution: put such metadata into the Pot file, and let it
|
|
||||||
propagate
|
|
||||||
- fix the duplicated PO header mysterious bug
|
|
||||||
- fix the "duplicate message definition" error when updating a PO
|
|
||||||
file; do PO files need normalizing? (may be a side effect of
|
|
||||||
previous bug)
|
|
||||||
- fix infinite loop when synchronizing two ikiwiki (when checkouts
|
- fix infinite loop when synchronizing two ikiwiki (when checkouts
|
||||||
live in different directories): say bla.fr.po has been updated in
|
live in different directories): say bla.fr.po has been updated in
|
||||||
repo2; pulling repo2 from repo1 seems to trigger a PO update, that
|
repo2; pulling repo2 from repo1 seems to trigger a PO update, that
|
||||||
changes bla.fr.po in repo1; then pushing repo1 to repo2 triggers
|
changes bla.fr.po in repo1; then pushing repo1 to repo2 triggers
|
||||||
a PO update, that changes bla.fr.po in repo2; etc.; fixed in
|
a PO update, that changes bla.fr.po in repo2; etc.; fixed in
|
||||||
`629968fc89bced6727981c0a1138072631751fee` ?
|
`629968fc89bced6727981c0a1138072631751fee`?
|
||||||
|
- new translations created in the web interface must get proper charset/encoding
|
||||||
|
gettext metadata, else the next automatic PO update removes any non-ascii
|
||||||
|
chars; possible solution: put such metadata into the Pot file, and let it
|
||||||
|
propagate; should be fixed in `773de05a7a1ee68d2bed173367cf5e716884945a`, time
|
||||||
|
will tell.
|
||||||
|
|
||||||
Misc. improvements
|
Misc. improvements
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
### preview
|
||||||
|
|
||||||
|
preview does not work for PO files.
|
||||||
|
|
||||||
### automatic POT/PO update
|
### automatic POT/PO update
|
||||||
|
|
||||||
Use the `change` hook instead of `needsbuild`?
|
Use the `change` hook instead of `needsbuild`?
|
||||||
|
|
||||||
### page titles
|
### page titles
|
||||||
|
|
||||||
Use nice page titles from meta plugin in links, as inline already does.
|
Use nice page titles from meta plugin in links, as inline already does. This is
|
||||||
|
actually a duplicate for
|
||||||
|
[[bugs/pagetitle_function_does_not_respect_meta_titles]], which might be fixed
|
||||||
|
by something like [[todo/using_meta_titles_for_parentlinks]].
|
||||||
|
|
||||||
### websetup
|
### websetup
|
||||||
|
|
||||||
Which configuration settings are safe enough for websetup?
|
Which configuration settings are safe enough for websetup?
|
||||||
|
|
||||||
|
### parentlinks
|
||||||
|
|
||||||
|
When the wiki home page is translatable, the parentlinks plugin sets
|
||||||
|
`./index.html` as its translations' single parent link. Ideally, the home page's
|
||||||
|
translations should get no parent link at all, just like the version written in
|
||||||
|
the master language.
|
||||||
|
|
||||||
|
### backlinks
|
||||||
|
|
||||||
|
If a given translatable `sourcepage.mdwn` links to \[[destpage]],
|
||||||
|
`sourcepage.LL.po` also link to \[[destpage]], and the latter has the master
|
||||||
|
page *and* all its translations listed in the backlinks.
|
||||||
|
|
||||||
Translation quality assurance
|
Translation quality assurance
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
@ -262,43 +295,3 @@ A new `cansave` type of hook would be needed to implement this.
|
||||||
|
|
||||||
Note: committing to the underlying repository is a way to bypass
|
Note: committing to the underlying repository is a way to bypass
|
||||||
this check.
|
this check.
|
||||||
|
|
||||||
Translating online
|
|
||||||
------------------
|
|
||||||
|
|
||||||
As PO is a wiki page type, we already have an online PO editor, that
|
|
||||||
is ikiwiki's CGI.
|
|
||||||
|
|
||||||
**FIXME** preview does not work for PO files.
|
|
||||||
|
|
||||||
A message-by-message interface could also be implemented at some
|
|
||||||
point; a nice way to do offline translation work (without VCS access)
|
|
||||||
still has to be offered, though.
|
|
||||||
|
|
||||||
Translating offline without VCS access
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
The following workflow should be made possible for translators without
|
|
||||||
VCS access who need to edit the PO files in another editor than a web
|
|
||||||
browser:
|
|
||||||
|
|
||||||
- download the page's PO file
|
|
||||||
- use any PO editor to update the translation
|
|
||||||
- upload the updated PO file
|
|
||||||
|
|
||||||
Implementation note: a generic mechanism to upload a page's source is
|
|
||||||
needed: it's only an alternative way to allow saving a the modified
|
|
||||||
page's source with the CGI.
|
|
||||||
|
|
||||||
### Short-term workflow
|
|
||||||
|
|
||||||
A possible workaround is:
|
|
||||||
|
|
||||||
- pretend to edit the PO file online
|
|
||||||
- copy the PO file content from the textarea
|
|
||||||
- cancel the edit
|
|
||||||
- paste the content into a local file.
|
|
||||||
- edit the local file in any PO editor
|
|
||||||
- pretend to edit the PO file online
|
|
||||||
- paste the modified local file's content into the edit textarea
|
|
||||||
- save
|
|
||||||
|
|
Loading…
Reference in New Issue