Add user language in settings, use that field as language for UI
This commit is contained in:
parent
e74916d395
commit
fb3ac68cc0
7 changed files with 80 additions and 47 deletions
|
@ -11,7 +11,7 @@ require_once("include/dba.php");
|
||||||
*
|
*
|
||||||
* Get the language setting directly from system variables, bypassing get_config()
|
* Get the language setting directly from system variables, bypassing get_config()
|
||||||
* as database may not yet be configured.
|
* as database may not yet be configured.
|
||||||
*
|
*
|
||||||
* If possible, we use the value from the browser.
|
* If possible, we use the value from the browser.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -21,22 +21,22 @@ if(! function_exists('get_browser_language')) {
|
||||||
function get_browser_language() {
|
function get_browser_language() {
|
||||||
|
|
||||||
if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) {
|
if (x($_SERVER,'HTTP_ACCEPT_LANGUAGE')) {
|
||||||
// break up string into pieces (languages and q factors)
|
// 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',
|
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);
|
$_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
|
||||||
|
|
||||||
if (count($lang_parse[1])) {
|
if (count($lang_parse[1])) {
|
||||||
// create a list like "en" => 0.8
|
// create a list like "en" => 0.8
|
||||||
$langs = array_combine($lang_parse[1], $lang_parse[4]);
|
$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
|
// set default to 1 for any without q factor
|
||||||
arsort($langs, SORT_NUMERIC);
|
foreach ($langs as $lang => $val) {
|
||||||
}
|
if ($val === '') $langs[$lang] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort list based on value
|
||||||
|
arsort($langs, SORT_NUMERIC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isset($langs) && count($langs)) {
|
if(isset($langs) && count($langs)) {
|
||||||
|
@ -94,7 +94,7 @@ if(! function_exists('load_translation_table')) {
|
||||||
* load string translation table for alternate language
|
* load string translation table for alternate language
|
||||||
*
|
*
|
||||||
* first plugin strings are loaded, then globals
|
* first plugin strings are loaded, then globals
|
||||||
*
|
*
|
||||||
* @param string $lang language code to load
|
* @param string $lang language code to load
|
||||||
*/
|
*/
|
||||||
function load_translation_table($lang) {
|
function load_translation_table($lang) {
|
||||||
|
@ -111,7 +111,7 @@ function load_translation_table($lang) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(file_exists("view/$lang/strings.php")) {
|
if(file_exists("view/$lang/strings.php")) {
|
||||||
include("view/$lang/strings.php");
|
include("view/$lang/strings.php");
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ function tt($singular, $plural, $count){
|
||||||
$k = $f($count);
|
$k = $f($count);
|
||||||
return is_array($t)?$t[$k]:$t;
|
return is_array($t)?$t[$k]:$t;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($count!=1){
|
if ($count!=1){
|
||||||
return $plural;
|
return $plural;
|
||||||
} else {
|
} else {
|
||||||
|
@ -153,11 +153,34 @@ function tt($singular, $plural, $count){
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
// provide a fallback which will not collide with
|
// provide a fallback which will not collide with
|
||||||
// a function defined in any language file
|
// a function defined in any language file
|
||||||
|
|
||||||
if(! function_exists('string_plural_select_default')) {
|
if(! function_exists('string_plural_select_default')) {
|
||||||
function string_plural_select_default($n) {
|
function string_plural_select_default($n) {
|
||||||
return ($n != 1);
|
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;
|
||||||
|
}
|
||||||
|
|
12
index.php
12
index.php
|
@ -102,13 +102,13 @@ session_start();
|
||||||
* Language was set earlier, but we can over-ride it in the session.
|
* 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.
|
* We have to do it here because the session was just now opened.
|
||||||
*/
|
*/
|
||||||
|
if (x($_SESSION,'authenticated') && !x($_SESSION,'language')) {
|
||||||
if(array_key_exists('system_language',$_POST)) {
|
// we didn't loaded user data yet, but we need user language
|
||||||
if(strlen($_POST['system_language']))
|
$r = q("SELECT language FROM user WHERE uid=%d", intval($_SESSION['uid']));
|
||||||
$_SESSION['language'] = $_POST['system_language'];
|
$_SESSION['language'] = $lang;
|
||||||
else
|
if (count($r)>0) $_SESSION['language'] = $r[0]['language'];
|
||||||
unset($_SESSION['language']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
|
if((x($_SESSION,'language')) && ($_SESSION['language'] !== $lang)) {
|
||||||
$lang = $_SESSION['language'];
|
$lang = $_SESSION['language'];
|
||||||
load_translation_table($lang);
|
load_translation_table($lang);
|
||||||
|
|
|
@ -603,18 +603,7 @@ function admin_page_site_post(&$a){
|
||||||
function admin_page_site(&$a) {
|
function admin_page_site(&$a) {
|
||||||
|
|
||||||
/* Installed langs */
|
/* Installed langs */
|
||||||
$lang_choices = array();
|
$lang_choices = get_avaiable_languages();
|
||||||
$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];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen(get_config('system','directory_submit_url')) AND
|
if (strlen(get_config('system','directory_submit_url')) AND
|
||||||
!strlen(get_config('system','directory'))) {
|
!strlen(get_config('system','directory'))) {
|
||||||
|
|
|
@ -386,6 +386,8 @@ function settings_post(&$a) {
|
||||||
$username = ((x($_POST,'username')) ? notags(trim($_POST['username'])) : '');
|
$username = ((x($_POST,'username')) ? notags(trim($_POST['username'])) : '');
|
||||||
$email = ((x($_POST,'email')) ? notags(trim($_POST['email'])) : '');
|
$email = ((x($_POST,'email')) ? notags(trim($_POST['email'])) : '');
|
||||||
$timezone = ((x($_POST,'timezone')) ? notags(trim($_POST['timezone'])) : '');
|
$timezone = ((x($_POST,'timezone')) ? notags(trim($_POST['timezone'])) : '');
|
||||||
|
$language = ((x($_POST,'language')) ? notags(trim($_POST['language'])) : '');
|
||||||
|
|
||||||
$defloc = ((x($_POST,'defloc')) ? notags(trim($_POST['defloc'])) : '');
|
$defloc = ((x($_POST,'defloc')) ? notags(trim($_POST['defloc'])) : '');
|
||||||
$openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : '');
|
$openid = ((x($_POST,'openid_url')) ? notags(trim($_POST['openid_url'])) : '');
|
||||||
$maxreq = ((x($_POST,'maxreq')) ? intval($_POST['maxreq']) : 0);
|
$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($username),
|
||||||
dbesc($email),
|
dbesc($email),
|
||||||
dbesc($openid),
|
dbesc($openid),
|
||||||
|
@ -554,11 +564,15 @@ function settings_post(&$a) {
|
||||||
intval($blocktags),
|
intval($blocktags),
|
||||||
intval($unkmail),
|
intval($unkmail),
|
||||||
intval($cntunkmail),
|
intval($cntunkmail),
|
||||||
|
dbesc($language),
|
||||||
intval(local_user())
|
intval(local_user())
|
||||||
);
|
);
|
||||||
if($r)
|
if($r)
|
||||||
info( t('Settings updated.') . EOL);
|
info( t('Settings updated.') . EOL);
|
||||||
|
|
||||||
|
// clear session language
|
||||||
|
unset($_SESSION['language']);
|
||||||
|
|
||||||
$r = q("UPDATE `profile`
|
$r = q("UPDATE `profile`
|
||||||
SET `publish` = %d,
|
SET `publish` = %d,
|
||||||
`name` = '%s',
|
`name` = '%s',
|
||||||
|
@ -985,6 +999,7 @@ function settings_content(&$a) {
|
||||||
$email = $a->user['email'];
|
$email = $a->user['email'];
|
||||||
$nickname = $a->user['nickname'];
|
$nickname = $a->user['nickname'];
|
||||||
$timezone = $a->user['timezone'];
|
$timezone = $a->user['timezone'];
|
||||||
|
$language = $a->user['language'];
|
||||||
$notify = $a->user['notify-flags'];
|
$notify = $a->user['notify-flags'];
|
||||||
$defloc = $a->user['default-location'];
|
$defloc = $a->user['default-location'];
|
||||||
$openid = $a->user['openid'];
|
$openid = $a->user['openid'];
|
||||||
|
@ -1168,6 +1183,8 @@ function settings_content(&$a) {
|
||||||
else
|
else
|
||||||
$public_post_link = '&public=1';
|
$public_post_link = '&public=1';
|
||||||
|
|
||||||
|
/* Installed langs */
|
||||||
|
$lang_choices = get_avaiable_languages();
|
||||||
|
|
||||||
$o .= replace_macros($stpl, array(
|
$o .= replace_macros($stpl, array(
|
||||||
'$ptitle' => t('Account Settings'),
|
'$ptitle' => t('Account Settings'),
|
||||||
|
@ -1190,6 +1207,7 @@ function settings_content(&$a) {
|
||||||
'$username' => array('username', t('Full Name:'), $username,''),
|
'$username' => array('username', t('Full Name:'), $username,''),
|
||||||
'$email' => array('email', t('Email Address:'), $email, '', '', '', 'email'),
|
'$email' => array('email', t('Email Address:'), $email, '', '', '', 'email'),
|
||||||
'$timezone' => array('timezone_select' , t('Your Timezone:'), select_timezone($timezone), ''),
|
'$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, ''),
|
'$defloc' => array('defloc', t('Default Post Location:'), $defloc, ''),
|
||||||
'$allowloc' => array('allow_location', t('Use Browser Location:'), ($a->user['allow_location'] == 1), ''),
|
'$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, ''),
|
'$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')),
|
'$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'),
|
'$email_textonly' => array('email_textonly', t('Text-only notification emails'),
|
||||||
get_pconfig(local_user(),'system','email_textonly'),
|
get_pconfig(local_user(),'system','email_textonly'),
|
||||||
t('Send text only notification emails, without the html part')),
|
t('Send text only notification emails, without the html part')),
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
{{include file="field_input.tpl" field=$email}}
|
{{include file="field_input.tpl" field=$email}}
|
||||||
{{include file="field_password.tpl" field=$password4}}
|
{{include file="field_password.tpl" field=$password4}}
|
||||||
{{include file="field_custom.tpl" field=$timezone}}
|
{{include file="field_custom.tpl" field=$timezone}}
|
||||||
|
{{include file="field_select.tpl" field=$language}}
|
||||||
{{include file="field_input.tpl" field=$defloc}}
|
{{include file="field_input.tpl" field=$defloc}}
|
||||||
{{include file="field_checkbox.tpl" field=$allowloc}}
|
{{include file="field_checkbox.tpl" field=$allowloc}}
|
||||||
|
|
||||||
|
@ -147,7 +148,7 @@
|
||||||
(function(){
|
(function(){
|
||||||
var elm = $("#id_{{$desktop_notifications.0}}_onoff");
|
var elm = $("#id_{{$desktop_notifications.0}}_onoff");
|
||||||
var ckbox = $("#id_{{$desktop_notifications.0}}");
|
var ckbox = $("#id_{{$desktop_notifications.0}}");
|
||||||
|
|
||||||
if (getNotificationPermission() === 'granted') {
|
if (getNotificationPermission() === 'granted') {
|
||||||
ckbox.val(1);
|
ckbox.val(1);
|
||||||
elm.find(".off").addClass("hidden");
|
elm.find(".off").addClass("hidden");
|
||||||
|
@ -156,18 +157,18 @@
|
||||||
if (getNotificationPermission() === null) {
|
if (getNotificationPermission() === null) {
|
||||||
elm.parent(".field.yesno").hide();
|
elm.parent(".field.yesno").hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
$("#id_{{$desktop_notifications.0}}_onoff").on("click", function(e){
|
$("#id_{{$desktop_notifications.0}}_onoff").on("click", function(e){
|
||||||
|
|
||||||
if (Notification.permission === 'granted') {
|
if (Notification.permission === 'granted') {
|
||||||
localStorage.setItem('notification-permissions', ckbox.val()==1 ? 'granted' : 'denied');
|
localStorage.setItem('notification-permissions', ckbox.val()==1 ? 'granted' : 'denied');
|
||||||
} else if (Notification.permission === 'denied') {
|
} else if (Notification.permission === 'denied') {
|
||||||
localStorage.setItem('notification-permissions', 'denied');
|
localStorage.setItem('notification-permissions', 'denied');
|
||||||
|
|
||||||
ckbox.val(0);
|
ckbox.val(0);
|
||||||
elm.find(".on").addClass("hidden");
|
elm.find(".on").addClass("hidden");
|
||||||
elm.find(".off").removeClass("hidden");
|
elm.find(".off").removeClass("hidden");
|
||||||
|
|
||||||
} else if (Notification.permission === 'default') {
|
} else if (Notification.permission === 'default') {
|
||||||
Notification.requestPermission(function(choice) {
|
Notification.requestPermission(function(choice) {
|
||||||
if (choice === 'granted') {
|
if (choice === 'granted') {
|
||||||
|
@ -181,10 +182,10 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log(getNotificationPermission());
|
//console.log(getNotificationPermission());
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
{{include file="field_input.tpl" field=$email}}
|
{{include file="field_input.tpl" field=$email}}
|
||||||
{{include file="field_password.tpl" field=$password4}}
|
{{include file="field_password.tpl" field=$password4}}
|
||||||
{{include file="field_custom.tpl" field=$timezone}}
|
{{include file="field_custom.tpl" field=$timezone}}
|
||||||
|
{{include file="field_select.tpl" field=$language}}
|
||||||
{{include file="field_input.tpl" field=$defloc}}
|
{{include file="field_input.tpl" field=$defloc}}
|
||||||
{{include file="field_checkbox.tpl" field=$allowloc}}
|
{{include file="field_checkbox.tpl" field=$allowloc}}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
{{include file="field_input.tpl" field=$email}}
|
{{include file="field_input.tpl" field=$email}}
|
||||||
{{include file="field_password.tpl" field=$password4}}
|
{{include file="field_password.tpl" field=$password4}}
|
||||||
{{include file="field_custom.tpl" field=$timezone}}
|
{{include file="field_custom.tpl" field=$timezone}}
|
||||||
|
{{include file="field_select.tpl" field=$language}}
|
||||||
{{include file="field_input.tpl" field=$defloc}}
|
{{include file="field_input.tpl" field=$defloc}}
|
||||||
{{include file="field_checkbox.tpl" field=$allowloc}}
|
{{include file="field_checkbox.tpl" field=$allowloc}}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue