PHP 未使用 $_Session 为多语言网站检索正确的语言

PHP doesn't retrieve the right language with $_Session for a multilanguage website

简介 你好, 我们正在为一家小旅馆建立一个 multi-language 网站,作为一个项目来加深我们的网络开发技能。到目前为止,这是一个很酷的项目,与 Whosebug 一起,我们可以解决很多疑问。涂料! 但是,我已经研究了很多,但是 multi-language php 帖子中的 none( 似乎回答了我们正在寻找的内容(或者我们无法翻译问题的解决方案)。 我们在 php MyAdmin 数据库中以 4 种不同的语言存储了总共 5 页(主页;关于;房间;画廊;联系方式)的不同部分的内容,并为每种语言检索定义了 $_Sessions。标题和少量文本,例如一个按钮 "We guarantee you the lowest rate" 存储在每种语言的数组中。 启动页面的时候,所有的内容都是英文显示的,这样我们就知道数组都工作了,数据库也连接上了。

问题 每当我尝试 select 在网站上选择下拉语言菜单的语言时,页面(和任何其他页面)都会重新加载英语。 如何更改会话?我需要饼干吗?我是否需要使用 "Get?" 如果是,如何使用?

这是我的 index.PHP 的一部分。 每个列表 object 都有一个 lang_id,我们用数字(1、2、3、4、5 等)定义,而不是通常的 en、ge、fr、pt、es 等
我希望每个列表项根据其 session 进行更改,例如英语到 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>

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

switch_lang.php:

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

header("location: $goback");
?>

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');
    }     
?>

我们必须重定向任何东西吗?我们必须使用 cookie 吗?我们必须使用 $_Get 吗?如果没有 $_Get,它也能工作吗?这一切如何组合在一起?

快 12 点了,和这里的许多其他人一样,我们完全没有意识到出了什么问题。任何帮助将不胜感激,我们随时准备回馈建议。谢谢,祝你有个愉快的夜晚, Spastnudel 和尼娜

  1. 在使用 $_SESSION 之前,您应该始终调用 session_start()。您在 switch_lang.php 中错过了它。看here.
  2. 请你格式化你的代码,这一行很难阅读。

这主要是评论,但space仅限于评论框。

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

为什么默认为英语而不是使用浏览器发送的语言首选项?当然,为用户提供一种覆盖语言偏好的方法是有意义的。就个人而言,我会使用专用的子域来保留选择,但会话是保留值的合适位置。

How do I make the Sessions change?

只需将 selected 语言分配给会话变量...

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

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

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

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