首页 文章

使用PHP在网站上切换语言

提问于
浏览
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文件中的所有新节点,从而更改语言 .

我只是想知道是否有另一种方法可以使用别的东西重置“$ lang”变量,而不是“$ _POST”或“$ _GET” . 我也不想使用查询字符串 . 我知道我可以使用JavaScript或jQuery来实现这一目标,但我想让网站对JavaScript不太可靠 .

我很感激任何想法或建议 .

谢谢

5 回答

  • 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
    
  • 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中 .

  • 0

    如何将其存储在cookie中?

  • 0

    最常见的方法是将其用作url的一部分,并在页面加载时将其解压缩:

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

    你在使用框架吗?

  • 0

    传递语言标识符的最常用方法是子域 .

    http://en.wikipedia.com/

    两个子域都应指向同一目录,并且可以从HTTP_HOST中轻松提取实际语言

    并且用于存储语言文件的解决方案是 gettext

相关问题