我正在开发一个多语言站点(es和en),并且当用户单击任何一种语言按钮时,我需要更改整个站点的语言。我将会话变量存储在config.php
中,并使用require
语句以所选语言加载页面:
<?php
session_start();
if (!isset($_POST['lang']) && (!isset($_SESSION['lang']))) {
$_POST['lang'] = 'en';
$_SESSION['lang'] = $_POST['lang'];
} else if (isset($_POST['lang']) && $_SESSION['lang'] != $_POST['lang'] && !empty($_POST['lang'])) {
if($_POST['lang'] == 'en')
$_SESSION['lang'] = 'en';
else if ($_POST['lang'] == 'es')
$_SESSION['lang'] = 'es';
}
require "lang/" . $_SESSION['lang'] . ".php";
echo $_SESSION['lang'];
?>
en.php
<?php
$lang = array(
'mainTitle' => 'What is our business?',
'mainDescription' => 'Our description'
);
?>
然后,我在main.js
中进行AJAX调用,以在单击任意一种语言按钮时更改会话变量
function loadDoc(str) {
$.ajax({
type: 'POST',
// this is to prevent cached results
url: 'php/config.php?t=' + Math.random(),
data: {
lang: str
},
success: function(result) {
console.log('Session language: ' + result)
},
})
}
$('.langContainer .es').click(() => {
loadDoc('es')
})
$('.langContainer .en').click(() => {
loadDoc('en')
})
尽管AJAX成功函数返回更改后的会话变量,但调用不会更改网站的语言,直到我重新加载它,这令人感到沮丧。
通过从带有锚标签的任何按钮发送GET请求,这可以与重新加载完美配合,但是我想知道是否可以使用AJAX更新会话变量,以便内容以适当的语言更改而无需刷新页面。