对于多语言网站,PHP无法使用$ _Session检索正确的语言

时间:2016-02-27 22:29:36

标签: php session multilingual

简介 嗨, 我们正在为一家小酒店建立一个多语言网站,作为一个加深我们的网络开发技能的项目。到目前为止它是一个很酷的项目,与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;
&#13;
&#13;

我创建了一个包含switch_lang.php和define_lang.php的语言文件夹。 会话在define_lang.php中启动,在启动HTML之前包含该会话。 这是两个代码:

switch_lang.php:

&#13;
&#13;
<?php
//get current url
$goback=$_SERVER['HTTP_REFERER'];
$lang=$_GET['lang'];
$_SESSION['lang']=$lang;

header("location: $goback");
?>
&#13;
&#13;
&#13;

define_lang.php:

&#13;
&#13;
<?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;
&#13;
&#13;

我们必须重定向任何东西吗?我们必须使用cookies吗?我们必须使用$ _Get吗?没有$ _Get也可以吗?它们如何组合在一起?

这已经差不多12点了,而且和其他人一样,我们已经无法理解错误了。任何帮助都会非常感激,在任何时候,我们都准备回馈建议。谢谢,祝你有个美好的夜晚, Spastnudel&amp;尼娜

2 个答案:

答案 0 :(得分:0)

  1. 在使用session_start()之前,您应该始终致电$_SESSION。你错过了switch_lang.php。看here.
  2. 你可以格式化你的代码吗,很难把它读成这一行。

答案 1 :(得分:0)

这主要是评论,但评论框中的空间有限。

我很难理解您的问题和应用程序的体系结构。

为什么默认使用英语而不是使用浏览器发送的语言首选项?当然,为用户提供覆盖语言偏好的手段是有道理的。就个人而言,我会使用专用的子域来坚持选择,但会话是保持价值的合适位置。

  

如何更改会话?

只需将选定的语言分配给会话变量......

 $_SESSION['prefers_lang']=....

如何从前端到后端获取值取决于您,但使用上面的选择小部件,

 $_SESSION['prefers_lang']=$_GET['lang'];

但是当ASCII(en,fr,de ....)中存在语义上重要的标准代码时,为什么要使用整数来表示语言。