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个人网站架设连环讲(三)
Oct 09 PHP
在任意字符集下正常显示网页的方法一
Apr 01 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
php基于curl实现随机ip地址抓取内容的方法
Oct 11 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
Jul 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简单系统查询模块代码打包下载
2008/06/07 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
php+mysql删除指定编号员工信息的方法
2015/01/14 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Python中map和列表推导效率比较实例分析
2015/06/17 Python
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
python实现linux下抓包并存库功能
2018/07/18 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
Python列表与元组的异同详解
2019/07/02 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
南京迈特望C/C++面试题
2012/07/09 面试题
银行个人求职自荐信范文
2013/12/16 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS