2007-08-05 22:53:34 +02:00
|
|
|
Here is a patch for the [[plugins/meta]] plugin. It adds the possibility to define the language
|
2008-07-21 13:45:54 +02:00
|
|
|
used for a page, with \[[!meta lang="ja"]]
|
2007-08-05 22:53:34 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
2007-08-10 20:16:31 +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-06 00:46:40 +02:00
|
|
|
|
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]]
|
|
|
|
|
2007-08-05 22:53:34 +02:00
|
|
|
<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;
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
sub import {
|
2007-08-05 22:53:34 +02:00
|
|
|
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");
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
}
|
2007-08-05 22:53:34 +02:00
|
|
|
</pre>
|
|
|
|
|
2007-11-03 16:56:08 +01:00
|
|
|
> Please resolve lang somewhere reusable rather than within meta plugin: It is certainly usable outside
|
|
|
|
> the scope of the meta plugin as well. --[[JonasSmedegaard]]
|
2007-08-05 22:53:34 +02:00
|
|
|
|
2009-07-18 14:08:13 +02:00
|
|
|
>> I don't see any problem with having this in meta? meta is on by default, and
|
|
|
|
>> other plugins are free to use it or even depend on it (e.g. inline does).
|
|
|
|
>>
|
|
|
|
>> My only comments on this patch beyond what Joey said are that the page
|
|
|
|
>> language could usefully go into `$pagestate{$page}{meta}{lang}` for other
|
|
|
|
>> plugins to be able to see it (is that what you meant?), and that
|
|
|
|
>> restricting to 2 characters is too restrictive (HTML 4.01 mentions
|
|
|
|
>> `en`, `en-US` and `i-navajo` as possible language codes).
|
|
|
|
>> This slightly complicates parsing the locale to get the default language:
|
|
|
|
>> it'll need `tr/_/-/` after the optional `.encoding` is removed.
|
|
|
|
>> --[[smcv]]
|
|
|
|
|
2009-07-19 21:13:47 +02:00
|
|
|
>>> Now that po has been merged, this patch should probably also be adapted
|
|
|
|
>>> so that the po plugin forces the meta::lang of every page to what po
|
2009-08-28 15:25:05 +02:00
|
|
|
>>> thinks it should be. --[[smcv]]
|
|
|
|
|
|
|
|
>>>> Agreed, users of the po plugin would greatly benefit from it.
|
|
|
|
>>>> Seems doable. --[[intrigeri]]
|
|
|
|
|
|
|
|
>>> Perhaps [[the_special_po_pagespecs|ikiwiki/pagespec/po]] should
|
|
|
|
>>> also work with meta-assigned languages? --[[smcv]]
|
|
|
|
|
|
|
|
>>>> Yes. But then, these special pagespecs should be moved outside of
|
|
|
|
>>>> [[plugins/po]], as they could be useful to anyone using the
|
|
|
|
>>>> currently discussed patch even when not using the po plugin.
|
|
|
|
>>>>
|
|
|
|
>>>> We could add these pagespecs to the core and make them use
|
|
|
|
>>>> a simple language-guessing system based on a new hook. Any plugin
|
|
|
|
>>>> that implements such a hook could decide whether it should
|
|
|
|
>>>> overrides the language guessed by another one, and optionally use
|
|
|
|
>>>> the `first`/`last` options (e.g. the po plugin will want to be
|
|
|
|
>>>> authoritative on the pages of type po, and will then use
|
|
|
|
>>>> `last`). --[[intrigeri]]
|
2009-07-19 21:13:47 +02:00
|
|
|
|
2008-07-21 13:31:33 +02:00
|
|
|
[[!tag wishlist patch plugins/meta translation]]
|