【发布时间】:2011-02-13 17:44:21
【问题描述】:
我创建了一个网站,上面有 3 个语言,网站工作正常(本地主机)但是当我上传它时,默认语言是 EN,每当我在网络上更改语言时,比如说从 EN 到 FR,页面继续在这种情况下,该语言在 FR 上并将我重定向到主页上,并且网站上的所有文本都在 FR 上,没关系,但在那之后,当我尝试点击让我们说一下我们时,然后它自己将其更改回默认语言,并显示该页面(关于我们),但默认语言... 以下是代码示例...
这是 select.php,我在每个页面上都包含一次这个文件...
<?php
session_start();
header('Cache-control: private'); // IE 6 FIX
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
// register the session and set the cookie
$_SESSION['lang'] = $lang;
setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en';
}
switch ($lang) {
case 'en':
$lang_file = 'lang.en.php';
break;
case 'fr':
$lang_file = 'lang.fr.php';
break;
case 'de':
$lang_file = 'lang.de.php';
break;
default:
$lang_file = 'lang.en.php';
}
include_once 'lang/'.$lang_file;
这是 lang.en.php...
$lang = array();
// menu
$lang['txt1'] = 'Home';
$lang['txt2'] = 'About Us';
$lang['txt3'] = 'Services';
$lang['txt4'] = 'Contact';
其他两种语言也一样...
我只是把 index.php 这个...
<ul>
<li><a href="index.php"><em><b><?php echo $lang['txt1'];?></b></em></a></li>
<li><a href="about.php"><em><b><?php echo $lang['txt2'];?></b></em></a></li>
<li><a href="services.php"><em><b><?php echo $lang['txt3'];?></b></em></a></li>
<li><a href="contact.php"><em><b><?php echo $lang['txt4'];?></b></em></a></li>
</ul>
当使用默认语言时,我可以正常导航,我可以毫无问题地进入任何页面,但问题是当我尝试将网站更改为其他语言时, 假设我在 www.example.com/about.php 页面上,我想在 FR 上看到这个页面,网站将重定向我,在 www.example.com/index.php?lang=fr 上(这是好的)然后我可以在网站上看到 FR 语言,但只能在主页上看到,但是当我尝试访问 www.example.com/about.php 时,网站会放回默认语言,在这种情况下是 EN ...
奇怪的是这个脚本在本地主机上运行良好...
知道为什么吗?
更新:
OUTPUT:
Array ( [lang] => lang value to put in session [something_1] => something value to put in session )
Array ( [lang] => new lang value but not set in session [something_1] => something value to put in session )
<?php
session_start();
$lang = "lang value to put in session";
$something = "something value to put in session";
$_SESSION['lang'] = $lang;
$_SESSION['something_1'] = $something;
print_r($_SESSION);
$lang = "new lang value but not set in session";
$something = "new something value but not set in session";
print_r($_SESSION);
PHP 不应更改第二个数组
Array ( [lang] => lang value to put in session [something_1] => something value to put in session )
Array ( [lang] => new lang value but not set in session [something_1] => something value to put in session )
应该是这样的:
Array ( [lang] => lang value to put in session [something_1] => something value to put in session )
Array ( [lang] => lang value to put in session [something_1] => something value to put in session )
知道为什么吗?
【问题讨论】:
-
这需要基本的调试。会话值是否被保存?我们无法仅从代码中看出,您需要提供更详细的信息
-
请不要再弄乱你问题的格式了。它完全不可读。我们一直在修复它,而您正在回滚更改。不要使用“`”来格式化大代码块。在每行代码之前使用 4 个缩进空格。你也可以看看这里:stackoverflow.com/editing-help
-
抱歉,感谢您让我的帖子更具可读性...
标签: php html web multilingual