Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:一种手动切换语言的方法?_Php_Multilingual_Language Switching - Fatal编程技术网

PHP:一种手动切换语言的方法?

PHP:一种手动切换语言的方法?,php,multilingual,language-switching,Php,Multilingual,Language Switching,我有一个具有以下语言转换算法的网站: 首先,它检测默认的浏览器语言(我不知道为什么?但Chrome总是给出类似于en,ru,lv,所以Chrome的默认语言似乎总是英语) 然后将语言值写入会话变量lang,并请求所需的字符串文件(即/assets/includes/en US/strings.php) 这个文件中的每个字符串都包含在HTML代码中,因此纯HTML中没有任何纯文本 当然,默认语言检测并不是停止的理由——我需要一个手动语言切换器,比如links(LV | EN | RU)。那么,

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

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

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

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


您是否可以使用if语句来检查是否设置了新会话(即所选会话),如果不使用默认会话,是否可以修改切换算法?当用户手动选择语言时,该值保存在会话中;语言算法检查此变量:如果存在,则加载所选语言;如果不存在,则继续实际行为。我不确定您的问题是什么。你是在问最好的GUI吗?(我的Chrome发送
es,es;q=0.8,en;q=0.6
。它是可配置的,尽管它几乎无法隐藏。)使用GET+POST会更好。谢谢你的回答!我有完全相同的HTML页面。唯一的区别是它们请求不同的strings.php文件。因为所有的纯文本都被写入这些文件中。所以您只需要根据会话请求文件:)看来您的问题已经解决了
$langs = array('LV', 'EN', 'RU');

<?php foreach ($langs as $lang): ?>
    <a href="index.php?lang=<?=$lang;?>"> <?=$lang;?> </a>
<?php endforeach; ?>
<?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;
}
?>
SELECT lang_{$_SESSION['lang']} FROM translations WHERE string = '$string';