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
抓取YAHOO股票报价的类
May 15 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
php中模拟POST传递数据的两种方法分享
Sep 16 PHP
php全排列递归算法代码
Oct 09 PHP
php批量更改数据库表前缀实现方法
Oct 26 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
Jun 22 PHP
详细解读php的命名空间(二)
Feb 21 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
javascript的this关键字详解
2019/05/20 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
在Python的Django框架中加载模版的方法
2015/07/16 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
python pycharm的安装及其使用
2019/10/11 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
澳大利亚头发和美容产品购物网站:OZ Hair & Beauty
2020/03/27 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
入党思想汇报
2014/01/05 职场文书
护理不良事件检讨书
2014/02/06 职场文书
《风筝》教学反思
2014/04/10 职场文书
高中生操行评语大全
2014/04/25 职场文书
企业诚信承诺书
2014/05/23 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
如何书写邀请函?
2019/06/24 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android