ikiwiki/doc/todo/language_definition_for_the...

83 lines
3.3 KiB
Plaintext
Raw Normal View History

Here is a patch for the [[plugins/meta]] plugin. It adds the possibility to define the language
2007-08-06 00:47:59 +02:00
used for a page, with \[[meta lang="ja"]]
It doesn't insert the langage information in the xhtml meta elements, but defines a LANG
variable to use in the templates, for example with
<html xmlns="http://www.w3.org/1999/xhtml"
lang="<TMPL_IF NAME="LANG"><TMPL_VAR LANG><TMPL_ELSE>fr</TMPL_IF>"
xml:lang="<TMPL_IF NAME="LANG"><TMPL_VAR LANG><TMPL_ELSE>fr</TMPL_IF>">
This way also allows to define a language for a subset of the final page, with custom
templates and inclusion.
This may be useful for sites with a few pages in different languages, but no full i18n.
2007-08-06 00:02:41 +02:00
> Looks good, but the need to modify the template and include a default
> language in it is a bit problimatic, I think. --[[Joey]]
2007-08-06 00:12:59 +02:00
>> --lang=XX could be a setup option, with a default value, then the template would be
2007-08-06 00:16:17 +02:00
<html xmlns="http://www.w3.org/1999/xhtml" lang="<TMPL_VAR LANG>" xml:lang="<TMPL_VAR LANG>">
2007-08-06 00:18:12 +02:00
>>> Yes, that seems reasonable. I guess there's no problem with defaulting
>>> to en if it can be overridden in the setup. --[[Joey]]
2007-08-06 00:12:59 +02:00
>>>> Yes, english default makes sense. I guess we should use the `$config{lang}`,
>>>> defined from the setup file or command-line options to define the default language
>>>> (`$config{lang}` defaults to `en` which is fine) if the html pages, and override
>>>> it from the `meta` directive.
>>>> — [[NicolasLimare]]
2007-08-12 00:17:41 +02:00
>>>>> ikiwiki already has a $config{locale}, which is a full locale (ie,
>>>>> "en_US.UTF-8". This just needs to be parsed for the lang. --[[Joey]]
2007-08-16 21:41:52 +02:00
>>>>>> My mistake, I meant $config{locale} --[[NicolasLimare]]
2007-08-26 20:26:47 +02:00
> So the patch below could be changed to parse `$config{locale}` for the
> language, and pass it if no specific lang was set for the page. The only
> problem with that would be that this is all done inside the meta plugin,
> so if that plugin were disabled, the lang would be empty. To avoid that,
> I guess that the template needs to look like:
<html xmlns="http://www.w3.org/1999/xhtml"
<TMPL_IF NAME="LANG">lang="<TMPL_VAR LANG>" xml:lang="<TMPL_VAR LANG>"</TMPL_IF>>
> Now it just needs to be finished up.. --[[Joey]]
<pre>
--- meta.orig.pm 2007-07-27 00:19:51.000000000 +0200
+++ meta.pm 2007-08-05 22:37:40.000000000 +0200
@@ -11,6 +11,7 @@
my %permalink;
my %author;
my %authorurl;
+my %lang;
sub import { #{{{
hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1);
@@ -100,6 +101,11 @@
$meta{$page}.='<link href="'.encode_entities($value).
"\" rel=\"openid.delegate\" />\n";
}
+ elsif ($key eq 'lang') {
+ if ($value =~ /^[A-Za-z]{2}$/) {
+ $lang{$page}=$value;
+ }
+ }
else {
$meta{$page}.=scrub("<meta name=\"".encode_entities($key).
"\" content=\"".encode_entities($value)."\" />\n");
@@ -131,6 +137,8 @@
if exists $author{$page} && $template->query(name => "author");
$template->param(authorurl => $authorurl{$page})
if exists $authorurl{$page} && $template->query(name => "authorurl");
+ $template->param(lang => $lang{$page})
+ if exists $lang{$page} && $template->query(name => "lang");
} # }}}
</pre>
2007-08-21 06:30:39 +02:00
[[tag wishlist patch plugins/meta translation]]