php实现中英切换
PHP实现中英切换的方法
使用数组存储语言包
创建一个语言包数组,包含中英两种语言的文本。通过切换数组键值实现语言切换。
$lang = array(
'welcome' => array(
'en' => 'Welcome',
'zh' => '欢迎'
),
'login' => array(
'en' => 'Login',
'zh' => '登录'
)
);
$current_lang = isset($_GET['lang']) ? $_GET['lang'] : 'en';
echo $lang['welcome'][$current_lang];
使用常量定义语言
定义不同语言的常量文件,通过包含不同文件实现切换。
// en.php
define('WELCOME', 'Welcome');
define('LOGIN', 'Login');
// zh.php
define('WELCOME', '欢迎');
define('LOGIN', '登录');
// 根据参数包含不同文件
$lang_file = isset($_GET['lang']) ? $_GET['lang'].'.php' : 'en.php';
include $lang_file;
echo WELCOME;
使用数据库存储语言
将多语言文本存储在数据库表中,通过查询获取对应语言内容。

// 数据库表结构示例
// CREATE TABLE languages (
// id INT PRIMARY KEY,
// key VARCHAR(50),
// en TEXT,
// zh TEXT
// );
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("SELECT * FROM languages WHERE key = :key");
$stmt->bindParam(':key', $key);
$key = 'welcome';
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$current_lang = isset($_GET['lang']) ? $_GET['lang'] : 'en';
echo $result[$current_lang];
使用Gettext扩展
PHP内置Gettext扩展提供专业国际化支持,适合大型项目。
// 设置语言环境
$locale = isset($_GET['lang']) ? $_GET['lang'] : 'en_US';
putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
// 指定mo文件路径
bindtextdomain("messages", "./locale");
textdomain("messages");
// 使用_()函数输出翻译
echo _("Welcome");
使用SESSION或COOKIE存储语言偏好
通过SESSION或COOKIE记住用户选择的语言。

// 使用SESSION
session_start();
if(isset($_GET['lang'])) {
$_SESSION['lang'] = $_GET['lang'];
}
$current_lang = isset($_SESSION['lang']) ? $_SESSION['lang'] : 'en';
// 使用COOKIE
if(isset($_GET['lang'])) {
setcookie('lang', $_GET['lang'], time()+3600*24*30);
}
$current_lang = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : 'en';
实现语言切换链接
在页面中添加语言切换链接,传递lang参数。
<a href="?lang=en">English</a>
<a href="?lang=zh">中文</a>
自动检测浏览器语言
根据浏览器Accept-Language头自动设置语言。
$browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$supported_langs = array('en', 'zh');
$current_lang = in_array($browser_lang, $supported_langs) ? $browser_lang : 'en';
每种方法适用于不同场景,数组和常量方法适合小型项目,数据库和Gettext适合大型项目,SESSION/COOKIE可增强用户体验。






