必须启用php_intl和gettext扩展、正确创建UTF-8无BOM语言包文件、编写自动检测与翻译函数,三者缺一不可,否则多语言网站将报错或乱码。

在Windows系统上用PHP永久免费版(如phpStudy免费版)快速搭建一个能跑多语言网站的环境,关键不是装完就完事,而是必须确保php_intl扩展启用、语言包路径正确、翻译函数能正常调用——缺一不可,否则页面会直接报错或显示乱码。
安装phpStudy免费版并启用关键扩展
前往phpStudy官网下载最新版免费安装包,注意避开捆绑软件陷阱,安装时取消勾选所有第三方推广选项。
安装完成后启动phpStudy主界面,点击“其他选项菜单”→“PHP扩展”→勾选【intl】和【gettext】两项,这是多语言支持的硬性前提,不勾选后续所有配置都无效。
点击“重启PHP”按钮,等待状态栏变为绿色。打开浏览器访问http://localhost/phpinfo.php,搜索“intl”和“gettext”,确认两行都显示“enabled”才算成功。
立即学习“PHP免费学习笔记(深入)”;
创建语言包目录结构与基础文件
在你的项目根目录下新建lang文件夹,里面按语言代码建子目录:zh_CN、en_US、ja_JP。
每个子目录内放一个messages.php文件,内容为返回关联数组的PHP脚本,例如zh_CN/messages.php写成:
<?php return [ 'welcome' => '欢迎访问', 'contact' => '联系我们' ]; ?>
en_US/messages.php则对应:
<?php return [ 'welcome' => 'Welcome', 'contact' => 'Contact Us' ]; ?>
注意:所有文件必须保存为UTF-8无BOM格式,否则中文会变成问号;不要用记事本另存,改用VS Code或Notepad++。
编写语言自动检测与加载逻辑
在项目入口文件(如index.php)顶部加入以下代码:
<?php
session_start();
// 方法一:优先读URL参数
if (isset($_GET['lang']) && in_array($_GET['lang'], ['zh_CN', 'en_US', 'ja_JP'])) {
$_SESSION['lang'] = $_GET['lang'];
}
// 方法二: fallback 到 Accept-Language 头
if (!isset($_SESSION['lang'])) {
$accept = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '';
if (strpos($accept, 'zh') !== false) {
$_SESSION['lang'] = 'zh_CN';
} elseif (strpos($accept, 'ja') !== false) {
$_SESSION['lang'] = 'ja_JP';
} else {
$_SESSION['lang'] = 'en_US';
}
}
$lang = $_SESSION['lang'];
$lang_file = __DIR__ . '/lang/' . $lang . '/messages.php';
if (file_exists($lang_file)) {
$translations = include $lang_file;
} else {
$translations = [];
}
function __(string $key): string {
global $translations;
return1 $translations[$key] ?? $key;
}
?>
在HTML模板中调用翻译文本
把原来写死的中文文字全部替换成<?=__('welcome')?></span>这样的形式,比如:
<h1><?=__('welcome')?></h1>
<p><?=__('contact')?></p>
现在访问http://localhost/https://www.php.cn/link/4f214b4162fe47fb2a0bfa16d60d4608,页面就会显示日文;访问http://localhost/https://www.php.cn/link/a6c9fc333a8c76695f71dd7d166a56b7就显示英文;不带参数则按浏览器头自动匹配。



















