Add user language in settings, use that field as language for UI

This commit is contained in:
fabrixxm 2015-11-08 14:23:49 +01:00
parent e74916d395
commit fb3ac68cc0
7 changed files with 80 additions and 47 deletions

View file

@ -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 // set default to 1 for any without q factor
foreach ($langs as $lang => $val) { foreach ($langs as $lang => $val) {
if ($val === '') $langs[$lang] = 1; if ($val === '') $langs[$lang] = 1;
} }
// sort list based on value // sort list based on value
arsort($langs, SORT_NUMERIC); arsort($langs, SORT_NUMERIC);
} }
} }
if(isset($langs) && count($langs)) { if(isset($langs) && count($langs)) {
@ -161,3 +161,26 @@ 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;
}

View file

@ -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);

View file

@ -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'))) {

View file

@ -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), ''),

View file

@ -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}}

View file

@ -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}}

View file

@ -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}}