Merge branch 'prv/po' into pub/po

master
intrigeri 2008-11-03 01:35:58 +01:00
commit 265e857f60
2 changed files with 65 additions and 52 deletions

View File

@ -134,6 +134,7 @@ sub refreshpot ($) { #{{{
# compulsory since this module prevents us from using the porefs option.
my %po_options = ('porefs' => 'none');
$doc->{TT}{po_out}=Locale::Po4a::Po->new(\%po_options);
$doc->{TT}{po_out}->set_charset('utf-8');
# do the actual work
$doc->parse;
$doc->writepo($potfile);
@ -203,8 +204,8 @@ sub needsbuild () { #{{{
IkiWiki::refresh();
IkiWiki::saveindex();
# refresh module's private variables
%filtered=undef;
%translations=undef;
undef %filtered;
undef %translations;
foreach my $page (keys %pagesources) {
istranslation($page);
}
@ -390,6 +391,7 @@ sub otherlanguages ($) { #{{{
sub pagetemplate (@) { #{{{
my %params=@_;
my $page=$params{page};
my $destpage=$params{destpage};
my $template=$params{template};
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 ($) { #{{{

View File

@ -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
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
====
@ -221,36 +237,53 @@ Security checks
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
live in different directories): say bla.fr.po has been updated in
repo2; pulling repo2 from repo1 seems to trigger a PO update, that
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
`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
------------------
### preview
preview does not work for PO files.
### automatic POT/PO update
Use the `change` hook instead of `needsbuild`?
### 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
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
-----------------------------
@ -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
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