fixes from u1 (default login + i18n)

This commit is contained in:
Serghey Rodin 2016-06-27 01:39:34 +03:00
commit 4b8a2c3f38
2 changed files with 89 additions and 66 deletions

View file

@ -44,69 +44,80 @@ function __() {
$args = func_get_args();
array_unshift($args,$_SESSION['language']);
return call_user_func_array("_translate",$args);
}
/**
* Detects user language from Accept-Language HTTP header.
* @param string Fallback language (default: 'en')
* @return string Language code (such as 'en' and 'ja')
*/
function detect_user_language($fallback='en') {
static $user_lang = '';
// Already detected
if (!empty($user_lang)) return $user_lang;
// Check if Accept-Language header is available
if (!isset($_SERVER) ||
!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ||
!is_string($_SERVER['HTTP_ACCEPT_LANGUAGE'])
) {
// Store result for reusing
$user_lang = $fallback;
return $user_lang;
}
// Sort Accept-Language by `q` value
$accept_langs = explode(',', preg_replace('/\s/', '', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
$accept_langs_sorted = array() ;
foreach ($accept_langs as $lang) {
$div = explode(';q=', $lang, 2);
if (count($div) < 2) {
// `q` value was not specfied
// -> Set default `q` value (1)
$div[] = '1';
}
list($code, $q) = $div;
if (preg_match('/^[\w\-]+$/', $code)) {
// Acceptable language code
$accept_langs_sorted[$code] = (double)$q;
}
}
arsort($accept_langs_sorted);
// List languages
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
// Find best matching language
foreach ($accept_langs_sorted as $user_lang => $dummy) {
$decision = '';
foreach ($languages as $prov_lang) {
if (strlen($decision) > strlen($prov_lang)) continue;
if (strpos($user_lang, $prov_lang) !== false) {
$decision = $prov_lang;
}
}
if (!empty($decision)) {
// Store result for reusing
$user_lang = $decision;
return $user_lang;
}
}
// Store result for reusing
$user_lang = $fallback;
return $user_lang;
}
/**
* Detects user language from Accept-Language HTTP header.
* @param string Fallback language (default: 'en')
* @return string Language code (such as 'en' and 'ja')
*/
function detect_user_language($fallback='en') {
static $user_lang = '';
// Already detected
if (!empty($user_lang)) return $user_lang;
// Check if Accept-Language header is available
if (!isset($_SERVER) ||
!isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ||
!is_string($_SERVER['HTTP_ACCEPT_LANGUAGE'])
) {
// Store result for reusing
$user_lang = $fallback;
return $user_lang;
}
// Sort Accept-Language by `q` value
$accept_langs = explode(',', preg_replace('/\s/', '', strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])));
$accept_langs_sorted = array() ;
foreach ($accept_langs as $lang) {
$div = explode(';q=', $lang, 2);
if (count($div) < 2) {
// `q` value was not specfied
// -> Set default `q` value (1)
$div[] = '1';
}
list($code, $q) = $div;
if (preg_match('/^[\w\-]+$/', $code)) {
// Acceptable language code
$accept_langs_sorted[$code] = (double)$q;
}
}
arsort($accept_langs_sorted);
// List languages
exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var);
$languages = json_decode(implode('', $output), true);
unset($output);
// Find best matching language
foreach ($accept_langs_sorted as $user_lang => $dummy) {
$decision = '';
foreach ($languages as $prov_lang) {
if (strlen($decision) > strlen($prov_lang)) continue;
if (strpos($user_lang, $prov_lang) !== false) {
$decision = $prov_lang;
}
}
if (!empty($decision)) {
// Store result for reusing
$user_lang = $decision;
return $user_lang;
}
}
// Store result for reusing
$user_lang = $fallback;
return $user_lang;
}
/**
* Detects user language .
* @param string Fallback language (default: 'en')
* @return string Language code (such as 'en' and 'ja')
*/
function detect_login_language(){
}