【问题标题】:Session is not working for multiple language in PHP website会话不适用于 PHP 网站中的多种语言
【发布时间】:2021-08-01 13:56:03
【问题描述】:

我正在尝试建立多语言网站(英语和马拉地语)。默认语言马拉地语工作正常。当在 about.php 页面上并尝试将语言更改为英语时,它会重定向到 index.php 页面(语言更改为英语),但我必须在同一页面(about.php)上,语言更改为英语。然后当我点击另一个页面时,它仍然显示默认语言。会话或以下代码可能有问题...请求一些帮助和帮助。提前致谢。

 <script>
    function set_language(){
        var language=jQuery('#language').val();
        window.location.href='http://127.0.0.1/projects/website/?language='+language;
    }
</script>

index.php 页面是

<?php
   session_start();
   include('language.php');
   $en_select='';
   $mr_select='';       
   $language='';
   
   if(!isset($_GET['language'])){
    $mr_select='selected';  
    $language='mr';
   }else if(isset($_GET['language']) && $_GET['language']=='mr'){
    $_SESSION["language"] = "mr"; 
    $mr_select='selected';  
    $language='mr';
   }
   else{
    $en_select='selected';
    $language='en';
    $_SESSION["language"] = "en";
   }
?>

<!DOCTYPE HTML>
<html>
   <head>
      <title>Welcome</title>
      <meta charset="utf-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
      <link rel="stylesheet" href="assets/css/main.css" />
   </head>
   <body class="is-preload">
         <!-- Header -->
         <header id="header">
            <ul class="icons">
               <li>
                  <select onchange="set_language()" name="language" id="language">
                     <option value="mr" selected>मराठी</option>
                     <option value="en" >English</option>
                  </select>
               </li>
            </ul>
         </header>

         <script>
            function set_language(){
                var language=jQuery('#language').val();
                window.location.href='http://127.0.0.1/projects/website/?language='+language;
            }
         </script>

         <!-- Banner -->
         <section id="banner">
            <div class="content">
               <header>
                  <h2><?php echo $top_title[$language]['0']?></h2>
               </header>
         </section> 

         <!-- Menu -->
         <nav id="menu">
            <header class="major">
               <h2>Menu</h2>
            </header>
            <ul>
               <li><a href="index.php"><?php echo $top_nav[$language]['0']?></a></li>
               <li><a href="about.php"><?php echo $top_nav[$language]['1']?></a></li>
            </ul>
         </nav>
      </div>
      <!-- Scripts -->
      <script src="assets/js/jquery.min.js"></script>
   </body>
</html>

language.php 页面如下所示

<?php
   $top_nav=array(
      'en'=>array(
               'Home',
               'About Us',),
   
      'mr'=>array(
               'मुख्यपृष्ठ',
               'आमच्याबद्दल')
   );
   
   $top_title = array(
      'en' => array('You are Welcome !'), 
      'mr' => array('आपले स्वागत आहे !')
   );
?>

【问题讨论】:

    标签: javascript php html jquery


    【解决方案1】:

    您使用$SESSION 作为变量,但我猜您想使用$_SESSION 来代替?如果没有,请通过language.php 更新您的问题。

    您在会话中设置语言,但不要从不使用该会话来阅读语言。

    此代码将起作用:

    <?php
    session_start();
    include('language.php');
    
    // Set English as default language
    $language='en';
    
    // set the language if in session
    if (isset($_SESSION["language"])) {
        $language = $_SESSION["language"];
    }
    
    // Set language if in url (and store it in session)
    if (isset($_GET["language"])) {
        $language = $_GET["language"];
        $_SESSION["language"] = $_GET["language"];
    }
    ?>
    

    您可以重用$language 变量,而不是设置$en_select 变量:

    <select onchange="set_language()" name="language" id="language">
        <option value="mr"<?php if ($language === 'mr') { ?> selected<?php } ?>>मराठी</option>
        <option value="en"<?php if ($language === 'en') { ?> selected<?php } ?>>English</option>
    </select>
    

    【讨论】:

    • 感谢您的快速更新。我使用的是 $_SESSION 而不是变量。在 language.php 文件中,我存储了 en 和 mr 语言的数据。我在 index.php 中基于语言(根据脚本中的 url)将数组输出为 &lt;?php echo $top_nav[$language]['0']?&gt;.. 我通过更改 $_SESSION 尝试了您的代码,但在切换到其他页面时不起作用,它显示默认语言。跨度>
    • 尝试添加var_dump($_SESSION['language']); 看看发生了什么。
    • var_dump($_SESSION['language']); 将值显示为 string(2) "mr"))
    • 太好了!修正了我的回答中的一个错字。你可以试试代码吗?
    • 在 about.php 页面上单击英语时,它会将我重定向到默认语言马拉地语的 index.php 页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多