Skip to content

Commit 4b56d84

Browse files
committed
3.1.3 RC-1
fix: site stays on English instead of going to local default language
1 parent cd3a852 commit 4b56d84

11 files changed

Lines changed: 222 additions & 94 deletions

File tree

api.php

Lines changed: 80 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -28,93 +28,102 @@
2828
/** @var LanguageHandler $languageHandler */
2929

3030
global $xlanguage, $xoopsConfig;
31-
require_once XOOPS_ROOT_PATH . '/modules/xlanguage/include/vars.php';
3231

33-
//$cookie_prefix = preg_replace("/[^a-z_0-9]+/i", "_", preg_replace("/(http(s)?:\/\/)?(www.)?/i","",XOOPS_URL));
34-
$cookie_var = XLANGUAGE_LANG_TAG;
35-
$utility = new Utility();
32+
$helper = Helper::getInstance();
33+
34+
require $helper->path( 'include/vars.php');
35+
36+
//$cookie_prefix = preg_replace("/[^a-z_0-9]+/i", "_", preg_replace("/(http(s)?:\/\/)?(www.)?/i", "", XOOPS_URL));
37+
$cookie_var = XLANGUAGE_LANG_TAG;
38+
$utility = new Utility();
3639

3740
$xlanguage['action'] = false;
3841
$langTag = Request::getString(XLANGUAGE_LANG_TAG, '', 'GET');
3942
if (!empty($langTag)) {
40-
$cookie_path = '/';
41-
setcookie($cookie_var, $langTag, time() + 3600 * 24 * 30, $cookie_path, '', 0);
42-
$xlanguage['lang'] = $langTag;
43-
} elseif (!empty($_COOKIE[$cookie_var])) {
44-
$xlanguage['lang'] = $_COOKIE[$cookie_var];
43+
//comment out the line 45 and line 128 if you want to switch also the Admin's language.
44+
//Otherwise the Admin will remain using your default language set in Site Preferences
45+
if (!empty($_GET[XLANGUAGE_LANG_TAG])) {
46+
$cookie_path = '/';
47+
setcookie($cookie_var, $langTag, time() + 3600 * 24 * 30, $cookie_path, '', 0);
48+
$xlanguage['lang'] = $langTag;
49+
} elseif (!empty($_COOKIE[$cookie_var])) {
50+
$xlanguage['lang'] = $_COOKIE[$cookie_var];
4551

46-
/* FIXME: shall we remove it? */
52+
/* FIXME: shall we remove it? */
4753

48-
// if (preg_match("/[&|\?]\b".XLANGUAGE_LANG_TAG."\b=/i",$_SERVER['REQUEST_URI'])) {
49-
// } elseif (strpos($_SERVER['REQUEST_URI'], "?")) {
50-
// $_SERVER['REQUEST_URI'] .= "&".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
51-
// } else {
52-
// $_SERVER['REQUEST_URI'] .= "?".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
53-
// }
54-
55-
} elseif ($lang = $utility::detectLang()) {
56-
$xlanguage['lang'] = $lang;
57-
} else {
58-
$xlanguage['lang'] = $xoopsConfig['language'];
59-
}
54+
// if (preg_match("/[&|\?]\b".XLANGUAGE_LANG_TAG."\b=/i",$_SERVER['REQUEST_URI'])) {
55+
// } elseif (strpos($_SERVER['REQUEST_URI'], "?")) {
56+
// $_SERVER['REQUEST_URI'] .= "&".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
57+
// } else {
58+
// $_SERVER['REQUEST_URI'] .= "?".XLANGUAGE_LANG_TAG."=".$xlanguage["lang"];
59+
// }
6060

61-
$helper = Helper::getInstance();
62-
$languageHandler = $helper->getHandler('Language');
63-
$languageHandler->loadConfig();
64-
$lang = $languageHandler->getByName($xlanguage['lang']);
65-
if (is_object($lang) && strcasecmp($lang->getVar('lang_name'), $xoopsConfig['language'])) {
66-
if ($lang->hasBase()) {
67-
$xoopsConfig['language'] = $lang->getVar('lang_name');
61+
} elseif ($lang = $utility::detectLang()) {
62+
$xlanguage['lang'] = $lang;
6863
} else {
69-
$lang_base = $languageHandler->getByName($lang->getVar('lang_base'));
70-
if (is_object($lang_base)) {
71-
$xlanguage['charset_base'] = $lang_base->getVar('lang_charset');
72-
$xlanguage['action'] = true;
73-
$xoopsConfig['language'] = $lang_base->getVar('lang_name');
74-
unset($lang_base);
75-
}
76-
}
77-
if ($lang->getVar('lang_charset')) {
78-
$xlanguage['charset'] = $lang->getVar('lang_charset');
64+
$xlanguage['lang'] = $xoopsConfig['language'];
7965
}
80-
if ($lang->getVar('lang_code')) {
81-
$xlanguage['code'] = $lang->getVar('lang_code');
66+
67+
$helper = Helper::getInstance();
68+
$languageHandler = $helper->getHandler('Language');
69+
$languageHandler->loadConfig();
70+
$lang = $languageHandler->getByName($xlanguage['lang']);
71+
if (is_object($lang) && strcasecmp($lang->getVar('lang_name'), $xoopsConfig['language'])) {
72+
if ($lang->hasBase()) {
73+
$xoopsConfig['language'] = $lang->getVar('lang_name');
74+
} else {
75+
$lang_base = $languageHandler->getByName($lang->getVar('lang_base'));
76+
if (is_object($lang_base)) {
77+
$xlanguage['charset_base'] = $lang_base->getVar('lang_charset');
78+
$xlanguage['charset'] = $lang->getVar('lang_charset') ?? '';
79+
$xlanguage['code'] = $lang->getVar('lang_code' ?? '');
80+
$xlanguage['action'] = true;
81+
$xoopsConfig['language'] = $lang_base->getVar('lang_name');
82+
unset($lang_base);
83+
}
84+
}
85+
// if ($lang->getVar('lang_charset')) {
86+
// $xlanguage['charset'] = $lang->getVar('lang_charset');
87+
// }
88+
// if ($lang->getVar('lang_code')) {
89+
// $xlanguage['code'] = $lang->getVar('lang_code');
90+
// }
8291
}
83-
}
84-
unset($lang);
92+
unset($lang);
8593

86-
$GLOBALS['xlanguageHandler'] = $languageHandler;
94+
$GLOBALS['xlanguageHandler'] = $languageHandler;
8795

88-
if ($xlanguage['action']) {
89-
//if (CONV_REQUEST && (!empty($_GET)||!empty($_POST))) {
90-
if (!empty($_POST)) {
91-
$in_charset = $xlanguage['charset'];
92-
$out_charset = $xlanguage['charset_base'];
96+
if ($xlanguage['action']) {
97+
//if (CONV_REQUEST && (!empty($_GET)||!empty($_POST))) {
98+
if (!empty($_POST)) {
99+
$in_charset = $xlanguage['charset'];
100+
$out_charset = $xlanguage['charset_base'];
93101

94-
//$CONV_REQUEST_array=array("_GET", "_POST");
95-
$CONV_REQUEST_array = ['_POST'];
96-
foreach ($CONV_REQUEST_array as $HV) {
97-
if (!empty(${$HV})) {
98-
${$HV} = $utility::convertEncoding(${$HV}, $out_charset, $in_charset);
102+
//$CONV_REQUEST_array=array("_GET", "_POST");
103+
$CONV_REQUEST_array = ['_POST'];
104+
foreach ($CONV_REQUEST_array as $HV) {
105+
if (!empty(${$HV})) {
106+
${$HV} = $utility::convertEncoding(${$HV}, $out_charset, $in_charset);
107+
}
108+
$GLOBALS['HTTP' . $HV . '_VARS'] = ${$HV};
99109
}
100-
$GLOBALS['HTTP' . $HV . '_VARS'] = ${$HV};
101110
}
111+
ob_start('XoopsModules\Xlanguage\Utility::encodeCharSet');
112+
} else {
113+
ob_start('XoopsModules\Xlanguage\Utility::cleanMultiLang');
102114
}
103-
ob_start('XoopsModules\Xlanguage\Utility::encodeCharSet');
104-
} else {
105-
ob_start('XoopsModules\Xlanguage\Utility::cleanMultiLang');
106-
}
107115

108-
/*
109-
* hardcoded scripts for language switching in theme html files
110-
*
111-
* To use it:
112-
* 1 set "$xlanguage_theme_enable = true;"
113-
* 2 config options "$options = array("images", " ", 5); // display mode, delimitor, number per line"; Options for display mode: image - flag; text - text; dropdown - dropdown selection box with text
114-
* 3 insert "<{$smarty.const.XLANGUAGE_SWITCH_CODE}>" into your theme html anywhere you would like to see it present
115-
*/
116-
$xlanguage_theme_enable = true;
117-
if (!empty($xlanguage_theme_enable)) {
118-
$options = ['dropdown', ' ', 5]; // display mode, delimitor, number per line
119-
$utility::showSelectedLanguage($options);
116+
/*
117+
* hardcoded scripts for language switching in theme html files
118+
*
119+
* To use it:
120+
* 1 set "$xlanguage_theme_enable = true;"
121+
* 2 config options "$options = array("images", " ", 5); // display mode, delimitor, number per line"; Options for display mode: image - flag; text - text; dropdown - dropdown selection box with text
122+
* 3 insert "<{$smarty.const.XLANGUAGE_SWITCH_CODE}>" into your theme html anywhere you would like to see it present
123+
*/
124+
$xlanguage_theme_enable = true;
125+
if (!empty($xlanguage_theme_enable)) {
126+
$options = ['dropdown', ' ', 5]; // display mode, delimitor, number per line
127+
$utility::showSelectedLanguage($options);
128+
}
120129
}

blocks/xlanguage_blocks.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function b_xlanguage_select_show($options)
8484
$block['display'] = $options[0];
8585
$block['delimitor'] = $options[1];
8686
$block['number'] = $options[2];
87-
$block['selected'] = $xlanguage['lang'];
87+
$block['selected'] = $xlanguage['lang']??'';
8888
if ('images' === $options[0] || 'text' === $options[0]) {
8989
$query_string = htmlspecialchars(implode('&', $QUERY_STRING_new), ENT_QUOTES | ENT_HTML5);
9090
$query_string .= empty($query_string) ? '' : '&amp;';

class/Utility.php

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public static function loadConfig()
101101
*/
102102
public static function langDetect($str = '', $envType = '')
103103
{
104-
global $available_languages;
104+
require dirname(__DIR__) . '/include/vars.php';
105105
$lang = '';
106106

107107
if (!empty($available_languages)) {
@@ -130,7 +130,7 @@ public static function langDetect($str = '', $envType = '')
130130
*/
131131
public static function detectLang()
132132
{
133-
global $available_languages, $_SERVER;
133+
global $_SERVER;
134134

135135
// if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
136136
if (Request::hasVar('HTTP_ACCEPT_LANGUAGE', 'SERVER')) {
@@ -146,17 +146,17 @@ public static function detectLang()
146146
$xoops_lang = '';
147147
// 1. try to findout user's language by checking its HTTP_ACCEPT_LANGUAGE variable
148148

149-
// if (empty($lang) && !empty($HTTP_ACCEPT_LANGUAGE)) {
150-
// $accepted = explode(',', $HTTP_ACCEPT_LANGUAGE);
151-
// $acceptedCnt = count($accepted);
152-
// reset($accepted);
153-
// for ($i = 0; $i < $acceptedCnt; ++$i) {
154-
// $lang = static::langDetect($accepted[$i], 1);
155-
// if (strncasecmp($lang, 'en', 2)) {
156-
// break;
157-
// }
158-
// }
159-
// }
149+
if (empty($lang) && !empty($HTTP_ACCEPT_LANGUAGE)) {
150+
$accepted = explode(',', $HTTP_ACCEPT_LANGUAGE);
151+
$acceptedCnt = count($accepted);
152+
reset($accepted);
153+
for ($i = 0; $i < $acceptedCnt; ++$i) {
154+
$lang = static::langDetect($accepted[$i], 1);
155+
if (strncasecmp($lang, 'en', 2)) {
156+
break;
157+
}
158+
}
159+
}
160160

161161
//This returns the most preferred language "q=1"
162162
$lang = static::getPreferredLanguage();
@@ -167,7 +167,7 @@ public static function detectLang()
167167
}
168168
// 3. If we catch a valid language, configure it
169169
if (!empty($lang)) {
170-
$xoops_lang = $available_languages[$lang][1];
170+
$xoops_lang = isset($available_languages[$lang][1])?:'';
171171
}
172172

173173
return $xoops_lang;

docs/changelog.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
<h5>3.1.3 RC-1 [2021-08-18]</h5> Dev: XOOPS 2.5.11, PHP 7.4.22, PHP 8.0.9
2+
<hr>
3+
- fix site stays on English instead of going to local default language (liomj/mamba)
4+
15
<h5>3.1.2 Final [2021-08-13]</h5> Dev: XOOPS 2.5.11, PHP 7.4.22, PHP 8.0.9
26
<hr>
37
- set 'hasMain' in xoops_version.php to 0 (alain01/geekwright)
Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,56 @@
11
-
2-
lang_id: '1'
3-
weight: '1'
2+
lang_id: '13'
3+
weight: '3'
4+
lang_name: french
5+
lang_desc: French
6+
lang_code: fr
7+
lang_charset: UTF-8
8+
lang_image: french.gif
9+
-
10+
lang_id: '11'
11+
weight: '2'
412
lang_name: english
513
lang_desc: English
614
lang_code: en
715
lang_charset: UTF-8
816
lang_image: usa.gif
917
-
10-
lang_id: '2'
11-
weight: '2'
18+
lang_id: '12'
19+
weight: '4'
20+
lang_name: german
21+
lang_desc: Germany
22+
lang_code: de
23+
lang_charset: UTF-8
24+
lang_image: german.gif
25+
-
26+
lang_id: '14'
27+
weight: '1'
28+
lang_name: italian
29+
lang_desc: Italian
30+
lang_code: it
31+
lang_charset: UTF-8
32+
lang_image: italian.gif
33+
-
34+
lang_id: '17'
35+
weight: '1'
36+
lang_name: polish
37+
lang_desc: Polish
38+
lang_code: pl
39+
lang_charset: UTF-8
40+
lang_image: poland.gif
41+
-
42+
lang_id: '18'
43+
weight: '1'
1244
lang_name: spanish
1345
lang_desc: Spanish
1446
lang_code: es
1547
lang_charset: UTF-8
1648
lang_image: spanish.gif
49+
-
50+
lang_id: '19'
51+
weight: '1'
52+
lang_name: portuguese
53+
lang_desc: Portuguese
54+
lang_code: pr
55+
lang_charset: UTF-8
56+
lang_image: brazil.gif

testdata/english/xlanguage_ext.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
{ }
1+
-
2+
lang_id: '1'
3+
weight: '999'
4+
lang_name: Canada
5+
lang_desc: Canada
6+
lang_code: en
7+
lang_charset: UTF-8
8+
lang_image: canada.gif
9+
lang_base: english
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ }

testdata/french/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<script>history.go(-1);</script>

testdata/french/xlanguage_base.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
-
2+
lang_id: '13'
3+
weight: '3'
4+
lang_name: french
5+
lang_desc: French
6+
lang_code: fr
7+
lang_charset: UTF-8
8+
lang_image: french.gif
9+
-
10+
lang_id: '11'
11+
weight: '2'
12+
lang_name: english
13+
lang_desc: English
14+
lang_code: en
15+
lang_charset: UTF-8
16+
lang_image: usa.gif
17+
-
18+
lang_id: '12'
19+
weight: '4'
20+
lang_name: german
21+
lang_desc: Germany
22+
lang_code: de
23+
lang_charset: UTF-8
24+
lang_image: german.gif
25+
-
26+
lang_id: '14'
27+
weight: '1'
28+
lang_name: italian
29+
lang_desc: Italian
30+
lang_code: it
31+
lang_charset: UTF-8
32+
lang_image: italian.gif
33+
-
34+
lang_id: '17'
35+
weight: '1'
36+
lang_name: polish
37+
lang_desc: Polish
38+
lang_code: pl
39+
lang_charset: UTF-8
40+
lang_image: poland.gif
41+
-
42+
lang_id: '18'
43+
weight: '1'
44+
lang_name: spanish
45+
lang_desc: Spanish
46+
lang_code: es
47+
lang_charset: UTF-8
48+
lang_image: spanish.gif
49+
-
50+
lang_id: '19'
51+
weight: '1'
52+
lang_name: portuguese
53+
lang_desc: Portuguese
54+
lang_code: pr
55+
lang_charset: UTF-8
56+
lang_image: brazil.gif

testdata/french/xlanguage_ext.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-
2+
lang_id: '1'
3+
weight: '999'
4+
lang_name: Canada
5+
lang_desc: Canada
6+
lang_code: en
7+
lang_charset: UTF-8
8+
lang_image: canada.gif
9+
lang_base: english

0 commit comments

Comments
 (0)