php实现多语言切换
PHP 实现多语言切换的方法
使用数组存储多语言文本
创建一个语言文件数组,存储不同语言的文本。例如,创建 lang.php 文件,定义不同语言的键值对:
$lang = [
'en' => [
'welcome' => 'Welcome',
'login' => 'Login',
],
'zh' => [
'welcome' => '欢迎',
'login' => '登录',
],
];
在页面中通过语言键获取对应文本:
echo $lang[$current_lang]['welcome'];
通过 Session 或 Cookie 存储用户语言选择
用户选择语言后,将语言代码存入 Session 或 Cookie:
// 存储到 Session
$_SESSION['lang'] = 'en';
// 存储到 Cookie
setcookie('lang', 'en', time() + 3600 * 24 * 30, '/');
每次页面加载时检查 Session 或 Cookie 中的语言设置:
$current_lang = $_SESSION['lang'] ?? 'en'; // 默认英语
使用 Gettext 扩展
Gettext 是 PHP 内置的多语言支持扩展,适合大型项目。步骤如下:
- 创建
.po和.mo语言文件,例如messages.po(英文)和messages_zh.po(中文)。 - 在 PHP 中设置语言环境并加载翻译文件:
putenv('LC_ALL=zh_CN');
setlocale(LC_ALL, 'zh_CN');
bindtextdomain('messages', './locale');
textdomain('messages');
- 在代码中使用
_()函数标记需翻译的字符串:
echo _("Welcome");
结合数据库存储多语言内容
将多语言文本存储在数据库中,例如创建表 translations:
CREATE TABLE translations (
id INT PRIMARY KEY,
key VARCHAR(50),
lang VARCHAR(10),
value TEXT
);
查询时根据当前语言获取对应文本:
$stmt = $pdo->prepare("SELECT value FROM translations WHERE `key` = ? AND lang = ?");
$stmt->execute(['welcome', $current_lang]);
$text = $stmt->fetchColumn();
自动检测浏览器语言
通过 $_SERVER['HTTP_ACCEPT_LANGUAGE'] 获取浏览器首选语言,并切换到匹配的语言:
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$current_lang = in_array($browser_lang, ['en', 'zh']) ? $browser_lang : 'en';
使用第三方库(如 Symfony Translation)
通过 Composer 安装 Symfony Translation 组件:
composer require symfony/translation
创建语言文件(如 translations/messages.en.yaml),加载并使用:
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\YamlFileLoader;
$translator = new Translator('en');
$translator->addLoader('yaml', new YamlFileLoader());
$translator->addResource('yaml', 'translations/messages.en.yaml', 'en');
echo $translator->trans('welcome');






