]> git.mxchange.org Git - friendica.git/commitdiff
Add user language in settings, use that field as language for UI
authorfabrixxm <fabrix.xm@gmail.com>
Sun, 8 Nov 2015 13:23:49 +0000 (14:23 +0100)
committerfabrixxm <fabrix.xm@gmail.com>
Sun, 8 Nov 2015 13:23:49 +0000 (14:23 +0100)
include/pgettext.php
index.php
mod/admin.php
mod/settings.php
view/templates/settings.tpl
view/theme/decaf-mobile/templates/settings.tpl
view/theme/frost-mobile/templates/settings.tpl

index 4f8db43d471b12ea828004d433194fcba90e99a5..f72cbb08a71c707151434380cf9e4c886bb365a1 100644 (file)
@@ -11,7 +11,7 @@ require_once("include/dba.php");
  *
  * Get the language setting directly from system variables, bypassing get_config()
  * as database may not yet be configured.
- * 
+ *
  * If possible, we use the value from the browser.
  *
  */
@@ -21,22 +21,22 @@ if(! function_exists('get_browser_language')) {
 function get_browser_language() {
 
        if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) {
-           // break up string into pieces (languages and q factors)
-       preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', 
+               // break up string into pieces (languages and q factors)
+               preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i',
                        $_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
 
-       if (count($lang_parse[1])) {
-               // create a list like "en" => 0.8
-               $langs = array_combine($lang_parse[1], $lang_parse[4]);
-       
-               // set default to 1 for any without q factor
-               foreach ($langs as $lang => $val) {
-               if ($val === '') $langs[$lang] = 1;
-               }
-
-               // sort list based on value     
-               arsort($langs, SORT_NUMERIC);
-       }
+               if (count($lang_parse[1])) {
+                       // create a list like "en" => 0.8
+                       $langs = array_combine($lang_parse[1], $lang_parse[4]);
+
+                       // set default to 1 for any without q factor
+                       foreach ($langs as $lang => $val) {
+                               if ($val === '') $langs[$lang] = 1;
+                       }
+
+                       // sort list based on value
+                       arsort($langs, SORT_NUMERIC);
+               }
        }
 
        if(isset($langs) && count($langs)) {
@@ -94,7 +94,7 @@ if(! function_exists('load_translation_table')) {
  * load string translation table for alternate language
  *
  * first plugin strings are loaded, then globals
- * 
+ *
  * @param string $lang language code to load
  */
 function load_translation_table($lang) {
@@ -111,7 +111,7 @@ function load_translation_table($lang) {
                        }
                }
        }
-       
+
        if(file_exists("view/$lang/strings.php")) {
                include("view/$lang/strings.php");
        }
@@ -145,7 +145,7 @@ function tt($singular, $plural, $count){
                $k = $f($count);
                return is_array($t)?$t[$k]:$t;
        }
-       
+
        if ($count!=1){
                return $plural;
        } else {
@@ -153,11 +153,34 @@ function tt($singular, $plural, $count){
        }
 }}
 
-// provide a fallback which will not collide with 
-// a function defined in any language file 
+// provide a fallback which will not collide with
+// a function defined in any language file
 
 if(! function_exists('string_plural_select_default')) {
 function string_plural_select_default($n) {
        return ($n != 1);
 }}
 
+
+/**
+ * Return installed languages as associative array
+ * [
+ *             lang => lang,
+ *             ...
+ * ]
+ */
+function get_avaiable_languages() {
+       $lang_choices = array();
+       $langs = glob('view/*/strings.php'); /**/
+
+       if(is_array($langs) && count($langs)) {
+               if(! in_array('view/en/strings.php',$langs))
+                       $langs[] = 'view/en/';
+               asort($langs);
+               foreach($langs as $l) {
+                       $t = explode("/",$l);
+                       $lang_choices[$t[1]] = $t[1];
+               }
+       }
+       return $lang_choices;
+}
index 02316e1e952b4362a627356f6d71525884168e2a..9fe248e8e2b5329f3b67503a75c74e9a2bc6ef3b 100644 (file)
--- a/index.php
+++ b/index.php
@@ -102,13 +102,13 @@ session_start();
  * Language was set earlier, but we can over-ride it in the session.
  * We have to do it here because the session was just now opened.
  */
-
-if(array_key_exists('system_language',$_POST)) {
-       if(strlen($_POST['system_language']))
-               $_SESSION['language'] = $_POST['system_language'];
-       else
-               unset($_SESSION['language']);
+if (x($_SESSION,'authenticated') && !x($_SESSION,'language')) {
+       // we didn't loaded user data yet, but we need user language
+       $r = q("SELECT language FROM user WHERE uid=%d", intval($_SESSION['uid']));
+       $_SESSION['language'] = $lang;
+       if (count($r)>0) $_SESSION['language'] = $r[0]['language'];
 }
+
 if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
        $lang = $_SESSION['language'];
        load_translation_table($lang);
index 0b38ae5668d5ff62a6e5e96c1c5d0b8a10f571e0..5a2ccf8932606f3ca01e1bc066b4ed8cea619f3f 100644 (file)
@@ -603,18 +603,7 @@ function admin_page_site_post(&$a){
 function admin_page_site(&$a) {
 
        /* Installed langs */
-       $lang_choices = array();
-       $langs = glob('view/*/strings.php'); /**/
-
-       if(is_array($langs) && count($langs)) {
-               if(! in_array('view/en/strings.php',$langs))
-                       $langs[] = 'view/en/';
-               asort($langs);
-               foreach($langs as $l) {
-                       $t = explode("/",$l);
-                       $lang_choices[$t[1]] = $t[1];
-               }
-       }
+       $lang_choices = get_avaiable_languages();
 
        if (strlen(get_config('system','directory_submit_url')) AND
                !strlen(get_config('system','directory'))) {
index 6601858ee41b2bc8e234a1d0a9359b1818cd11c8..77a5755855bc3e2e6b24b33dc7a1f3c76f0021f4 100644 (file)
@@ -386,6 +386,8 @@ function settings_post(&$a) {
        $username         = ((x($_POST,'username'))   ? notags(trim($_POST['username']))     : '');
        $email            = ((x($_POST,'email'))      ? notags(trim($_POST['email']))        : '');
        $timezone         = ((x($_POST,'timezone'))   ? notags(trim($_POST['timezone']))     : '');
+       $language         = ((x($_POST,'language'))   ? notags(trim($_POST['language']))     : '');
+
        $defloc           = ((x($_POST,'defloc'))     ? notags(trim($_POST['defloc']))       : '');
        $openid           = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url']))   : '');
        $maxreq           = ((x($_POST,'maxreq'))     ? intval($_POST['maxreq'])             : 0);
@@ -532,7 +534,15 @@ function settings_post(&$a) {
                }
        }
 
-       $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s',  `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `def_gid` = %d, `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d  WHERE `uid` = %d",
+
+       $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s',
+                               `openid` = '%s', `timezone` = '%s',
+                               `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s',
+                               `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s',
+                               `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s',
+                               `def_gid` = %d, `blockwall` = %d, `hidewall` = %d, `blocktags` = %d,
+                               `unkmail` = %d, `cntunkmail` = %d, `language` = '%s'
+                       WHERE `uid` = %d",
                        dbesc($username),
                        dbesc($email),
                        dbesc($openid),
@@ -554,11 +564,15 @@ function settings_post(&$a) {
                        intval($blocktags),
                        intval($unkmail),
                        intval($cntunkmail),
+                       dbesc($language),
                        intval(local_user())
        );
        if($r)
                info( t('Settings updated.') . EOL);
 
+       // clear session language
+       unset($_SESSION['language']);
+
        $r = q("UPDATE `profile`
                SET `publish` = %d,
                `name` = '%s',
@@ -985,6 +999,7 @@ function settings_content(&$a) {
        $email      = $a->user['email'];
        $nickname   = $a->user['nickname'];
        $timezone   = $a->user['timezone'];
+       $language   = $a->user['language'];
        $notify     = $a->user['notify-flags'];
        $defloc     = $a->user['default-location'];
        $openid     = $a->user['openid'];
@@ -1168,6 +1183,8 @@ function settings_content(&$a) {
        else
                $public_post_link = '&public=1';
 
+       /* Installed langs */
+       $lang_choices = get_avaiable_languages();
 
        $o .= replace_macros($stpl, array(
                '$ptitle'       => t('Account Settings'),
@@ -1190,6 +1207,7 @@ function settings_content(&$a) {
                '$username' => array('username',  t('Full Name:'), $username,''),
                '$email'        => array('email', t('Email Address:'), $email, '', '', '', 'email'),
                '$timezone' => array('timezone_select' , t('Your Timezone:'), select_timezone($timezone), ''),
+               '$language' => array('language', t('Your Language:'), $language, t('Set the language we use to show you friendica interface and to send you emails'), $lang_choices),
                '$defloc'       => array('defloc', t('Default Post Location:'), $defloc, ''),
                '$allowloc' => array('allow_location', t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''),
 
@@ -1245,7 +1263,7 @@ function settings_content(&$a) {
                '$notify8'  => array('notify8', t('You are poked/prodded/etc. in a post'), ($notify & NOTIFY_POKE), NOTIFY_POKE, ''),
 
         '$desktop_notifications' => array('desktop_notifications', t('Activate desktop notifications') , false, t('Show desktop popup on new notifications')),
-                
+
                '$email_textonly' => array('email_textonly', t('Text-only notification emails'),
                                                                        get_pconfig(local_user(),'system','email_textonly'),
                                                                        t('Send text only notification emails, without the html part')),
index 26c44f91c35803ac0f24126cf63452a59e075151..c3852845701ea8ad9d225b08e5d6be9b69e8ade5 100644 (file)
@@ -27,6 +27,7 @@
 {{include file="field_input.tpl" field=$email}}
 {{include file="field_password.tpl" field=$password4}}
 {{include file="field_custom.tpl" field=$timezone}}
+{{include file="field_select.tpl" field=$language}}
 {{include file="field_input.tpl" field=$defloc}}
 {{include file="field_checkbox.tpl" field=$allowloc}}
 
 (function(){
     var elm = $("#id_{{$desktop_notifications.0}}_onoff");
     var ckbox = $("#id_{{$desktop_notifications.0}}");
-    
+
     if (getNotificationPermission() === 'granted') {
         ckbox.val(1);
         elm.find(".off").addClass("hidden");
        if (getNotificationPermission() === null) {
                elm.parent(".field.yesno").hide();
        }
-    
+
     $("#id_{{$desktop_notifications.0}}_onoff").on("click", function(e){
-        
+
         if (Notification.permission === 'granted') {
             localStorage.setItem('notification-permissions', ckbox.val()==1 ? 'granted' : 'denied');
         } else if (Notification.permission === 'denied') {
             localStorage.setItem('notification-permissions', 'denied');
-            
+
             ckbox.val(0);
             elm.find(".on").addClass("hidden");
             elm.find(".off").removeClass("hidden");
-            
+
         } else if (Notification.permission === 'default') {
             Notification.requestPermission(function(choice) {
                 if (choice === 'granted') {
                 }
             });
         }
-               
+
                //console.log(getNotificationPermission());
-               
-        
+
+
     })
 })();
 </script>
index 6196f80a3cb4cb953b6cb86db51dab4d9c53fc2b..94a8d55422b6ddae53fe81acfeb7b38302094707 100644 (file)
@@ -27,6 +27,7 @@
 {{include file="field_input.tpl" field=$email}}
 {{include file="field_password.tpl" field=$password4}}
 {{include file="field_custom.tpl" field=$timezone}}
+{{include file="field_select.tpl" field=$language}}
 {{include file="field_input.tpl" field=$defloc}}
 {{include file="field_checkbox.tpl" field=$allowloc}}
 
index cd9e1d316147154af3c0200f435fd8d8c08399b1..e3a636a840467b45aa9c8aa6221a1a39cb04cfd6 100644 (file)
@@ -27,6 +27,7 @@
 {{include file="field_input.tpl" field=$email}}
 {{include file="field_password.tpl" field=$password4}}
 {{include file="field_custom.tpl" field=$timezone}}
+{{include file="field_select.tpl" field=$language}}
 {{include file="field_input.tpl" field=$defloc}}
 {{include file="field_checkbox.tpl" field=$allowloc}}