Home  >  Article  >  Backend Development  >  thinkphp implements multi-language functions (language pack)

thinkphp implements multi-language functions (language pack)

不言
不言Original
2018-06-06 15:52:395599browse

This article mainly introduces thinkphp to implement multi-language functions (language packages). Friends who need it can refer to it

1. Add the following configuration to config.php in Home (the project name you chose)

Copy code The code is as follows:

<?php
return array(
    //&#39;配置项&#39;=>&#39;配置值&#39;
        &#39;LANG_SWITCH_ON&#39;     =>     true,    //开启语言包功能        
        &#39;LANG_AUTO_DETECT&#39;     =>     true, // 自动侦测语言
        &#39;DEFAULT_LANG&#39;         =>     &#39;zh-cn&#39;, // 默认语言        
        &#39;LANG_LIST&#39;            =>    &#39;en-us,zh-cn,zh-tw&#39;, //必须写可允许的语言列表
        &#39;VAR_LANGUAGE&#39;     => &#39;l&#39;, // 默认语言切换变量
);
?>

2.Add a php file (tag.php) to the conf folder of Home and add the following code:

Copy code The code is as follows:

return array(
    // 添加下面一行定义即可
    &#39;app_begin&#39; => array(&#39;CheckLang&#39;)
);

3. Copy the Extend/Behavior/CheckLangBehavior.class.php file to Home/lib/Behavior/ (the full version of thinkphp package only has , if not, please create it yourself)

CheckLangBehavior.class.php code:

Copy code The code is as follows:

<?php
defined(&#39;THINK_PATH&#39;) or exit();
/**
 * 语言检测 并自动加载语言包
 * @category   Extend
 * @package  Extend
 * @subpackage  Behavior
 */
class CheckLangBehavior extends Behavior {
    // 行为参数定义(默认值) 可在项目配置中覆盖
    protected $options   =  array(
            &#39;LANG_SWITCH_ON&#39;        => false,   // 默认关闭语言包功能
            &#39;LANG_AUTO_DETECT&#39;      => true,   // 自动侦测语言 开启多语言功能后有效
            &#39;LANG_LIST&#39;             => &#39;zh-cn&#39;, // 允许切换的语言列表 用逗号分隔
            &#39;VAR_LANGUAGE&#39;          => &#39;l&#39;,        // 默认语言切换变量
        );
    // 行为扩展的执行入口必须是run
    public function run(&$params){
        // 开启静态缓存
        $this->checkLanguage();
    }
    /**
     * 语言检查
     * 检查浏览器支持语言,并自动加载语言包
     * @access private
     * @return void
     */
    private function checkLanguage() {
        // 不开启语言包功能,仅仅加载框架语言文件直接返回
        if (!C(&#39;LANG_SWITCH_ON&#39;)){
            return;
        }
        $langSet = C(&#39;DEFAULT_LANG&#39;);
        // 启用了语言包功能
        // 根据是否启用自动侦测设置获取语言选择
        if (C(&#39;LANG_AUTO_DETECT&#39;)){
            if(isset($_GET[C(&#39;VAR_LANGUAGE&#39;)])){
                $langSet = $_GET[C(&#39;VAR_LANGUAGE&#39;)];// url中设置了语言变量
                cookie(&#39;think_language&#39;,$langSet,3600);
            }elseif(cookie(&#39;think_language&#39;)){// 获取上次用户的选择
                $langSet = cookie(&#39;think_language&#39;);
            }elseif(isset($_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;])){// 自动侦测浏览器语言
                preg_match(&#39;/^([a-z\d\-]+)/i&#39;, $_SERVER[&#39;HTTP_ACCEPT_LANGUAGE&#39;], $matches);
                $langSet = $matches[1];
                cookie(&#39;think_language&#39;,$langSet,3600);
            }
            if(false === stripos(C(&#39;LANG_LIST&#39;),$langSet)) { // 非法语言参数
                $langSet = C(&#39;DEFAULT_LANG&#39;);
            }
        }
        // 定义当前语言
        define(&#39;LANG_SET&#39;,strtolower($langSet));
        $group = &#39;&#39;;
        $path    =   (defined(&#39;GROUP_NAME&#39;) && C(&#39;APP_GROUP_MODE&#39;)==1) ? BASE_LIB_PATH.&#39;Lang/&#39;.LANG_SET.&#39;/&#39; : LANG_PATH.LANG_SET.&#39;/&#39;;
        // 读取项目公共语言包
        if(is_file(LANG_PATH.LANG_SET.&#39;/common.php&#39;))
            L(include LANG_PATH.LANG_SET.&#39;/common.php&#39;);     
        // 读取分组公共语言包
        if(defined(&#39;GROUP_NAME&#39;)){
            if(C(&#39;APP_GROUP_MODE&#39;)==1){ // 独立分组
                $file = $path.&#39;common.php&#39;;
            }else{ // 普通分组
                $file = $path.GROUP_NAME.&#39;.php&#39;;
                $group = GROUP_NAME.C(&#39;TMPL_FILE_DEPR&#39;);
            }
            if(is_file($file))
                L(include $file);
        }
        // 读取当前模块语言包
        if (is_file($path.$group.strtolower(MODULE_NAME).&#39;.php&#39;))
            L(include $path.$group.strtolower(MODULE_NAME).&#39;.php&#39;);
    }
}

4. In Home Create 3 language folders under the lang folder. They are zh-cn en-us zh-tw,

Create a common.php file in each of these three folders, as shown in the picture:

Write the corresponding in common.php

Copy code The code is as follows:

<?php
return array(
        &#39;welcome&#39;=>&#39;Welcome to use thinkphp&#39;,
);
?>

Copy code The code is as follows:

<?php
return array(
    &#39;welcome&#39;=>&#39;欢迎使用ThinkPHP&#39;,
);
?>

Copy code The code is as follows:

<?php
return array(
    &#39;welcome&#39;=>&#39;歡迎使用ThinkPHP&#39;,
);
?>

5. Create the view index.html under the tpl/Index/ folder

Copy the code The code is as follows:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>ThinkPHP示例:多语言</title>
 </head>
 <body>
 <p class="main">
<p>切换语言:<a href="?l=zh-cn">简体中文</a> | <a href="?l=zh-tw">繁体中文</a> | <a href="?l=en-us">英文</a></p>
 <p class="result">{$Think.lang.welcome}</p>
</p>
 </body>
</html>

Done!

If you want to switch the background language, add L before each sentence, such as:

Copy code The code is as follows:

public function index(){
print  L(&#39;add_user_error&#39;);  //add_user_error只是语言变量,具体的语言要到语言包里写
$this->display();
}

I think cakephp does this better. There is no need to give a variable to every sentence.

Related recommendations:

Solution to ThinkPHP automatic verification failure

The above is the detailed content of thinkphp implements multi-language functions (language pack). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn