CodeIgniter多语言实现方法详解


Posted in PHP onJanuary 20, 2016

本文实例分析了CodeIgniter多语言实现方法。分享给大家供大家参考,具体如下:

CI应用目录下有一个language语言包目录,用来配置多种不同的语言。语言的配置位于config文件中,配置格式如下:

$config['language'] = 'english';

定义语言文件

language下有个空的english目录,即上面定义的系统默认语言目录,系统会从该目录加载语言包文件。如果要定义不同的语言包,如zh_cn,则创建zh_cn目录并配置相应语言包文件即可。需要注意的是,语言文件的后缀必须为_lang.php,语言翻译通过数组的键值对来实现,为防止出现重复的键名,可以为键名增加统一的前缀。

配置的方式可参考下面:

$lang['menu_system_title'] = '系统设置';
$lang['menu_system_user_admin'] = '用户管理';
$lang['menu_system_user_list'] = '用户列表';
$lang['menu_system_user_detail'] = '用户详情';
$lang['menu_system_setting'] = '配置管理';
/* End of file user_menu_lang.php */
/* Location: ./system/language/zh_tw/user_menu_lang.php */

语言包的使用

使用语言包之前需要先加载语言包,加载和使用方式如下:

//加载方式一,加载时不需要传入_lang
$this->load->language(array('user_menu', 'user_message'));
//加载方式二
$this->lang->load('user_menu');
//使用方式一
echo $this->lang->line('language_key');
//使用方式二(需先加载language帮助函数)
$this->load->helper('language');
echo lang('menu_system_title');

可以说语言包的使用相当简单,前不久也做了个台湾版的系统,顺便说下CI中的语言包的使用及需要注意的问题。

1、$config['language'] 直接配置成 zh_cn 会怎么样?

系统中有一些默认的语言包位于system/language/english目录下,当使用系统中提供的一些类报错时会加载对应的语言包。此时系统会先到language/zh_cn目录下去查找,然后去system/language/zh_cn目录下查找,都找不到就提示找不到语言包的错误。所以若更改了language配置,最好拷贝system/language/english下的文件到对应的语言目录下。

这里看起来有点奇怪,为什么不是这种思维:先到language/zh_cn目录下去找,找不到就到system/language/english目录下去找。叫english可能不合适,应该称呼为系统默认的语言包。

2、是否需要使用语言包?

在某个系统中发现这样子的情况, 有些错误提示用的语言包,有些直接用的中文,可能因为多人开发的原因,键的命名也不太规范,经常需要去对比对应的语言文件,导致程序阅读起来相对麻烦,而中文的则没该问题,个人在系统中使用语言包也觉得有点麻烦。所以,不需要考虑多语言的程序尽量还是不要使用语言包的好。

3、如何自动检测语言包?

通常情况下可以根据浏览器的语言类型来判断,PHP中的$_SERVER['HTTP_ACCEPT_LANGUAGE']可以获取到该值,然后根据字符串分隔或者正则匹配等方式即可获取到客户端浏览器默认语言类型。获取到之后通过

$this->config->set_item('language', 'zh_cn');
设置即可。

关于是否确实使用了语言包,可以重写lang函数,带^_^即为使用了语言包,参考如下:

function lang($line, $param = array())
{
  $CI =& get_instance();
  $line = $CI->lang->line($line);
  if(is_array($param) && count($param) > 0) {
    array_unshift($param, $line);
    $line = call_user_func_array('sprintf', $param);
  }
  return '^_^'.$line;
}

很多情况下多语言的实现都是通过数组的形式来实现,还有一些是.mo的格式,l18n多语言的实现方式,php中需要php_gettext扩展支持,详情可查阅相关资料。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
强烈推荐:php.ini中文版(2)
Oct 09 PHP
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
PHP入门学习的几个不错的实例代码
Jul 13 PHP
彻底杜绝PHP的session cookie错误
Aug 09 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
浅谈php命令行用法
Feb 04 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 #PHP
教你php如何实现验证码
Jan 20 #PHP
CodeIgniter辅助之第三方类库third_party用法分析
Jan 20 #PHP
CodeIgniter扩展核心类实例详解
Jan 20 #PHP
CodeIgniter视图使用注意事项
Jan 20 #PHP
CodeIgniter读写分离实现方法详解
Jan 20 #PHP
PHP实现微信网页授权开发教程
Jan 19 #PHP
You might like
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
python集合用法实例分析
2015/05/30 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
python list格式数据excel导出方法
2018/10/31 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
PHP中如何创建和修改数组
2012/05/02 面试题
幼师求职自荐信范文
2014/01/26 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
创建文明学校实施方案
2014/03/11 职场文书
小班上学期评语
2014/05/05 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书