1

我有一个具有以下语言切换算法的网站:

  • 首先,它检测默认浏览器语言(我不知道为什么?但 Chrome 总是给出类似的东西en-EN,ru,lv,所以 Chrome 的默认语言似乎总是英语)。
  • 然后它将语言值写入会话变量lang并请求所需的字符串文件(即/assets/includes/en-US/strings.php);
  • 并且该文件中的每个字符串都包含在 HTML 代码中,因此纯 HTML 中没有任何纯文本。

当然,默认语言检测不是停止的原因 - 我需要一个手动语言切换器,如链接 (LV | EN | RU)。那么,在用户单击所需语言后,切换语言和覆盖会话变量的可能(也许是最好的)方法是什么?

4

1 回答 1

3

最好的方法是最简单的方法:)

$langs = array('LV', 'EN', 'RU');

<?php foreach ($langs as $lang): ?>
    <a href="index.php?lang=<?=$lang;?>"> <?=$lang;?> </a>
<?php endforeach; ?>

因此,在此示例中,您可以让用户有机会通过 GET 更改语言。

将会话覆盖到发送的请求:

<?php
if(in_array($_GET['lang'], $langs) {
    $_SESSION['lang'] = $_GET['lang']; // to prevent user to change its session to something you don't want to
}
?>

之后,您只需与此会话交互以显示内容。

如果您的每个页面都用不同的语言编写,您可以使用重定向:(但我猜想逻辑如何与您已经通过自动语言检测实现的语言进行交互,但仍然......让我快速提出一些方法? )

<?php
if (isset($_SESSION['lang']) && $_SESSION['lang'] !== 'EN') {
    header("Location: mysite.com/".$_SESSION['lang']."/index.php");
    exit;
}
?>

或者,您可以使用翻译方法。

您的所有翻译都在与您的 $langs 数组同名的列下的数据库中。

所以你输出这个特定列的内容:

SELECT lang_{$_SESSION['lang']} FROM translations WHERE string = '$string';
于 2014-01-23T11:46:04.177 回答