codeigniter 3 后台一键切换语言需满足语言状态可写、加载可重置、视图可刷新——通过校验语言参数、存入 session、更新 config、清空 $this->lang->is_loaded 缓存并重定向实现,语言包须规范命名(如 zh_cn/common_lang.php),基类控制器统一加载,视图中直接调用 $this->lang->line() 即可。

CodeIgniter 3 实现后台一键切换语言,核心在于「语言状态可写、加载可重置、视图可刷新」——不是改个配置就生效,而是要让语言切换动作真正影响到后续所有 $this->lang->line() 调用。
语言目录与文件命名必须规范
确保语言包结构严格符合 CI 规范,否则切换后仍返回空字符串:
- 语言目录放在
application/language/下,子目录名全小写+下划线,如zh_cn、en_us(不能是zh-CN或zhcn) - 每个语言文件以
_lang.php结尾,例如common_lang.php - 键名只允许字母、数字、下划线,禁止空格或特殊字符:
$lang['user_login'] = '登录';✅,$lang['user login'] = '登录';❌
后台控制器中完成切换逻辑
在后台管理控制器(如 Admin.php)里提供切换入口,关键点是:立即更新配置 + 清空已加载缓存 + 重定向回原页面:
- 接收语言参数(如
POST['lang']或GET['lang']),校验是否在白名单内:in_array($lang, ['zh_cn', 'en_us', 'ja_jp']) - 写入 session 或 cookie 保存用户偏好:
$this->session->set_userdata('language', $lang); - 调用
$this->config->set_item('language', $lang)更新运行时语言项 - 手动清空语言类缓存:
$this->lang->is_loaded = [];(否则旧语言内容仍被复用) - 重定向回上一页(用
HTTP_REFERER或记录跳转地址),避免重复提交
基类控制器自动适配当前语言
所有控制器继承自 MY_Controller,在构造函数中统一处理语言加载:
- 先执行
parent::__construct(),再读取 session 中的语言值:$lang = $this->session->userdata('language') ?: 'zh_cn'; - 设置配置:
$this->config->set_item('language', $lang) - 加载通用语言包:
$this->lang->load('common', $lang) - 如有模块专属语言包(如
admin_lang.php),也在该处按需加载
视图中使用语言行无需额外判断
切换完成后,视图中直接调用即可,CI 会自动使用当前 session 绑定的语言:
-
<?php echo lang('welcome_message'); ?>(需加载 language helper) - 或
<?php echo $this->lang->line('welcome_message'); ?> - 注意:不要在视图里硬编码
$this->lang->load(),应在控制器中完成加载











