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

标签 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”来更改表 posts 并添加一个 session

$_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 上它仍然显示英文标题。

编辑2

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

最佳答案

只需使用保存的语言作为键。 get 属性应该比 session 保存有更高的优先级(例如当用户想要切换语言时)。

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>li list in url with lang="Your lang"

关于PHP 多语言、$_SESSION 和语言切换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703167/

相关文章:

php - 如何将额外的数据字段添加到ajax表中的数据库中

php - CJK 空白字符消失

MYSQL 在 Group By 中使用限制

MySQL如果存在则更新,如果不存在则插入

validation - 如何使用 tf.session.run() 进行测试(不更新网络参数)?

node.js - 是否可以在 Express 中使特定用户的 session 数据无效或删除?

php - PHP 中的复杂查询

php - 通过表单批准行 - 获取空白页

php - 尝试使用 PHP 和 MySQL 中的逻辑将某些内容分配给 "rule"

php - 如何处理 PHP Facebook session 过期异常?