简介 嗨, 我们正在为一家小酒店建立一个多语言网站,作为一个加深我们的网络开发技能的项目。到目前为止它是一个很酷的项目,与Stackoverflow一起,我们可以解决很多疑虑。笨蛋! 但是,我已经进行了很多研究,但没有一个多语言的PHP帖子(although somewhat helpful)似乎回答了我们正在寻找的内容(或者我们无法解决问题&#39)解决我们的案例)。 我们在4个不同语言的php MyAdmin数据库中存储了总共5页(主页;关于;房间;图库;联系人)的不同部分的内容,并为每种语言检索定义了$ _Sessions。标题和较少量的文本,例如一个按钮说"我们向您保证最低价格"存储在每种语言的数组中。 启动页面时,所有内容都以英语显示,以便我们知道两个阵列都工作且数据库已连接。
问题 每当我尝试选择网站上的下拉语言菜单选择语言时,页面(和任何其他页面)只需重新加载英语。 如何更改会话?我需要饼干吗?我需要使用" Get?"如果有,怎么样?
这是我的index.PHP的一部分。 每个列表对象都有一个我们用数字(1,2,3,4,5等)定义的lang_id,而不是en,ge,fr,pt,es等。 我希望每个列表项根据其会话进行更改,例如英语为1,德语为2 ...因此它可以同时从数组中检索数据+数据库中存储的值。
<div class="language">
<span><?php echo _t_language; ?></span> //_t_language comes from the array lang_en/gr...
<ul>
<li>
<a href="languages/switch_lang.php?lang=1">
<?php echo _t_english; ?>
</a>
</li>
<li>
<a href="languages/switch_lang.php?lang=2">
<?php echo _t_german; ?>
</a>
</li>
<li>
<a href="languages/switch_lang.php?lang=3">
<?php echo _t_french; ?>
</a>
</li>
(...)
</ul>
</div>
&#13;
我创建了一个包含switch_lang.php和define_lang.php的语言文件夹。 会话在define_lang.php中启动,在启动HTML之前包含该会话。 这是两个代码:
switch_lang.php:
<?php
//get current url
$goback=$_SERVER['HTTP_REFERER'];
$lang=$_GET['lang'];
$_SESSION['lang']=$lang;
header("location: $goback");
?>
&#13;
define_lang.php:
<?php
session_start();
//give session when first load the page
if($_SESSION["lang"]==""){
$_SESSION["lang"]="1";
}
if($_SESSION['lang']=='1') {
include('lang_en.php');
}else if($_SESSION['lang']=='2') {
include('lang_gr.php');
}else if($_SESSION['lang']=='3') {
include('lang_fr.php');
}else if($_SESSION['lang']=='4') {
include('lang_it.php');
}else if($_SESSION['lang']=='5') {
include('lang_pt.php');
}else if($_SESSION['lang']=='6') {
include('lang_es.php');
}
?>
&#13;
我们必须重定向任何东西吗?我们必须使用cookies吗?我们必须使用$ _Get吗?没有$ _Get也可以吗?它们如何组合在一起?
这已经差不多12点了,而且和其他人一样,我们已经无法理解错误了。任何帮助都会非常感激,在任何时候,我们都准备回馈建议。谢谢,祝你有个美好的夜晚, Spastnudel&amp;尼娜
答案 0 :(得分:0)
session_start()
之前,您应该始终致电$_SESSION
。你错过了switch_lang.php
。看here. 答案 1 :(得分:0)
这主要是评论,但评论框中的空间有限。
我很难理解您的问题和应用程序的体系结构。
为什么默认使用英语而不是使用浏览器发送的语言首选项?当然,为用户提供覆盖语言偏好的手段是有道理的。就个人而言,我会使用专用的子域来坚持选择,但会话是保持价值的合适位置。
如何更改会话?
只需将选定的语言分配给会话变量......
$_SESSION['prefers_lang']=....
如何从前端到后端获取值取决于您,但使用上面的选择小部件,
$_SESSION['prefers_lang']=$_GET['lang'];
但是当ASCII(en,fr,de ....)中存在语义上重要的标准代码时,为什么要使用整数来表示语言。