我的网站具有以下语言切换算法:
- 首先,它检测到默认的浏览器语言(我不知道为什么?但是Chrome总是给出诸如
en-EN,ru,lv
之类的内容,因此Chrome的默认语言总是英语,似乎是)。 - 然后将语言值写入会话变量
lang
并请求所需的字符串文件(即/assets/includes/en-US/strings.php
); - ,此文件中的每个字符串都包含在HTML代码中,因此纯HTML没有任何纯文本。
当然,默认语言检测不是停止的原因 - 我需要像链接这样的手动语言切换器(LV | en | ru)。因此,在用户单击所需的语言后,可以(也许是最好的)切换语言并覆盖会话变量的方法(也许是最好的)ID?
最好的方法是最简单的方法:)
$langs = array('LV', 'EN', 'RU');
<?php foreach ($langs as $lang): ?>
<a href="index.php?lang=<?=$lang;?>"> <?=$lang;?> </a>
<?php endforeach; ?>
因此,您在此示例中为用户提供了通过get更改lang的机会。
覆盖会话给已发送请求:
<?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 Array相同。
因此,您可以从此特定列中输出内容:
SELECT lang_{$_SESSION['lang']} FROM translations WHERE string = '$string';