-2

我正在使用此代码在我的网站中切换语言。一切正常,但是当我更改语言时,总是选择第一个项目。我想继续选择哪种语言是网站语言。这是我的代码。

<td width="85%" align=right class=top_section> 
          <form method='POST'>
          <select name="switchlanguage" onchange="this.form.submit()"> 
          <option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected';?>English</option> 
          <option value="ru" <?php if($_POST['switchlanguage'] == 'ru') echo 'selected';?>Русский</option> 
          <option value="tj" <?php if($_POST['switchlanguage'] == 'tj') echo 'selected';?>Точики</option> 
          </select> 

    </form>
    </td>

如何让它正常工作?如果选择俄语,则应保留为俄语。但它总是用英语。

并使用此代码更改网站语言

if(!isset($_POST['switchlanguage']))
  {
  include_once($DOCUMENT_LANG.'en.lng.php');
  }
  else
  {
  include_once($DOCUMENT_LANG.$_POST['switchlanguage'].'.lng.php');
  }

即使我使用制表符进入下拉框并使用向下键,它也会自动转到第一项。

4

7 回答 7

1

我发现了问题所在。我不知道 smarty 我们需要 <{php}> 和 <{/php}> 标签。因此,smarty 并不知道写作。我终于写了这段代码,它工作了。

<form method='POST'>
      <select name="switchlanguage" onchange="this.form.submit()"> 
      <option value="en" <{php}>if($_POST['switchlanguage'] == 'en') echo 'selected="selected"';<{/php}>> English</option> 
      <option value="ru" <{php}>if($_POST['switchlanguage'] == 'ru') echo 'selected="selected"';<{/php}>> Русский</option> 
      <option value="tj" <{php}>if($_POST['switchlanguage'] == 'tj') echo 'selected="selected"';<{/php}>> То?ик?</option> 
      </select> 

感谢所有帮助过我的人。

于 2013-02-07T13:05:32.500 回答
0

嗯,使用cookies怎么样?我认为这对于这个问题应该是相当标准的,除非你因为某种原因不能使用它们(即你不想关心关于 cookie 的欧盟法律?)

于 2013-02-07T08:30:38.903 回答
0

你应该使用

selected="selected"

不是 PHP 程序员,但你可以试试

<td width="85%" align=right class=top_section> 
          <form method='POST'>
          <select name="switchlanguage" onchange="this.form.submit()"> 
          <option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected="selected"';?>English</option> 
          <option value="ru" <?php if($_POST['switchlanguage'] == 'ru') echo 'selected="selected"';?>Русский</option> 
          <option value="tj" <?php if($_POST['switchlanguage'] == 'tj') echo 'selected="selected"';?>Точики</option> 
          </select> 

    </form>
    </td>

嘿,试试

<form method='POST'>
          <select name="switchlanguage" onchange="this.form.submit()"> 
          <option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected="selected"';?>> English</option> 
          <option value="ru" <?php if($_POST['switchlanguage'] == 'ru') echo 'selected="selected"';?>> Русский</option> 
          <option value="tj" <?php if($_POST['switchlanguage'] == 'tj') echo 'selected="selected"';?>> Точики</option> 
          </select> 

    </form>
于 2013-02-07T08:34:23.530 回答
0

对于您的问题,您可以使用以下一项或多项:

  • 匿名用户选择语言:寻找一个 PHP 脚本,它使用所选语言的值设置一个 cookie,例如 setcookie("switchlanguage", 'en', time()+3600, "/", "example.com") ;
  • 经过身份验证的用户:您可能会考虑将当前用户的首选语言存储在您的数据库中(然后制作一个脚本来存储和检索选择)
  • 你总是可以考虑使用会话来存储语言,但是当用户离开你的网站时它会过期(开始一个新的会话)

在上述任何一种情况下,您都需要编写一个脚本,在 Cookie、Session 或 DB 中设置 lang val,然后重定向回原始页面。或者更好地对这个存储 val 的 PHP 脚本进行 Ajax 调用,然后返回一个带有值集或错误的 JSON 对象。

最后,您需要调整您的 HTML 以选择正确的语言(例如使用 cookie):

<select name="switchlanguage" onchange="this.form.submit()"> 
<option value="en" <?php if(!isset($_COOKIE['switchlanguage']) || empty($_COOKIE['switchlanguage']) || $_COOKIE['switchlanguage'] == 'en') echo 'selected';?>English</option> 
<option value="ru" <?php if($_COOKIE['switchlanguage'] == 'ru') echo 'selected';?>Русский</option> 
<option value="tj" <?php if($_COOKIE['switchlanguage'] == 'tj') echo 'selected';?>Точики</option> 
</select> 

我还添加了您缺少的默认情况: (!isset($_COOKIE['switchlanguage']) || empty($_COOKIE['switchlanguage']) ) 当仍然没有选择语言时选择英语。

于 2013-02-07T08:49:10.847 回答
0

由于找不到更好的解决方案,我做了一个小技巧……我又添加了一个选项。它总是会转到第一个选项。第一个选项是选择语言。如果有人找到另一种方法,我会很高兴。目前我找不到更好的解决方案。

<td width="85%" align=right class=top_section> 
    <form method='POST'>
          <select name="switchlanguage" onchange="this.form.submit()"> 
          <option  > Choose language</option> 
          <option value="en" > English</option> 
          <option value="ru" > Русский</option> 
          <option value="tj" > Точики</option> 
          </select> 

    </form>
    </td>  

我知道这不好,但总比没有好。我不会接受这个答案,因为它没有解决我的问题。

于 2013-02-07T10:16:52.673 回答
0

这是这个帖子的结果

<?php if($_POST['switchlanguage'] == 'en') echo 'selected="selected"';?. ?>     

来自其他页面,或者您是否正在更改此页面本身的语言。如果它是通过发布请求来自其他页面,那么没关系,但如果您正在更改此页面本身的语言,请使用 javascript 选择特定字段。

于 2013-02-07T08:59:36.127 回答
0

您的代码中有一些错字。看到这个

<option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected';?>English</option>

这应该是

<option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected'; ?>>English</option>

注意选项开始标签的右大括号(在英语和其他语言之前)。

您可以将您的选择代码替换为以下代码:

<select name="switchlanguage" onchange="this.form.submit()"> 
    <option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected'; ?>>English</option> 
    <option value="ru" <?php if($_POST['switchlanguage'] == 'ru') echo 'selected'; ?>>Русский</option> 
    <option value="tj" <?php if($_POST['switchlanguage'] == 'tj') echo 'selected'; ?>>Точики</option> 
</select> 

编辑:

你的编辑代码看起来像这样吗,

<?php
$_POST['switchlanguage'] ='ru';
?>
<table>
<tr>
    <td width="85%" align=right class=top_section> 
        <form method='POST'>
            <select name="switchlanguage" onchange="this.form.submit()"> 
                <option value="en" <?php if($_POST['switchlanguage'] == 'en') echo 'selected'; ?>>English</option> 
                <option value="ru" <?php if($_POST['switchlanguage'] == 'ru') echo 'selected'; ?>>Русский</option> 
                <option value="tj" <?php if($_POST['switchlanguage'] == 'tj') echo 'selected'; ?>>Точики</option> 
            </select> 
        </form>
    </td>
</tr>
</table>

我已经对此进行了测试,并且工作正常。

于 2013-02-07T08:37:35.453 回答