多语言Web中的PHP动态URL

时间:2017-09-06 13:49:41

标签: php url-rewriting

大家好,请提前帮忙! 我有一个类似于this example的多语言网站。一切都运行得很好,但现在我想根据选择的语言改变URL。例如,如果我的页面被称为 perfil.php ,当我选择英语语言时,应该是 profile.php ,并且网络中的所有链接也应该转换为英语。我正在浏览另一个问题,但大多数人通过htaccess提供解决方案。这应该可行,但我需要将该配置(或翻译)存储到我的数据库中,以便用户可以在需要时进行更改。

有什么想法吗? 再次感谢你!

2 个答案:

答案 0 :(得分:1)

您可以在一些名为语言文件的文件中使用常量,然后按所选语言要求/包含它们:

english.php

const PROFILE = "profile";

spanish.php

const PROFILE = "perfil";

主文件:

require $language_selected . ".php";
echo '<a href="' . PROFILE . '.php">';

答案 1 :(得分:1)

这部分应该是评论(但有点长)

您提供的链接中描述的方法是实现语言选择的合理方式,但是检测选择的方法很差。

您的浏览器已经告诉服务器它认为是哪种语言should respond in。大多数网络服务器都有multiplexing different language content的机制。然而,后者意味着硬连接浏览器的选择,而没有提供一种简单的方法来覆盖行为。

我之前使用的方法是这样的:

 $use_lang='en-GB';
 if (isset($_COOKIE['userlang']) 
    && is_language_supported($_COOKIE['userlang'])) {
    $use_lang=$_COOKIE['userlang'];
 } else if ($proposedlang=supported_lang_in($_SERVER['Accept-Language'])) {
    $use_lang=$proposedlang;
 }

 function supported_lang_in($str)
 {
     $l=array();
     $opts=explode(',', $str);
     foreach ($opts as $v) {
       list($p, $weight)=explode(';', $v);
       if ($weight) {
          list($dummy, $weight)=explode('=', $weight);
          $weight=float($weight);
       } 
       if (!$weight) {
          $weight=1.0;
       }
       if (isset($l[$weight])) {
          $weight-=0.001;
       }
       $l[$weight]=$p;
     }
     krsort($p); // preferred first
     foreach ($p as $proposed) {
        if ('*'==$proposed) {
            return false;
        }
        if (is_language_supported($proposed)) {
            return $lang;
        }
     }
     return false;
  }

现在谈到你问的问题......

维护不同的URL以引用相同的内容然后取消引用内容中的语言似乎是一个非常拜占庭式的问题解决方案。您不仅需要将输入映射到URL,还需要将输出中的任何URL重写为适当的表示。

虽然拥有语义上有意义的URL是一个明确的奖励,但是要花很长时间来动态地定制这些URL并不是最好的利用你的时间。