0

我正在努力改变语言而不离开当前的 PHP 站点。这是到目前为止我提出的代码,它仅在主页上运行良好,我越深入,它显示的链接就越多。

    function print_languages()
    {
        global $sipnati, $phrase;

        $sql = $sipnati->db->query("
                    SELECT " . (MYSQL_QUERYCACHE ? "SQL_CACHE " : "") . "languageid, languagecode, title, canselect
                    FROM " . DB_PREFIX . "language
            ", 0, null, __FILE__, __LINE__);
        $html = '';
        while ($res = $sipnati->db->fetch_array($sql, DB_ASSOC))
                    {
                        $params = $_GET;
                        $params['lang'] = $res['languagecode'];
                        $qs = '?';
                        foreach($params as $k=>$v)
                        {
                          $qs .= $k.'='.urlencode($v).'&';
                          $html .= '<a class="flagi" href="' . substr($_SERVER['PHP_SELF'].$qs, 0, -1) . '"><img src="images/default/flag-' . $v . '.png" /></a>';
                        }

                    }
                    unset($res);

        return $html;
    }

请帮帮我。

4

1 回答 1

1

在开发多语言网站之前,请注意以下要素:

  • 为了引用您的网站,一个页面链接必须有一种且只有一种语言。
    例如http://mydomain.com/mypage.php => 英语或其他语言的内容,但不能同时使用这两种语言,即使通过自动检测用户语言也是如此。使用http://fr.mydomain.com/mypage.phphttp://mydomain.it/mypage.phphttp://mydomain.com/en_US/mypage.php
    如果您不考虑这种帮助,您将扼杀自己的 SEO,使其在地板上流血。
  • 您可以使用 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 自动检测用户语言。
    例如 HTTP_ACCEPT_LANGUAGE => fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
  • 按语言分隔数据(按语言一个版本,您网站上的每种语言只有一个版本,避免在英文网站上使用法语内容)。
    您可以使用多个表(不推荐)、多个数据库(方便但不可持续)、多行(方便但不可持续)或带有语言参考的一行(从概念上讲是最好的解决方案,但它意味着很多查询。)

对于您的问题...(是的,我有一个答案给您:D)您是否将所选语言保存在 Session 或 Cookie 中?我认为我们缺少很多信息:

  • 您保存所选语言的位置。
  • “我越深入,它显示的链接就越多。” 你是什​​么意思 ?
  • 你在做什么$params = $_GET; $params['lang'] = $res['languagecode'];……
  • 你的语言系统的其余部分是什么?
于 2013-10-19T07:39:59.647 回答