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 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
php过滤危险html代码
Aug 18 PHP
php数组对百万数据进行排除重复数据的实现代码
Jun 08 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
php共享内存段示例分享
Jan 20 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
php session的应用详细介绍
Mar 22 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
详解Laravel框架的依赖注入功能
May 27 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!数据库
2008/05/03 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
js中document.write使用过程中的一点疑问解答
2014/03/20 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
Es6 写的文件import 起来解决方案详解
2016/12/13 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
JS 验证码功能的三种实现方式
2018/11/26 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
python psutil库安装教程
2018/03/19 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
python中Django文件上传方法详解
2020/08/05 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
市场开发与营销专业求职信
2013/12/31 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
优秀班主任材料
2014/12/16 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
民事答辩状格式范文
2015/05/21 职场文书
总结会主持词
2015/07/02 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python