CodeIgniter多语言支持靠结构规范而非配置堆砌,需四步:语言目录全小写下划线命名(如zh_cn)、_lang.php文件命名、路由正则剥离语言段、MY_Controller中统一提取切换语言并按需加载模块化语言包。

语言目录和文件命名必须严格标准化
每种语言对应一个子目录,全小写、下划线分隔(如 zh_cn、en_us、ja_jp、ko_kr、fr_fr),不能用连字符或大写(zh-CN 或 ZhCN 会失效)。
每个语言包文件以 _lang.php 结尾,例如:application/language/zh_cn/common_lang.phpapplication/language/en_us/common_lang.phpapplication/language/fr_fr/common_lang.php
键名只允许字母、数字、下划线,不能有空格或特殊字符:
✅ $lang['user_login'] = '登录';
❌ $lang['user login'] = '登录';(静默失败)
路由必须提前剥离语言段,避免控制器误解析
URL 如 /zh_cn/login,默认会被 CI 当作控制器 zh_cn、方法 login,直接 404。必须在 application/config/routes.php 靠前位置添加:
$route['^(zh_cn|en_us|ja_jp|ko_kr|fr_fr|es_es|de_de|it_it|pt_br|ru_ru|ar_sa|vi_vn|th_th|id_id|tr_tr)/(.+)$'] = '$2';$route['^(zh_cn|en_us|ja_jp|ko_kr|fr_fr|es_es|de_de|it_it|pt_br|ru_ru|ar_sa|vi_vn|th_th|id_id|tr_tr)$'] = 'home/index';
注意:正则括号内不能有空格;这两条必须放在 $route['default_controller'] 之后、泛匹配规则(如 $route['(:any)'])之前;Apache 的 .htaccess 中重写规则要带 [L] 标志。
MY_Controller 中统一提取并切换语言
在 application/core/MY_Controller.php 构造函数中处理:
- 先调
parent::__construct(),再读$this->uri->segment(1) - 预定义支持的语言数组:
$supported_langs = ['zh_cn','en_us','ja_jp','ko_kr','fr_fr','es_es','de_de','it_it','pt_br','ru_ru','ar_sa','vi_vn','th_th','id_id','tr_tr']; - 判断
$lang = $this->uri->segment(1)是否在该数组中,是则$this->config->set_item('language', $lang) - 立即加载通用语言包:
$this->lang->load('common', $lang) - 清空已加载缓存:
$this->lang->is_loaded = [];(否则后续lang()仍用旧语言)
按需加载模块化语言文件,减少冗余
不要把所有翻译塞进一个 common_lang.php。推荐按功能拆分:
-
menu_lang.php(导航栏) -
form_lang.php(表单提示) -
error_lang.php(错误信息) -
user_lang.php(用户相关)
控制器中按需加载:$this->lang->load(['menu', 'form'], $lang);
视图中统一用:<?php echo lang('menu_home'); ?> 或 <?php echo $this->lang->line('form_required'); ?>


















