【问题标题】:PHP multilanguage sitePHP 多语言网站
【发布时间】:2009-10-23 18:38:11
【问题描述】:

我想用 PHP 制作基于 SESSIONS 的多语言网站,比如这个网站untiny.com

我尝试使用此代码但无法正常工作:

    <?

session_start();
$lang = $_GET['lang'];
if (!isset($lang)) {
    include ('ar/language.php');
    $lang = "ar";
}
else if ($lang == "en" ) {include ('en/language.php'); $SESSION["lang"] = "en"; header("Location: http://it2.in/");}
else if ($lang == "ar" ) {include ('ar/language.php'); $SESSION["lang"] = "ar"; header("Location: http://it2.in/");}
else if ($lang != "ar" || "en") {header("Location: http://it2.in/"); header("Location: http://it2.in/");}

?>

任何人都可以帮助我。 谢谢


谢谢大家。 但是@现在没有任何效果,还有其他想法吗。

【问题讨论】:

    标签: php session multilingual


    【解决方案1】:

    可能您的问题在最后一行。它应该像这样工作:

    else if ($lang != "ar" || $lang != "en") {header("Location: http://it2.in/");}
    

    另外我建议你创建一个单独的数组来存储可用的语言

    $known_languages = array('en', 'ar'); ## just add new language here when you need
    session_start();
    
    ## if language is stored in SESSION then use it, otherwise use GET params
    if (array_key_exists('lang', $_SESSION)) {
        $lang = $_SESSION['lang'];
        include($lang.'/language.php'); 
        ## echo "You current language is <strong>$lang</strong>";
        include("page.php");
    }
    else {
        $lang = $_GET['lang'];
    
        ## if language is not set or is not available, then use default value
        if (!isset($lang) || !in_array($lang, $known_languages) {
            $lang = "ar";
        }
        include($lang.'/language.php'); 
        $SESSION["lang"] = $lang; 
        header("Location: http://it2.in/");
    }
    

    【讨论】:

    • 我尝试了这段代码,但是当我运行网站时出现循环错误“页面未正确重定向”
    • 尝试修改上面的代码并在脚本开头添加error_reporting(E_ALL)
    【解决方案2】:

    你能解释一下究竟是什么不起作用吗?

    您的 if 语句中有错误。最后一个 else-if 始终为真,因为您将比较结果与字符串“en”进行 ORing。 else 语句将完成这项工作。

    <?
    
        session_start();
        $lang = $_GET['lang'];
        if (!isset($lang)) {
            include ('ar/language.php');
            $lang = "ar";
        }
        else if ($lang == "en" ) {include ('en/language.php'); $SESSION["lang"] = "en"; header("Location: http://it2.in/");}
        else if ($lang == "ar" ) {include ('ar/language.php'); $SESSION["lang"] = "ar"; header("Location: http://it2.in/");}
        else {header("Location: http://it2.in/"); header("Location: http://it2.in/");}
    
    ?>
    

    【讨论】:

      【解决方案3】:
      $lang= $_GET['lang'];
      include $lang . "/language.php";
      

      默认情况下,Php 会禁用这些包含,因此您必须手动启用它。

      真正的问题是:language.php 中有什么?

      // en/language.php
      $MESSAGES[0] = "Hello";
      // es/language.php
      $MESSAGES[0] = "Hola";
      // fr/language.php
      

      然后在您的代码中执行:

      print "<h1>" . $MESSAGES[0] . "</h1>";
      

      这不会扩大,而且你的头脑会非常快地展开(等等,消息是 1023?或 1022?或 2149?)。请考虑将您的代码移植到 GetText,恕我直言,这是一个更好的解决方案,让您无需新代码即可添加新语言。这是来自谷歌的第一个热门,它将让您抢先一步。如果您需要更多信息,请四处看看。 http://www.phpdig.net/ref/rn26.html

      【讨论】:

      • 在 language.php 中这样的变量:$title 和 HTML 中:=$title?>
      • if ($_REQUEST['bday1'] && !$_REQUEST['bday2']) $error_user_forgot_to_add_birthday_to_page_1_but_he_wrote_on_page2 -> 糟糕的错误代码......再一次,这在现实生活中不会扩大。请注意。
      【解决方案4】:

      当你使用 header 函数时,总是考虑使用 exit();之后 停止执行代码

      <?php
      session_start();
      $lang = $_GET['lang'];
      if (!isset($lang)) {
          include ('ar/language.php');
          $lang = "ar";
      }
      else if ($lang == "en" ) {
      include ('en/language.php');
      $SESSION["lang"] = "en"; 
      header("Location: http://it2.in/");
      exit(); 
      }
      else if ($lang == "ar" ) {
      include ('ar/language.php');
       $SESSION["lang"] = "ar"; 
      header("Location: http://it2.in/");
      exit();
      }
      else if ($lang != "ar" || $lang != "en") {
      header("Location: http://it2.in/"); 
      exit(); 
      }
      
      ?>
      

      现在你应该被重定向到你想要的页面:)

      【讨论】:

        【解决方案5】:
        <?php
        session_start();
        
        $lang = &$_SESSION['lang'];
        $lang = $_GET['lang'];
        switch ($lang)
        {
            case 'en' :
                include ($lang . '/language.php');
                break;
            case 'ar' : 
            default :
                include ('ar/language.php');
                $lang = 'ar';
        }
        
        header('Location: http://it2.in/');
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-12-27
          • 2018-03-14
          • 2012-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-16
          相关资源
          最近更新 更多