PHP多语言,$ _SESSION和语言切换器

时间:2016-04-18 19:55:41

标签: php mysql session

我正在构建一个自定义CMS,我正在尝试使用带列方法的MySQL创建多语言内容。我没有使用任何框架,它是纯PHP。

这是我的代码:

<?php
$query = "SELECT * FROM posts";
$result = mysqli_query($connection, $query);

while($row = mysqli_fetch_assoc($result)) {
    $title = $row['title'];
}
echo $title;
?>

我已成功从数据库中打印标题。

现在,如果我通过添加新字段“title_en”和“title_de”更改表格帖子并添加会话

$_SESSION['current_language'] = 'en'; 
$_SESSION['current_language'] = 'de'; 

如何创建语言切换器并根据激活的语言打印标题?

编辑:

这是我正在尝试的代码

<?php
session_start();

if(isset($_GET['lang']) && in_array($_GET['lang'],['en','de'])) {
   $lang = $_GET['lang'];
   $_SESSION['current_language'] = $lang;

   print_r($_SESSION['current_language']);
} else {
   $lang = isset($_SESSION['current_language']) ? $_SESSION['current_language'] : 'en';
}
$query = "SELECT * FROM posts";
$result = mysqli_query($connection, $query);

while($row = mysqli_fetch_assoc($result)) {
    $title = $row['title_'.$lang];
    echo $title;
}
?>

但是在www.mywebsite.com/lang=de上它仍显示英文标题。

EDIT2

我刚试过www.mywebsite.com/?lang=de并且它正常显示。非常感谢ПавелИванов!

1 个答案:

答案 0 :(得分:3)

只需使用已保存的语言作为密钥。 get属性应该比保存的会话具有更高的优先级(例如,当用户想要切换语言时)。

if(isset($_GET['lang']) && in_array($_GET['lang'],['en','de'])) {
   $lang = $_GET['lang'];
   $_SESSION['current_language'] = $lang;
} else {
   $lang = isset($_SESSION['current_language']) ? $_SESSION['current_language'] : 'en';
}
$query = "SELECT * FROM posts";
$result = mysqli_query($connection, $query);
while($row = mysqli_fetch_assoc($result)) {
    $title = $row['title_'.$lang];
    echo $title;
}

编辑: 语言切换器是简单的ul&gt; li列在url中,使用lang =&#34;你的语言&#34;