summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2010-01-10 11:49:53 +0100
committerYorhel <git@yorhel.nl>2010-01-10 11:49:53 +0100
commit5e94bb07336d692ce8184a81ef4745367ec70c64 (patch)
tree312d7a001d73e18725f8fd30e3f266d48ab4a1a5 /util
parent2b7e95b01b33fbf5d289b063460a6e318e4f4c5a (diff)
L10N: Determine language from Accept-Language header
So that people with correctly configured browsers don't have to manually choose their language of choice with the language switcher, and so that most people will have one cookie less. (The 'l10n' cookie is removed if it matches the Accept-Header language -- or the fallback) More info @ http://www.w3.org/International/questions/qa-lang-priorities
Diffstat (limited to 'util')
-rwxr-xr-xutil/vndb.pl20
1 files changed, 16 insertions, 4 deletions
diff --git a/util/vndb.pl b/util/vndb.pl
index 4752c274..32e1bdb4 100755
--- a/util/vndb.pl
+++ b/util/vndb.pl
@@ -52,11 +52,23 @@ YAWF::init(
sub reqinit {
my $self = shift;
- $self->{l10n} = VNDB::L10N->get_handle($self->reqParam('l10n') || $self->reqCookie('l10n') || ());
- my $lang = $self->{l10n}->language_tag();
- $self->resHeader('Set-Cookie', "l10n=$lang; expires=Sat, 01-Jan-2030 00:00:00 GMT; path=/; domain=$self->{cookie_domain}")
- if $lang ne ($self->reqCookie('l10n')||'');
+ # Determine language
+ # if the cookie or parameter "l10n" is set, use that.
+ # otherwise, interpret the Accept-Language header or fall back to English
+ # if the cookie is set and is the same as either the Accept-Language header or the fallback, remove it
+ my $conf = $self->reqParam('l10n') || $self->reqCookie('l10n');
+ $conf = '' if !$conf || !grep $_ eq $conf, VNDB::L10N::languages;
+
+ $self->{l10n} = VNDB::L10N->get_handle(); # this uses I18N::LangTags::Detect
+ if($self->{l10n}->language_tag() eq $conf && $self->reqCookie('l10n')) {
+ $self->resHeader('Set-Cookie', "l10n= ; expires=Sat, 01-Jan-2000 00:00:00 GMT; path=/; domain=$self->{cookie_domain}");
+ } elsif($self->reqParam('l10n') && $conf && $conf ne ($self->reqCookie('l10n')||'') && $self->{l10n}->language_tag() ne $conf) {
+ $self->resHeader('Set-Cookie', "l10n=$conf; expires=Sat, 01-Jan-2030 00:00:00 GMT; path=/; domain=$self->{cookie_domain}");
+ }
+ $self->{l10n} = VNDB::L10N->get_handle($conf) if $conf && $self->{l10n}->language_tag() ne $conf;
+
+ # check authentication cookies
$self->authInit;
# check for IE6