2

我只是在寻找一些建议。我正在创建一个提供(至少)2 种语言的网站。我设置它的方式是使用语言的 XML 文件,PHP 来检索 XML 节点中的值。假设您有任何 XML 文件,加载如下:

<?php
$lang = "en";
$xmlFile = simplexml_load_file("$lang/main.xml");
?>

一旦文件内容可用,我只需将每个节点输出到 HTML 标记中,如下所示:

<li><?php echo $xmlFile->navigation->home; ?></li>
which in turn is equal to : <li><a href="#">Home</a></li>
as a nav bar link.

现在,我切换语言的方式是通过“$_POST”更改“$lang”变量的值,如下所示:

if(isset($_POST['es'])){
$lang = "es";
}elseif(isset($_POST['en'])){
$lang = "en";
}

"$lang" 变量的值被重置并加载新文件,同时从新 XML 文件中加载所有新节点,从而更改语言。

我只是想知道是否有另一种方法可以使用“$_POST”或“$_GET”以外的其他方法来重置“$lang”变量。我也不想使用查询字符串。我知道我可以使用 JavaScript 或 jQuery 来实现这一点,但我想让网站不太依赖 JavaScript。

我会很感激任何想法或建议。

谢谢

4

4 回答 4

2

我会选择会话变量。

在页面的开头,您将拥有:

 if (!isset($_SESSION['language']))
    $_SESSION['language'] = "en";

然后你会有一些链接来改变语言

<a href="changelanguage.php?lang=es">Español</a>
<a href="changelanguage.php?lang=fr">Français</a>

Changelanguage.php 就像

$language = $_GET['lang'];
// DO SOME CHECK HERE TO ENSURE A CORRECT LANGUAGE HAS BEEN PASSED
// OTHERWISE REVERT TO DEFAULT
$_SESSION['language'] = $language;
header("Location:index.php"); // Or wherever you want to redirect
于 2010-05-21T06:12:04.800 回答
1

你有没有想过使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]?像这样的东西:

if ($_SERVER["HTTP_ACCEPT_LANGUAGE"]) { 
    $langs = explode(",", $_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
    for ($i = 0; $i < count($langs); $i++) { 
        if ($langs[$i] == "en") { 
            $lang = "en";
            break;
        } 
        elseif($langs[$i] == "es") {
            $lang = "es";
            break;
        }
    } 
}

当然,switch 语句在这里可能更合适一些,而且还有更多的方式来表示英语,而不仅仅是 en,但这应该可以在用户不必做任何事情的情况下工作。如果他们手动更改,请按照 Ben 的回答将其存储在 cookie 中。

于 2010-05-21T04:20:41.757 回答
0

最常见的方法是将其用作 url 的一部分并在页面加载时提取它:

http://www.your-site.com/en/somepage

你在使用框架吗?

于 2010-05-21T00:56:34.650 回答
0

传递语言标识符的最常见方法是子域。

http://en.wikipedia.com/

两个子域都应该指向同一个目录,并且可以很容易地从 HTTP_HOST 中提取实际语言

对于存储语言文件,解决方案是gettext

于 2010-05-21T02:13:43.697 回答