我有一个多语言网站 - 英语和德语。
我有一个文件content.php
,其中存储了我的英语和德语内容。
以下是一个例子:
$content_en = array(
'title' => 'title',
'type' => 'photography',
);
$content_de = array(
'title' => 'titel',
'type' => 'fotografie',
);
在我的index.php
中,我得到了这样的值:
// Checking for browser default language
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
// Storing browser default language in variable – either `$content_en` or `content_de`
$content_lang = ${ 'content' . '_' . $lang };
// Output title in browser default’s language
echo $content_lang['title'];
但我也想在我的网站上安装语言切换器,以防浏览器默认语言不正确:
<button class="lang-en">EN</button>
<button class="lang-de">DE</button>
现在,我想根据$lang
或en
中点击的按钮更改变量de
。重要的是:我喜欢在没有页面刷新的情况下更改的值。
我知道下面的代码不能像这样工作,但它确实描述了我想要实现的目标:
$(' .lang-en' ).click( function( e ) {
e.preventDefault();
$lang = 'en';
});
$(' .lang-de' ).click( function( e ) {
e.preventDefault();
$lang = 'de';
});
我不确定它是否有可能(例如使用ajax)但是也许有人有解决我问题的线索。
非常感谢!
答案 0 :(得分:1)
PHP是服务器端代码,它只在页面加载时运行 - 一旦运行,它的变量被遗忘并报废,所以是的,你现在可能认为它是不可能的......好吧,没有。
AJAX使用请求执行脚本,但有一个使用响应的精彩发明;我们可以稍后偶像这个,但是现在,让我们专注于你的目标。
$('#lang-de').click(function() {
$.post('index.php' { lang: de })
.done(function(data) {
});
});
在你的索引PHP文件中,你可以让POST控制器确定页面的语言,也可以作为会话捕获,即:
if(isset($_POST['lang']) || isset($_SESSION['lang'])):
// Code to change language
// Update the Session language
endif;
我们可以使用会话,所以一旦选择了语言,我们就不需要在每个页面上不断发布帖子以了解要使用的语言。
关于AJAX的事情是,通过页面输出收集响应,因此,您只需使用:
<div id="page-container">
然后在.done
函数中使用它:
$('#page-container').html = data;
然后,这将把所有新语言和页面加载到当前的语言和页面中。
答案 1 :(得分:1)
您可以通过ajax请求您的php页面。
var content;
$.ajax({
url: "yourServerUrl/getLang.php?lan=en",
success: function(result){
content = result;
}
});
现在,此内容必须包含getLang.php
返回的对象getLang.php可以如下。
<?php
$content_en = array(
'title' => 'title',
'type' => 'photography',
);
$content_de = array(
'title' => 'titel',
'type' => 'fotografie',
);
if($_GET["lan"]=="en"){
echo json_encode($content_en);
}
else{
echo json_encode($content_de);
}
所以现在点击你的按钮,你可以调用php作为
$(' .lang-en' ).click( function( e ) {
e.preventDefault();
$.ajax({
url: "yourServerUrl/getLang.php?lan=en",
success: function(result){
content = result;
}
});
$lang = 'en';
});
$(' .lang-de' ).click( function( e ) {
e.preventDefault();
$.ajax({
url: "yourServerUrl/getLang.php?lan=de",
success: function(result){
content = result;
}
});
$lang = 'de';
});
现在让我们假设你有2个标签,说<h1 id="title"></h1>
并在您的页面上显示<h2 id="type"></h2>
以显示文字。
因此,您的ajax调用应如下所示进行修改。
$.ajax({
url: "yourServerUrl/getLang.php?lan=en",
success: function(result){
content = result;
$("#title").text(content.title);
$("#type").text(content.type);
}
});
这会根据需要自动将您的文字转到正确的位置并使用正确的语言。