From 5d982eba817b87318a45fcfdf282355b8cccf696 Mon Sep 17 00:00:00 2001
From: erickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Date: Thu, 7 May 2009 22:00:17 +0000
Subject: [PATCH] support for parsing accept-language for locale

git-svn-id: svn://svn.open-ils.org/ILS/trunk@13098 dcc99617-32d9-48b4-a31d-7c20da2025e4
---
 Open-ILS/src/perlmods/OpenILS/WWW/EGWeb.pm | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/Open-ILS/src/perlmods/OpenILS/WWW/EGWeb.pm b/Open-ILS/src/perlmods/OpenILS/WWW/EGWeb.pm
index dccf40cc95..840dfaaba8 100644
--- a/Open-ILS/src/perlmods/OpenILS/WWW/EGWeb.pm
+++ b/Open-ILS/src/perlmods/OpenILS/WWW/EGWeb.pm
@@ -73,12 +73,23 @@ sub load_context {
     $ctx->{theme} = $cgi->cookie(OILS_HTTP_COOKIE_THEME) || 'default';
     $ctx->{locale} = 
         $cgi->cookie(OILS_HTTP_COOKIE_LOCALE) || 
-        $r->headers_in->get('Accept-Language') || 'en-US'; #  this will need some trimming
+        parse_accept_lang($r->headers_in->get('Accept-Language')) || 'en-US'; #  this will need some trimming
     $r->log->debug('skin = ' . $ctx->{skin} . ' : theme = ' . 
         $ctx->{theme} . ' : locale = ' . $ctx->{locale});
     return $ctx;
 }
 
+# turn Accept-Language into sometihng EG can understand
+sub parse_accept_lang {
+    my $al = shift;
+    return undef unless $al;
+    my ($locale) = split(/,/, $al);
+    ($locale) = split(/;/, $locale);
+    return undef unless $locale;
+    $locale =~ s/-(.*)/eval '-'.uc("$1")/e;
+    return $locale;
+}
+
 # Given a URI, finds the configured template and any extra page 
 # arguments (trailing path info).  Any extra data is returned
 # as page arguments, in the form of an array, one item per 
-- 
2.11.0