如何使用 select 表单通过 PHP $_GET 和 $_POST 更改语言?

How to use a select form to change language with PHP $_GET and $_POST?

如果之前已经回答了这个答案,我必须道歉,我已经寻找它并找到了部分有用但没有满足我需求的东西。

我是 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 标签的表单,允许 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>

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

如何在 url 末尾添加 ?lang=en?lang=it 以便使用 $_GET['lang'] 并使用 $lang 循环翻译使用 select 形式设置的变量?

包括外部资源在内的整个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>

如果你想要 URL 中的 lang 参数(我认为这是有道理的)你可以稍微改变一下你的形式:

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

这样,当提交表单时,您在URL中有?lang=en?lang=it,您可以使用

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

设置您的语言。

试试这个

<?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; ?>">

你好像有几个问题:

  1. 您正在混合提交方法(使用 POST 和 GET)
  2. 您检查了 $_POST['set_language'] 但期望 $_GET['lang']
  3. <select> 菜单的命名与您希望在 <html> 标签的 lang 属性中使用的变量不同。

我要做的是确定一个方法; POST GET 然后将所有 ref 分别更改为 GET/POST,然后使用 either "set_language" "lang"作为你的超全局($_GET/$_POST)数组键。