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
php,ajax实现分页
Mar 27 PHP
fleaphp rolesNameField bug解决方法
Apr 23 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
Apr 08 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
使用PHP编写发红包程序
Jul 22 PHP
php函数连续调用实例分析
Jul 30 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
Symfony2 session用法实例分析
Feb 04 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 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
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
javascript 写类方式之十
2009/07/05 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
python常见数制转换实例分析
2015/05/09 Python
Python选课系统开发程序
2016/09/02 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
J2EE中常用的名词进行解释
2015/11/09 面试题
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
安全生产演讲稿
2014/05/09 职场文书
责任书格式
2015/01/29 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫
Redis实现订单过期删除的方法步骤
2022/06/05 Redis