ThinkPHP多语言包功能使用

用ThinkPHP3.2:

  • 语言包功能可分整个项目或者某个模块来设置
  • 语言包读取的优先顺序
  • 语言包的切换原理
  • 以整个项目为例,模块下同理

一、做好配置工作

1.开启多语言行为,在Application/Common/Conf/tags.php(没有则自己创建)

<?php
return array(
    // 开启多语言行为
    'app_begin' => array('Behavior\CheckLangBehavior'),
);

2.在Application/Common/Conf/config.php配置文件中添加配置项

    'LANG_SWITCH_ON' => true, //开启语言包功能  
    'LANG_AUTO_DETECT' => true,// 自动侦测语言
    'LANG_LIST'        => 'zh-cn,zh-hk,en_us',//可允许的语言列表
    'DEFAULT_LANG'     =>  'zh-cn',// 默认语言
    'VAR_LANGUAGE'     => 'l',// 默认语言切换变量

3.准备好相关语言包及内容(一般取名规则:语言简写-地区简写,名字能匹配上就行),如图
这里写图片描述
这里写图片描述
这里写图片描述

二、在项目中使用

1.在控制器中使用L方法获取语言包中的文字:L(‘CeShi’)
2.在模板中使用,如以下代码:

<div class="top-main-right  clear">
    <a href=""><span class="sina"></span>{$Think.lang.CeShi}</a>
    <a href=""><span class="tencent"></span>{$Think.lang.NiHao}</a> |
    <a href="" >{$Think.lang.ZSCS}</a> |
    <!--控制器中直接使用L方法读取语言包-->
    <a href="">{:L('YuYanJianXie')}</a> |
    当前语言:
    <span class="language-selected">{$Think.lang.YuYanMingCheng}</span>
    <div class="language-box">
        <ul>
            <li><a href="?l=zh-cn">简体中文</a></li>
            <li><a href="?l=zh-hk">繁體中文</a></li>
            <li><a href="?l=en_us">English</a></li>
        </ul>
    </div>
</div>

三、前端页面效果图

1.简体中文
这里写图片描述
2.鼠标移入来切换
这里写图片描述
3.繁体中文
这里写图片描述
4.英文
这里写图片描述

四、注意点

1.读取顺序:

ThinkPHP/Lang/zh-cn.php 框架底层语言包
Application/Common/Lang/zh-cn.php 应用公共语言包
Application/Home/Lang/zh-cn.php Home模块语言包
Application/Home/Lang/zh-cn/user.php Home模块的User控制器语言包

2.配置注意点:开启了自动侦测,优先侦测的,没有开启侦测,优先默认的,自动侦测优先于默认。

3.切换原理:第一次进入网站使用自动侦测的语言包,或者默认的,在我们通过GET方式提交后会更改 $_COOKIE[‘think_language’],网站运行时会先读取cookie来判断使用哪个语言包。

4.自动侦测:在我们开启的多语言行为的文件中,默认位置是:/ThinkPHP/Library/Behavior/CheckLangBehavior.class.php;有需要的也可以在这里自己加上通过地区IP来判断。

// 根据是否启用自动侦测设置获取语言选择
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');
    }
}

若对你有帮助,请留下一个顶吧 : )

发布了6 篇原创文章 · 获赞 4 · 访问量 2377

猜你喜欢

转载自blog.csdn.net/dahai_PHP/article/details/65451650