需要帮助创建php和/或javascript使用超链接来改变网页上的语言

Need help creating the php and/or javascript using a hyperlink to change the language on a webpage

本文关键字:超链接 改变 网页 语言 javascript 创建 帮助 php      更新时间:2023-09-26

我以前使用过一个下拉选择框,使用post方法来更改保存在单独文件上的网页中的语言。我现在试图创造类似的东西,但需要帮助。现在我正试图使网页只有2种语言,当查看网页上的一种语言的选项切换到另一个将出现。本质上是让查看者选择将会话语言更改为英语或西班牙语,并在所有页面上以超链接的形式显示相反的语言。我的语言文件基本上如下所示:

<?php    
     $lang = array(
           'EN' => array(
                         'ABOUT' => 'About', 
                         'HOME' => 'Home'
                        ),
           'SP' => array(
                         'ABOUT' => 'Acerca',
                         'HOME' => 'Casa'
                        )
                  )
?>

我在这里展示的PHP代码更广泛,但这是我如何设置的,在另一个文件中编写这些代码行,以便能够更改语言。在我的主页上,在html文档声明之前,我有一小段代码,如下所示:

<?php 
      require("lang.php");
      session_start();
      $_SESSION['LANG'] = "EN";
      if(@$_POST['lang-chooser']){
         $_SESSION['LANG'] = $_POST['lang-chooser'];
      }
?>

我正试图使页面的一部分,我有超链接位于文档的标题或正文。我目前拥有的用于选择语言选项的代码如下:

<form method="post" action="" id="lang-form">
      <select id="lang-chooser" class="lang-chooser" name="lang-chooser" onchange="window.lang(this);">
         <option value="EN"<?php if($_SESSION['LANG'] == "EN") {?> selected="selected"<?php }?>>English</option>
         <option value="SP"<?php if($_SESSION['LANG'] == "SP") {?> selected="selected"<?php }?>>Spanish</option>
      </select>
</form>

在我的页脚下面,但仍然在body部分,我也有少量的脚本,如下所示:

<script type="text/javascript">
  function lang(element){
      var lang_name = element.value;
      var e_form = document.getElementById("lang-form");
      e_form.submit();
      console.log(element);
      }
  window.lang = lang;
</script>
有了这些代码,我就可以在保持当前页面的同时,使用下拉选择框成功地更改语言。我将使用可更改文本的代码如下:
<?php echo ($lang[$_SESSION['LANG']]['ABOUT']); ?>

现在我希望有选项来改变任何页面上的会话语言,但没有下拉选择框。我希望有它,以便当页面是在英语,它应该自动访问网站时,将有一个名为Espanol的超链接,它允许查看器更改为西班牙语,一旦页面是在西班牙语的超链接将改为说英语这允许查看器更改为英语。从网上看,我相信我仍然需要介绍PHP代码和javascript,但不再需要"表单"或"方法"部分来更改会话语言。我认为我现在所需要的替换"表单"answers"发布方法"的内容如下:

<a href="index.php?LANG=SP"> <?php echo($lang[$_SESSION['LANG']]['SPANISH']); ?> </a>

我相信我的代码仍然是缺乏的,这就是为什么我仍然不能让它工作。从本质上讲,我需要的超链接来改变文本根据会议,也可用于更改会话语言从西班牙语或英语。我在这里有点难住了,非常感谢任何形式的帮助。感谢您花时间阅读这个问题。

你可以用php if, else和get函数代替你的表单。

通过在页面头部使用$_GET,您可以检查URL中是否设置了lang,并根据结果设置会话:

编辑

这部分将取代session_start()之后的所有内容;在您放置在问题中的第二段PHP代码中。

<?php
if(!isset($_SESSION['LANG'])){
    $_SESSION['LANG']='EN';
    header('location: '.$_SERVER["REQUEST_URI"]);
}
if(isset($_GET['lang'])){
    if($_GET['lang']=='sp'){
        $_SESSION['LANG']='SP';
    }else{
        $_SESSION['LANG']='EN';
    }
}

当你可以检查会话是否设置后,然后调用一个href链接到你想要更改的语言。

这部分将取代html表单

<?php
if(isset($_SESSION['LANG'])){
    if($_SESSION['LANG']=='EN'){
        echo '<a href="?lang=sp">Espanol</a>';
    }else{
        echo '<a href="?lang=en">English</a>';
    }
}else{
        echo '<a href="?lang=sp">Espanol</a>';
}

你不需要java来实现这个。

编辑

如果您希望URL不显示?lang=,您可以在第一部分中包含另一个会话和标题,例如:

<?php
if(isset($_GET['lang'])){
    if($_GET['lang']=='sp'){
        $_SESSION['LANG']='SP';
        header('location: '.$_SESSION['URI']);
    }else{
        $_SESSION['LANG']='EN';
        header('location: '.$_SESSION['URI']);
    }
}else{
    $_SESSION['URI']=$_SERVER["REQUEST_URI"];
}

这将立即将用户重定向到他们所在的页面,他们不应该注意到刷新。

<?php 
   $allowed_langs = array('EN' => 'English', 'SP' => 'Espanol'); 
   $site_lang = isset($_SESSION['LANG'])?$_SESSION['LANG']:'EN';
  //Here you can set language according to link
 if(isset($_GET['lang'] && in_array($_GET['lang'], $allowed_langs)){
   $_SESSION['LANG'] = $_GET['lang'];
   $site_lang = $_GET['lang'];
 //Then you can refresh the page if you want to load new file or start 
  // including your language file after this language set.
 }
//include your lang file
include_once( 'langs/' . $site_lang . '/text.php' );
?>
          <ul>
 <?php  
foreach($allowed_langs as $langshort => $langlong){
 $new_query_string = build_query_string($param, 'lang', $langshort);
 $new_link = strtok($_SERVER["REQUEST_URI"],'?') . "?" . $new_query_string;
 $class = ($_SESSION['LANG']==$langshort)?'selected':'';
 ?>
<li class="<?= $class ?>"><a href="<?= $new_link ?>"><?= $langlong ?></a></li>
<?php  } ?>
  </ul>