mirror of
https://github.com/Mibew/i18n.git
synced 2025-01-22 21:40:28 +03:00
Improve algorithm of setting and storing locale setting
This commit is contained in:
parent
2559630e8f
commit
6747e2f557
@ -27,8 +27,6 @@ $webimroot = join("/", array_map("urlencode", preg_split('/\//', preg_replace('/
|
|||||||
$mysqlprefix = preg_replace('/[^A-Za-z0-9_$]/', '', $mysqlprefix);
|
$mysqlprefix = preg_replace('/[^A-Za-z0-9_$]/', '', $mysqlprefix);
|
||||||
|
|
||||||
// test and set default locales
|
// test and set default locales
|
||||||
$locale_pattern = "/^[\w-]{2,5}$/";
|
|
||||||
|
|
||||||
$default_locale = locale_pattern_check($default_locale) && locale_exists($default_locale) ? $default_locale : 'en';
|
$default_locale = locale_pattern_check($default_locale) && locale_exists($default_locale) ? $default_locale : 'en';
|
||||||
$home_locale = locale_pattern_check($home_locale) && locale_exists($home_locale) ? $default_locale : 'en';
|
$home_locale = locale_pattern_check($home_locale) && locale_exists($home_locale) ? $default_locale : 'en';
|
||||||
|
|
||||||
@ -90,7 +88,7 @@ function locale_exists($locale)
|
|||||||
|
|
||||||
function locale_pattern_check($locale)
|
function locale_pattern_check($locale)
|
||||||
{
|
{
|
||||||
global $locale_pattern;
|
$locale_pattern = "/^[\w-]{2,5}$/";
|
||||||
return preg_match($locale_pattern, $locale) && $locale != 'names';
|
return preg_match($locale_pattern, $locale) && $locale != 'names';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,7 +114,7 @@ function get_user_locale()
|
|||||||
|
|
||||||
if (isset($_COOKIE['webim_locale'])) {
|
if (isset($_COOKIE['webim_locale'])) {
|
||||||
$requested_lang = $_COOKIE['webim_locale'];
|
$requested_lang = $_COOKIE['webim_locale'];
|
||||||
if (locale_exists($requested_lang))
|
if (locale_pattern_check($requested_lang) && locale_exists($requested_lang))
|
||||||
return $requested_lang;
|
return $requested_lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,12 +124,12 @@ function get_user_locale()
|
|||||||
if (strlen($requested_lang) > 2)
|
if (strlen($requested_lang) > 2)
|
||||||
$requested_lang = substr($requested_lang, 0, 2);
|
$requested_lang = substr($requested_lang, 0, 2);
|
||||||
|
|
||||||
if (locale_exists($requested_lang))
|
if (locale_pattern_check($requested_lang) && locale_exists($requested_lang))
|
||||||
return $requested_lang;
|
return $requested_lang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (locale_exists($default_locale))
|
if (locale_pattern_check($default_locale) && locale_exists($default_locale))
|
||||||
return $default_locale;
|
return $default_locale;
|
||||||
|
|
||||||
return 'en';
|
return 'en';
|
||||||
@ -139,19 +137,21 @@ function get_user_locale()
|
|||||||
|
|
||||||
function get_locale()
|
function get_locale()
|
||||||
{
|
{
|
||||||
global $webimroot, $locale_pattern;
|
global $webimroot;
|
||||||
|
|
||||||
$locale = verifyparam("locale", $locale_pattern, "");
|
$locale = verifyparam("locale", "/./", "");
|
||||||
|
|
||||||
if ($locale && locale_exists($locale)) {
|
if ($locale && locale_pattern_check($locale) && locale_exists($locale)) {
|
||||||
$_SESSION['locale'] = $locale;
|
$_SESSION['locale'] = $locale;
|
||||||
setcookie('webim_locale', $locale, time() + 60 * 60 * 24 * 1000, "$webimroot/");
|
}
|
||||||
} else if (isset($_SESSION['locale'])) {
|
else if (isset($_SESSION['locale']) && locale_pattern_check($_SESSION['locale']) && locale_exists($_SESSION['locale'])) {
|
||||||
$locale = $_SESSION['locale'];
|
$locale = $_SESSION['locale'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$locale = get_user_locale();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$locale || !locale_exists($locale))
|
setcookie('webim_locale', $locale, time() + 60 * 60 * 24 * 1000, "$webimroot/");
|
||||||
$locale = get_user_locale();
|
|
||||||
return $locale;
|
return $locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user