视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
PHP如何实现多语言
2020-11-27 14:18:50 责编:小采
文档


php实现多语言功能:

推荐:php5下载

在Home(你取的项目名)的config.php中添加如下配置

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

Home的conf文件夹里添加一个php文件(tag.php),添加如下代码:

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

把Extend/Behavior/CheckLangBehavior.class.php 文件复制到Home/lib/Behavior/中(完整版的thinkphp包才有,没有的话请自行创建)

CheckLangBehavior.class.php代码:

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

在Home里的lang文件夹下创建3个语言文件夹。分别是zh-cn en-us zh-tw,

在这三个文件夹里各创建一个common.php文件,如图:

在common.php 里对应写上

<?php 
return array( 
 'welcome'=>'Welcome to use thinkphp', 
); 
?>
<?php 
return array( 
 'welcome'=>'欢迎使用ThinkPHP', 
); 
?>
<?php 
return array( 
 'welcome'=>'歡迎使用ThinkPHP', 
); 
?>

在tpl/Index/文件夹下创建视图 index.html

<!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> 
 <div class="main"> 
<div>切换语言:<a href="?l=zh-cn">简体中文</a> | <a href="?l=zh-tw">繁体中文</a> | <a href="?l=en-us">英文</a></div> 
 <div class="result">{$Think.lang.welcome}</div> 
</div> 
 </body> 
</html>

下载本文
显示全文
专题