From: "Matt Rosin" <[EMAIL PROTECTED]>
FWIW after all that such a module should allow keys stored in cookies
to supplement/overwrite the url. So instead of prepending lang code, I
could keep the same url but have a javascript language button set the
language.
I think that the pages with different content (in different languages)
should have a unique URL (for allowing the search engines to index all the
pages).
I first made an application in a single language then I needed to make it
multilanguage, and the most easy way I found was to add the language ID in
the query string, like: ?lang=FR.
The app uses Catalyst::Plugin::I18N. If the request doesn't contain any lang
variable and any lang cookie, it gets the languages prefered by the browser
and displays the page in the most apropriate language.
If the request contains the lang cookie, the app displays the pages using
that language.
If the request contains the lang variable, it also displays the page using
that language.
The links which should be used for changing the language send a lang
variable, and a "cook" variable. When the app receives both of these
variables, it displays the site in the specified language, and it also sets
a cookie with that language, and the next time the visitor will visit the
site, he will see the page displayed in the previously chosen language. This
won't happen if this wasn't his choice, but only a browser preference.
For doing this I use the code I put below. I put it in the Root.pm, in the
auto subroutine, so it is executed for all the other controllers and it sets
the lang var in the stash for using it later in those controllers if needed
(for sending emails in the chosen language, for example).
Of course, after doing this, I also needed to modify some templates and
controllers in which I hard-coded URLs because I needed to insert lang=[%
lang %].
HTH
Octavian
Here is the code I use:
my $lang = $c->req->param('lang');
my $cook = $c->req->param('cook');
if ($lang and $cook) {
#set cookie
$c->res->cookies->{lang} = {value => $lang, domain =>
$c->config->{cookie_domain}, path => '/', expires => '+1y'};
$c->languages([$lang]);
}
elsif ($lang) {
$c->languages([$lang]);
}
elsif ($c->req->cookies->{lang}) {
$lang = $c->req->cookies->{lang}->value;
$c->languages([$lang]);
}
else {
#read the browser prefered languages
my @accept_language = split /,/, $c->req->header('Accept-Language');
my @langs;
foreach(@accept_language) {
s/;.*$//;
s/-.*$//;
push (@langs, $_);
}
$c->languages([EMAIL PROTECTED]);
$lang = $c->language; #the chosen language
}
$c->stash->{lang} = $lang;
_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/