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 和尼娜
- 在使用
$_SESSION
之前,您应该始终调用 session_start()
。您在 switch_lang.php
中错过了它。看here.
- 请你格式化你的代码,这一行很难阅读。
这主要是评论,但space仅限于评论框。
我很难理解您的问题和应用程序的架构。
为什么默认为英语而不是使用浏览器发送的语言首选项?当然,为用户提供一种覆盖语言偏好的方法是有意义的。就个人而言,我会使用专用的子域来保留选择,但会话是保留值的合适位置。
How do I make the Sessions change?
只需将 selected 语言分配给会话变量...
$_SESSION['prefers_lang']=....
如何从前端到后端获取值取决于您,但是使用上面的 select 小部件,
$_SESSION['prefers_lang']=$_GET['lang'];
但是,当 ASCII 中有语义上重要的标准代码(en、fr、de....)时,为什么要使用整数来表示语言。
简介
你好,
我们正在为一家小旅馆建立一个 multi-language 网站,作为一个项目来加深我们的网络开发技能。到目前为止,这是一个很酷的项目,与 Whosebug 一起,我们可以解决很多疑问。涂料!
但是,我已经研究了很多,但是 multi-language php 帖子中的 none(
问题 每当我尝试 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 和尼娜
- 在使用
$_SESSION
之前,您应该始终调用session_start()
。您在switch_lang.php
中错过了它。看here. - 请你格式化你的代码,这一行很难阅读。
这主要是评论,但space仅限于评论框。
我很难理解您的问题和应用程序的架构。
为什么默认为英语而不是使用浏览器发送的语言首选项?当然,为用户提供一种覆盖语言偏好的方法是有意义的。就个人而言,我会使用专用的子域来保留选择,但会话是保留值的合适位置。
How do I make the Sessions change?
只需将 selected 语言分配给会话变量...
$_SESSION['prefers_lang']=....
如何从前端到后端获取值取决于您,但是使用上面的 select 小部件,
$_SESSION['prefers_lang']=$_GET['lang'];
但是,当 ASCII 中有语义上重要的标准代码(en、fr、de....)时,为什么要使用整数来表示语言。