Bladeren bron

Automatic language detection

Added automatic language detection based on HTTP_ACCEPT_LANGUAGE
header. New function _translate, that translates string to required
language.
New file: setlang.php?l=language_code - sets session language.
ZonD80 13 jaren geleden
bovenliggende
commit
c8e0ca45fb
7 gewijzigde bestanden met toevoegingen van 78 en 27 verwijderingen
  1. 5 5
      web/add/user/index.php
  2. 1 1
      web/inc/i18n/en.php
  3. 1 1
      web/inc/i18n/ru.php
  4. 57 15
      web/inc/main.php
  5. 6 0
      web/index.php
  6. 0 5
      web/login/index.php
  7. 8 0
      web/setlang.php

+ 5 - 5
web/add/user/index.php

@@ -64,15 +64,15 @@ if ($_SESSION['user'] == 'admin') {
                 exec (VESTA_CMD."v-change-user-language ".$v_username." ".$v_language, $output, $return_var);
                 if (!empty($v_notify)) {
                     $to = $_POST['v_notify'];
-                    $subject = _("Welcome to Vesta Control Panel");
+                    $subject = _translate($v_language,"Welcome to Vesta Control Panel");
                     $hostname = exec('hostname');
-                    $from = _('MAIL_FROM',$hostname);
+                    $from = _translate($v_language,'MAIL_FROM',$hostname);
                     if (!empty($_POST['v_fname'])) {
-                        $mailtext = _('GREETINGS_GORDON_FREEMAN',$_POST['v_fname'],$_POST['v_lname']);
+                        $mailtext = _translate($v_language,'GREETINGS_GORDON_FREEMAN',$_POST['v_fname'],$_POST['v_lname']);
                     } else {
-                        $mailtext = _('GREETINGS');
+                        $mailtext = _translate($v_language,'GREETINGS');
                     }
-                    $mailtext .= _('ACCOUNT_READY',$_SERVER['HTTP_HOST'],$_POST['v_username'],$_POST['v_password']);
+                    $mailtext .= _translate($v_language,'ACCOUNT_READY',$_SERVER['HTTP_HOST'],$_POST['v_username'],$_POST['v_password']);
                     send_email($to, $subject, $mailtext, $from);
                 }
 

+ 1 - 1
web/inc/i18n/en.php

@@ -7,7 +7,7 @@
 
 if (!defined('LANGUAGE')) die('Direct access not allowed');
 
-$LANG = array(
+$LANG['en'] = array(
     'yes' => 'yes',
     'no' => 'no',
     'none' => 'нет',

+ 1 - 1
web/inc/i18n/ru.php

@@ -7,7 +7,7 @@
 
 if (!defined('LANGUAGE')) die('Direct access not allowed');
 
-$LANG = array(
+$LANG['ru'] = array(
     'yes' => 'да',
     'no' => 'нет',
     'none' => 'нет',

+ 57 - 15
web/inc/main.php

@@ -1,25 +1,71 @@
 <?php
 
-// need to be moved to user settings
-define('LANGUAGE','ru');
-
-require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.LANGUAGE.'.php');
-
-// works like sprintf if more than one arguments called
+/**
+ * Translates string by a given key in first parameter to current session language. Works like sprintf
+ * @global array $LANG Associative array of language pharses
+ * @return string Translated string
+ * @see _translate()
+ */
 function _() {
+   $args = func_get_args();
+   array_unshift($args,$_SESSION['language']);
+   return call_user_func_array("_translate",$args);
+}
+
+/**
+ * Translates string to given language in first parameter, key given in second parameter (dynamically loads required language). Works like spritf from second parameter
+ * @global array $LANG Associative array of language pharses
+ * @return string Translated string
+ */
+function _translate() {
     global $LANG;
+    
     $args = func_get_args();
-    $key = $args[0];
-    if (!isset($LANG[$key])) $text=$key; else
-        $text=$LANG[$key];
-
+    $l = $args[0];
+    
+    if (!$l) return 'NO LANGUAGE DEFINED';
+    $key = $args[1];
+    
+    if (!isset($LANG[$l])) {
+        define('LANGUAGE',true);
+        require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$l.'.php');
+    }
+    if (!isset($LANG[$l][$key])) $text=$key; else
+        $text=$LANG[$l][$key];
+    
+    array_shift($args);
     if (count($args)>1) { $args[0] = $text;
         return call_user_func_array("sprintf",$args);
     }
     else return $text;
 }
 
-// Check user session
+
+define('VESTA_CMD', '/usr/bin/sudo /usr/local/vesta/bin/');
+
+$i = 0;
+
+// setting language here
+
+    
+    $ls['command'] = VESTA_CMD."v-list-sys-languages json";
+    exec ($ls['command'], $ls['output'], $ls['return_var']);
+    $ls['langs'] = json_decode(implode('', $ls['output']), true);
+    
+    if (isset($_SESSION['language'])&&!in_array($_SESSION['language'],$ls['langs'])) {
+        $ls['browserlang'] = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2));
+        if (!in_array($ls['browserlang'],$ls['langs'])) {
+            unset($ls);
+            $ls['command'] = VESTA_CMD."v-list-sys-config json";
+            exec ($ls['command'], $ls['output'], $ls['return_var']);
+            $ls['langs'] = json_decode(implode('',$ls['output']),true);
+            $_SESSION['language'] = $ls['langs']['config']['LANGUAGE'];
+        } else {
+            $_SESSION['language'] = $ls['browserlang'];
+        }
+    }
+    unset($ls);
+    
 if ((!isset($_SESSION['user'])) && (!isset($api_mode))&&!defined('NO_AUTH_REQUIRED')) {
     $_SESSION['request_uri'] = $_SERVER['REQUEST_URI'];
     header("Location: /login/");
@@ -32,10 +78,6 @@ if (isset($_SESSION['look']) && ( $_SESSION['look'] != 'admin' )) {
     $user = $_SESSION['user'];
 }
 
-define('VESTA_CMD', '/usr/bin/sudo /usr/local/vesta/bin/');
-
-$i = 0;
-
 // Define functions
 function check_error($return_var){
     if ( $return_var > 0 ) {

+ 6 - 0
web/index.php

@@ -1,5 +1,11 @@
 <?php
 session_start();
+
+define('NO_AUTH_REQUIRED',true);
+
+include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
+
+
 if (isset($_SESSION['user'])) {
     header("Location: /list/user");
 } else {

+ 0 - 5
web/login/index.php

@@ -2,7 +2,6 @@
 session_start();
 
 define('NO_AUTH_REQUIRED',true);
-define('NO_LANG', true);
 
 include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
 
@@ -12,14 +11,10 @@ if (isset($_GET['logout'])) {
 
 $TAB = 'LOGIN';
 
-exec (VESTA_CMD."v-list-sys-config json", $output, $return_var);
 if ($return_var != 0) {
     header("Location: /error/");
     exit;
 }
-$data = json_decode(implode('', $output), true);
-unset($output);
-//$LANGUAGE = $data['config']['LANGUAGE'];
 
 if (isset($_SESSION['user'])) {
     if ($_SESSION['user'] ==  'admin' && !empty($_GET['loginas'])) {

+ 8 - 0
web/setlang.php

@@ -0,0 +1,8 @@
+<?php
+/*
+ * Just sets language
+ */
+session_start();
+$_SESSION['language'] = strtolower(substr((string)$_GET['l'],0,2));
+header("Location: /");
+?>