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
mysql下创建字段并设置主键的php代码
May 16 PHP
destoon常用的安全设置概述
Jun 21 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
PHP通过串口实现发送短信
Jul 08 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
php xhprof使用实例详解
Apr 15 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
javascript删除一个html元素节点的方法
2014/12/20 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python中zip()函数用法实例教程
2014/07/31 Python
Python中字典和JSON互转操作实例
2015/01/19 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
python-opencv颜色提取分割方法
2018/12/08 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
三维科技面试题
2013/07/27 面试题
小型女装店的创业计划书
2014/01/09 职场文书
广播体操比赛口号
2014/06/10 职场文书
软环境建设心得体会
2014/09/09 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
小学生校园广播稿
2014/09/28 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
前台接待员岗位职责
2015/04/15 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
幼儿园班级工作总结2015
2015/05/25 职场文书
和谐拯救危机观后感
2015/06/15 职场文书
创业计划书之美容店
2019/09/16 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python