codeigniter4多语言功能核心在于locale自动识别与切换:启用内容协商($negotiatelocale=true)可依浏览器accept-language自动匹配,或通过url路径前缀(如/zh/login)手动指定;语言文件须按app/language/{locale}/filename.php规范存放并返回合法键值数组。

CodeIgniter4 开启多语言功能比 CI3 更简洁,但关键点不在“加载语言文件”,而在区域设置(locale)的自动识别与切换机制。只要配置到位,无需手动解析 URL、重写路由、继承控制器,系统就能根据浏览器 Accept-Language 或 URL 路径自动匹配语言。
启用内容协商自动检测语言
这是最快捷的方式,适合大多数网站,默认按用户浏览器语言偏好选择对应语言:
- 打开 app/Config/App.php,将
$negotiateLocale = true;设为 true - 在同文件中设置支持的语言列表:
$supportedLocales = ['en', 'zh', 'ja', 'fr']; - 确保语言文件放在 app/Language/ 下,按语言代码建子目录,例如:
app/Language/zh/App.php
app/Language/en/App.php
app/Language/ja/App.php - 每个语言文件返回一个关联数组,键名用小写字母+下划线,如
'user_login' => '登录'
通过 URL 路径手动指定语言
若需用户点击切换(如 /zh/login、/en/login),则启用路径前缀方式:
Gene6 FTP Server Professional v3.10.0.2 多语言特别版(集成了中文)
- 保持
$negotiateLocale = false;(或不设,默认 false) - 在 app/Config/Routes.php 中添加带 locale 的路由组:
$routes->setLocale('zh');<br>
$routes->group('{locale}', ['namespace' => 'App\Controllers'], function ($routes) {<br>
$routes->get('login', 'Auth::login');<br>
});
- 框架会自动从 URL 第一段提取
{locale},并设置当前请求的 locale(如访问 /zh/login → locale=zh) - 视图中调用
lang('user_login')就会自动读取 app/Language/zh/App.php 对应键值
语言文件怎么写才有效
不是随便命名就能用,CI4 有明确规范:
- 目录结构必须是 app/Language/{locale}/FileName.php,比如 app/Language/zh/Auth.php
- 文件必须返回数组:
return ['login_title' => '用户登录', 'email_required' => '邮箱不能为空']; - 键名只能含小写字母、数字、下划线,不能有空格、连字符或中文标点
- 加载时不用加扩展名,也不用写
_lang后缀:在控制器里$this->lang->load('Auth');即可
在视图和控制器里安全使用翻译
避免因语言未加载而返回空字符串:
- 模板中统一用辅助函数:
= lang('login_title') ?>(自动使用当前 locale) - 控制器中推荐先检查再取值:
if (lang('email_required')) echo lang('email_required'); - 需要强制指定语言时,可用:
lang('login_title', 'en') - 默认 fallback 行为:若 zh 里没定义
login_title,且$negotiateLocale = true,会退回到$supportedLocales[0](如 en)查找










