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中根据某年第几天计算出日期年月日的代码
Feb 24 PHP
PHP学习笔记之数组篇
Jun 28 PHP
php面向对象 字段的声明与使用
Jun 14 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
PHP中多维数组的foreach遍历示例
Jun 13 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
PHP中的表达式简述
May 29 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
Jan 12 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 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
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
php防止sql注入代码实例
2013/12/18 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
购物车前端开发(jQuery和bootstrap3)
2016/08/27 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
django之自定义软删除Model的方法
2019/08/14 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
python主要用于哪些方向
2020/07/05 Python
购买美国制造的相框和画框架:Picture Frames
2018/08/14 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
竞争性谈判邀请书
2014/02/06 职场文书
个人授权委托书范本
2014/09/14 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
python实现简单的名片管理系统
2021/04/26 Python
选购到合适的激光打印机
2022/04/21 数码科技
python+opencv实现目标跟踪过程
2022/06/21 Python