mirror of
https://github.com/myvesta/vesta.git
synced 2025-03-12 04:35:23 -07:00
Detect user language
This commit is contained in:
parent
05b76fefb2
commit
2bd84f00f9
web
@ -45,3 +45,68 @@ function __() {
|
||||
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 = [];
|
||||
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 lanugages
|
||||
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;
|
||||
}
|
@ -4,7 +4,7 @@ session_start();
|
||||
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n.php');
|
||||
|
||||
if (empty($_SESSION['language'])) {
|
||||
$_SESSION['language'] = 'en';
|
||||
$_SESSION['language'] = detect_user_language();
|
||||
}
|
||||
?>
|
||||
|
||||
|
@ -93,8 +93,8 @@ foreach ($sys_arr as $key => $value) {
|
||||
$_SESSION[$key] = $value;
|
||||
}
|
||||
|
||||
// Set default language
|
||||
if (empty($_SESSION['language'])) $_SESSION['language']='en';
|
||||
// Detect language
|
||||
if (empty($_SESSION['language'])) $_SESSION['language'] = detect_user_language();
|
||||
|
||||
require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$_SESSION['language'].'.php');
|
||||
require_once('../templates/header.html');
|
||||
|
@ -74,14 +74,8 @@ if ((!empty($_POST['user'])) && (!empty($_POST['code'])) && (!empty($_POST['pass
|
||||
}
|
||||
}
|
||||
|
||||
// Set system language
|
||||
exec (VESTA_CMD . "v-list-sys-config json", $output, $return_var);
|
||||
$data = json_decode(implode('', $output), true);
|
||||
if (!empty( $data['config']['LANGUAGE'])) {
|
||||
$_SESSION['language'] = $data['config']['LANGUAGE'];
|
||||
} else {
|
||||
$_SESSION['language'] = 'en';
|
||||
}
|
||||
// Detect language
|
||||
if (empty($_SESSION['language'])) $_SESSION['language'] = detect_user_language();
|
||||
|
||||
if (empty($_GET['action'])) {
|
||||
require_once '../templates/header.html';
|
||||
|
@ -125,7 +125,7 @@
|
||||
if (( $value == $v_language ) || ( $svalue == $v_language)){
|
||||
echo 'selected' ;
|
||||
}
|
||||
if (( $value == 'en' ) && (empty($v_language))){
|
||||
if (( $value == detect_user_language() ) && (empty($v_language))){
|
||||
echo 'selected' ;
|
||||
}
|
||||
echo ">".htmlentities($value)."</option>\n";
|
||||
|
@ -104,7 +104,7 @@
|
||||
if (( $value == $v_language ) || ( $svalue == $v_language)){
|
||||
echo 'selected' ;
|
||||
}
|
||||
if (( $value == 'en' ) && (empty($v_language))){
|
||||
if (( $value == detect_user_language() ) && (empty($v_language))){
|
||||
echo 'selected' ;
|
||||
}
|
||||
echo ">".htmlentities($value)."</option>\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user