php实现切换语言包
PHP实现切换语言包的方法
使用数组存储语言包
创建一个包含多语言翻译的数组文件,例如 lang.php,内容如下:
$lang = [
'en' => [
'welcome' => 'Welcome',
'login' => 'Login'
],
'zh' => [
'welcome' => '欢迎',
'login' => '登录'
]
];
设置语言切换逻辑
通过会话(Session)或Cookie保存用户选择的语言:
session_start();
if (isset($_GET['lang']) && in_array($_GET['lang'], ['en', 'zh'])) {
$_SESSION['lang'] = $_GET['lang'];
}
$currentLang = $_SESSION['lang'] ?? 'en'; // 默认英语
创建翻译函数
编写辅助函数来获取当前语言的翻译:
function trans($key) {
global $lang, $currentLang;
return $lang[$currentLang][$key] ?? $key;
}
在视图中使用翻译
在HTML/PHP文件中调用翻译函数:
<h1><?= trans('welcome') ?></h1>
<a href="?lang=en">English</a> | <a href="?lang=zh">中文</a>
使用gettext扩展(高级方案)
安装并配置gettext扩展更高效地处理多语言:
- 创建
.po和.mo翻译文件 - 在PHP中初始化:
putenv('LC_ALL='.$_SESSION['lang']); setlocale(LC_ALL, $_SESSION['lang']); bindtextdomain('messages', './locale'); textdomain('messages'); - 在代码中使用:
echo _("Welcome");
数据库存储方案
对于动态内容的多语言支持:

- 创建翻译表结构:
CREATE TABLE translations ( id INT AUTO_INCREMENT, key VARCHAR(255), lang VARCHAR(10), value TEXT, PRIMARY KEY (id) ); - 查询时通过JOIN获取对应语言内容
每种方法适用于不同场景,数组方案适合小型项目,gettext适合大型应用,数据库方案适合内容频繁变化的系统。






