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利用header函数实现文件下载时直接提示保存
Nov 12 PHP
PHP 引用是个坏习惯
Mar 12 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
php文件缓存类汇总
Nov 21 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
Jul 13 PHP
PHP实现的网站目录扫描索引工具
Sep 08 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
php文件包含的几种方式总结
Sep 19 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添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
PHP常用的三种设计模式汇总
2016/08/28 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
js控制table合并具体实现
2014/02/20 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
python基础教程之缩进介绍
2014/08/29 Python
Python实现包含min函数的栈
2016/04/29 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
python如何求解两数的最大公约数
2018/09/27 Python
在python中实现对list求和及求积
2018/11/14 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
Python帮你识破双11的套路
2019/11/11 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
应届生求职信写作技巧
2013/10/24 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
主要负责人任命书
2014/06/06 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
歌舞青春观后感
2015/06/10 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL
MySQL的存储过程和相关函数
2022/04/26 MySQL