codeigniter动态切换语言需在控制器中识别语言标识、更新配置、加载语言包并清空缓存,三步缺一不可;优先从url或session获取合法语言码(如zh_cn),校验后调用set_item()、load()和重置is_loaded,语言文件须符合命名规范。

CodeIgniter 多语言控制器里动态切换语言,关键不是改配置项就完事,而是让语言加载与当前请求上下文实时对齐。控制器中必须主动识别语言标识、更新配置、加载对应语言包,并清空旧缓存,否则 $this->lang->line() 会静默返回空字符串。
从 URL 路径提取语言码
假设 URL 是 /zh_cn/dashboard 或 /en_us/profile,语言段在第一段。需在控制器构造函数中尽早读取:
- 调用
parent::__construct()后,再用$this->uri->segment(1)获取首段 - 校验是否为合法语言目录名(如
zh_cn、en_us),建议白名单判断:in_array($lang, ['zh_cn', 'en_us', 'ja_jp']) - 若不匹配,可 fallback 到默认语言(如
english)或重定向到带语言前缀的首页
设置并加载对应语言
确认语言码后,必须显式执行三步操作,缺一不可:
Gene6 FTP Server Professional v3.10.0.2 多语言特别版(集成了中文)
-
$this->config->set_item('language', $lang)—— 更新运行时语言配置 -
$this->lang->load('common', $lang)—— 加载指定语言包(如application/language/zh_cn/common_lang.php) -
$this->lang->is_loaded = []—— 清空已加载缓存,避免后续调用仍用旧语言
支持用户手动切换(带 Session 记忆)
如果用户点击国旗图标切换语言,可在控制器方法中接收参数并持久化:
- 接收 POST 或 GET 参数:
$new_lang = $this->input->post('lang') ?: $this->input->get('lang') - 验证合法性后写入 Session:
$this->session->set_userdata('user_lang', $new_lang) - 下次请求时,优先读 Session:
$lang = $this->session->userdata('user_lang') ?: $this->uri->segment(1) - 注意:Session 中存的值也必须符合目录命名规范(小写+下划线),不能是
zh-CN或Chinese
语言文件和键名要严格合规
控制器能切成功,前提是语言资源本身可用:
- 语言目录必须位于
application/language/下,子目录名全小写、下划线分隔(zh_cn✅,zh-CN❌) - 语言文件以
_lang.php结尾,例如common_lang.php - 键名只能含字母、数字、下划线,不能有空格或中文:
$lang['welcome_message'] = '欢迎';✅,$lang['欢迎信息'] = '欢迎';❌










