【问题标题】:Multilanguage site works on localhost but not on the Internet多语言站点可在 localhost 上运行,但不能在 Internet 上运行
【发布时间】: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


【解决方案1】:
  • 确保您的文件在设置会话之前不回显任何内容
  • 如果您将文件保存为 UTF ,请确保它是没有 BOM 的 UTF
  • 在 ini 文件中禁用 display_errorsin。试试ini_set('display_errors',false);

希望对你有帮助,这个问题我遇到过很多次了。

【讨论】:

  • 1 - session_start() 在每个文件的顶部,2 - 每个文件都是 UTF-8,3 - 放在哪里?在哪个文件中,我在select.php下面的header.php中做了,还是不能正常工作...
  • UTF-8有2种,尝试安装notepad-plus-plus.org(notepad++),打开里面的文件,在菜单中选择'encoding>utf-8 without BOM',作为UTF -8 与 BOM 一起在文件的开头添加了一些额外的位,甚至可能被浏览器解释为新行!
  • 并尝试查看该页面的来源,可能有一些文字以某种方式打印
  • 它已经设置为没有BOM的UTF-8,并且没有空格,文本等......我认为这是服务器问题......我会尝试找出更多关于那个......顺便说一句,谢谢。
  • 尝试使用这个文档类型:&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;,或者给我一个链接,我会帮你检查一下
猜你喜欢
  • 2011-10-30
  • 1970-01-01
  • 2021-11-23
  • 2021-07-02
  • 2014-10-07
  • 1970-01-01
  • 2018-11-25
  • 2021-12-14
  • 2015-02-26
相关资源
最近更新 更多