Thinkphp实现中英文切换类库(多语言切换源码)

浏览:3182 最后更新:2018-04-12 09:24 分类:示例 关键字: 多语言切换 中英文切换
演示可以参考下这里:http://t.cn/RjoR6Aa
最近开发需求中遇到的一个问题,要求是3个国家的语言,那怎么实现多个语言的相互切换呢,搞了两天才搞明白,希望对你也有些帮助。
1.Application/home/conf/下新建了一个tags.php,内容如下<?php
    //中英文切换需要的文件,似乎只要第一行app_begin就可以了
    return array(
        // 添加下面一行定义即可
        'app_begin'        => array('Behavior\CheckLangBehavior'),   //注意这里,官方的文档解释感觉有误(大家自行分辨),TP3.2.3用Behavior\CheckLang会出错,提示:Class 'Behavior\CheckLang' not found
        'LANG_SWITCH_ON'   => true,      // 开启语言包功能
        'LANG_AUTO_DETECT' => true,    // 自动侦测语言 开启多语言功能后有效
        'LANG_LIST'        => 'zh-cn,en-us',         // 允许切换的语言列表 用逗号分隔
        'VAR_LANGUAGE'     => 'l',          // 默认语言切换变量,注意到上面发的链接了么,l=zh-cn,就是在这里定义l这个变量
    );

?>
2.Application/home/conf/config.php中添加如下    //中英文切换语言包配置项
    'LANG_SWITCH_ON'     =>     true,    //开启语言包功能        
    'LANG_AUTO_DETECT'     =>     true, // 自动侦测语言
    'DEFAULT_LANG'         =>     'zh-cn', // 默认语言        
    'LANG_LIST'            =>    'zh-cn,en-us', //必须写可允许的语言列表
    'VAR_LANGUAGE'     => 'l', // 默认语言切换变量
3.把thinkphp中的Library中的Behavior\Checklangbehavior文件拷贝到:application/common/behavior中(没有文件夹的时候新建了一个):并且namespase改写成:
namespace Common\Behavior;
use Think\Behavior;
use Think\Hook;<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace Common\Behavior;
use Think\Behavior;
use Think\Hook;
/**
 * 语言检测 并自动加载语言包
 */
class CheckLangBehavior {

    // 行为扩展的执行入口必须是run
    public function run(&$params){
        // 检测语言
        $this->checkLanguage();
    }

    /**
     * 语言检查
     * 检查浏览器支持语言,并自动加载语言包
     * @access private
     * @return void
     */
    private function checkLanguage() {
        // 不开启语言包功能,仅仅加载框架语言文件直接返回
        if (!C('LANG_SWITCH_ON',null,false)){
            return;
        }
        $langSet = C('DEFAULT_LANG');
        $varLang =  C('VAR_LANGUAGE',null,'l');
        $langList = C('LANG_LIST',null,'zh-cn');
        // 启用了语言包功能
        // 根据是否启用自动侦测设置获取语言选择
        if (C('LANG_AUTO_DETECT',null,true)){
            if(isset($_GET[$varLang])){
                $langSet = $_GET[$varLang];// url中设置了语言变量
                cookie('think_language',$langSet,3600);
            }elseif(cookie('think_language')){// 获取上次用户的选择
                $langSet = cookie('think_language');
            }elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){// 自动侦测浏览器语言
                preg_match('/^([a-z\d\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
                $langSet = $matches[1];
                cookie('think_language',$langSet,3600);
            }
            if(false === stripos($langList,$langSet)) { // 非法语言参数
                $langSet = C('DEFAULT_LANG');
            }
        }
        // 定义当前语言
        define('LANG_SET',strtolower($langSet));

        // 读取框架语言包
        $file   =   THINK_PATH.'Lang/'.LANG_SET.'.php';
        if(LANG_SET != C('DEFAULT_LANG') && is_file($file))
            L(include $file);

        // 读取应用公共语言包
        $file   =  LANG_PATH.LANG_SET.'.php';
        if(is_file($file))
            L(include $file);
        
        // 读取模块语言包
        $file   =   MODULE_PATH.'Lang/'.LANG_SET.'.php';
        if(is_file($file))
            L(include $file);

        // 读取当前控制器语言包
        $file   =   MODULE_PATH.'Lang/'.LANG_SET.'/'.strtolower(CONTROLLER_NAME).'.php';
        if (is_file($file))
            L(include $file);
    }
}
评论( 相关
后面还有条评论,点击查看>>