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 相关文章推荐
一个用mysql_odbc和php写的serach数据库程序
Oct 09 PHP
模板引擎Smarty深入浅出介绍
Dec 06 PHP
一些 PHP 管理系统程序中的后门
Aug 05 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
php多线程并发实现方法
Sep 30 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 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 CURL模拟GET及POST函数代码
2010/04/25 PHP
PHP学习笔记之二 php入门知识
2011/01/12 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
PHP与jquery实时显示网站在线人数实例详解
2016/12/02 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
python实现xlsx文件分析详解
2018/01/02 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
python中的&&及||的实现示例
2019/08/07 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
简单英文演讲稿
2014/01/01 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
2014年行政部工作总结
2014/11/19 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
班主任先进事迹材料
2014/12/17 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
违纪检讨书
2015/01/27 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android