如何使用选择表单来改变PHP $ _GET和$ _POST的语言?

时间:2016-02-02 20:26:22

标签: php forms post get multilingual

如果以前已经回答了这个答案,我必须道歉,我已经找到了它,发现了一些部分有用但没有任何东西可以满足我的需求。

我是PHP的新手,我想创建一个支持多语言的简单网站。翻译由特定数组根据它们所在的页面提供。我将使用foreach循环来获取翻译。允许用户使用select html标记更改默认语言。我部分能够以这种方式实现这一目标:

首先,通过一个简单的函数,我寻找浏览器语言并将其设置为语言后退:

function browser_lang() {
  $rawLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

  if($rawLang == 'it') {
    $browserLang = 'it';
  } else {
    $browserLang = 'en';
  }

  return $browserLang;
}

index.php文件中,我以这种方式设置了后备语言:

<?php
    // Include the browser_lang() and other functions

    if(isset($_POST['set_language'])) {
        $lang = strip_bad_chars($_GET['lang']);
    } else {
        $lang = browser_lang();
    }
?>

<html lang="<?php echo $lang; ?>">

稍后在html中我添加了一个带有一些select标签的表单,允许选择语言:

<form action="" method="post">
  <select name="set_language" id="custom-lang">
    <option value="it">Italiano</option>
    <option value="en">English</option>
  </select>
  <input type="submit" name="input_language" value="Set Language">
</form>

当我第一次加载页面时,脚本能够检索浏览器语言,但是当我选择自定义语言时,它无法更改它。

如何在网址末尾添加?lang=en?lang=it,以便使用$_GET['lang']并使用该选择表单设置$lang变量来循环翻译?

包含外部资源的整个index.php是:

<?php
    function browser_lang() {
        $rawLang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

        if($rawLang == 'it') {
            $browserLang = 'it';
        } else {
            $browserLang = 'en';
        }

        return $browserLang;
    }

    function strip_bad_chars( $input ) {
        $output = preg_replace( "/[^a-zA-Z0-9_-]/", "",$input);
        return $output;
    }

    if(isset($_POST['set_language'])) {
        $lang = strip_bad_chars($_GET['lang']);
    } else {
        $lang = browser_lang();
    }
?>

<!DOCTYPE html>
<html lang="<?php echo $lang; ?>">
<head>
    <title>HOME</title>
</head>

<body>
    <form action="" method="post">
        <select name="set_language" id="custom-lang">
            <option value="it">Italiano</option>
            <option value="en">English</option>
        </select>
        <input type="submit" name="input_language" value="Set Language">
    </form>
</body>
</html>

3 个答案:

答案 0 :(得分:3)

如果您想要URL中的lang参数(我认为这是有道理的),您可以稍微更改一下表单:

<form action="" method="get"><!-- use get instead of post-->
    <select name="lang" id="custom-lang"><!-- change name to lang-->
    ... etc.

这样,提交表单后, 会在网址中显示?lang=en?lang=it,您可以使用

if (isset($_GET['lang'])) {
    $lang = strip_bad_chars($_GET['lang']);
} else {
    $lang = browser_lang();
}

设置你的语言。

答案 1 :(得分:0)

你似乎有几个问题:

  1. 您正在混合提交方法(使用 POST和GET)
  2. 您检查$_POST['set_language'],但期望$_GET['lang']
  3. <select>菜单的名称与您希望在<html>代码的lang属性中使用的变量的名称不同。
  4. 我要做的是确定一种方法; POST GET然后分别将所有引用更改为GET / POST,然后使用 “set_language”“lang”作为您的超全局($ _GET / $ _ POST)数组键。

答案 2 :(得分:-1)

试试这个

<?php
    // Include the browser_lang() and other functions

    if(isset($_POST['input_language'])) {
        $lang1 = $_POST['set_language'];
        if ($lang1 == "Italiano") {
          $lang = "it"
        } else {
          echo "en";
        }
    }
?>

<html lang="<?php echo $lang; ?>">