From 663ec76bb99f898eeea6eb85edf2e0b004b763e3 Mon Sep 17 00:00:00 2001 From: "cam.lafit" Date: Mon, 10 Jun 2013 10:43:01 +0200 Subject: [PATCH] Better regexp to get country browser from HTTP_ACCEPT_LANGUAGE With HTTP_ACCEPT_LANGUAGE we have two choices : * Country == language (displayed with two letter as fr,de,en,...) * Country with multi language (displayes as fr-CH, de-CH, it-CH) Previous regexp find only first case. --- controllers/front/AddressController.php | 4 +++- controllers/front/AuthController.php | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/controllers/front/AddressController.php b/controllers/front/AddressController.php index 699a37287..eb17888ce 100644 --- a/controllers/front/AddressController.php +++ b/controllers/front/AddressController.php @@ -303,7 +303,9 @@ class AddressControllerCore extends FrontController $selected_country = (int)$this->_address->id_country; else if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { - $array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']); + // get all countries as language (xy) or language-country (wz-XY) + $array = array(); + preg_match("#(?<=-)\w\w|\w\w(?!-)#",$_SERVER['HTTP_ACCEPT_LANGUAGE'],$array); if (!Validate::isLanguageIsoCode($array[0]) || !($selected_country = Country::getByIso($array[0]))) $selected_country = (int)Configuration::get('PS_COUNTRY_DEFAULT'); } diff --git a/controllers/front/AuthController.php b/controllers/front/AuthController.php index 745cca405..f348b2c50 100644 --- a/controllers/front/AuthController.php +++ b/controllers/front/AuthController.php @@ -107,7 +107,9 @@ class AuthControllerCore extends FrontController if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { - $array = preg_split('/,|-/', $_SERVER['HTTP_ACCEPT_LANGUAGE']); + // get all countries as language (xy) or language-country (wz-XY) + $array = array(); + preg_match("#(?<=-)\w\w|\w\w(?!-)#",$_SERVER['HTTP_ACCEPT_LANGUAGE'],$array); if (!Validate::isLanguageIsoCode($array[0]) || !($sl_country = Country::getByIso($array[0]))) $sl_country = (int)Configuration::get('PS_COUNTRY_DEFAULT'); }