才接触TP的新手朋友,先看看官方双语支持说明>>
待更新完善!
最近在做一个企业网站,客户要求做中英文双语版,于是研究了一下TP的语言包的使用,以TP3.2.3为例。
普及一句话:ThinkPHP的多语言支持是指的是模板多语言支持,数据的多语言转换(翻译)不在这个范畴之内。
接下来要达到的目的:
例如在提交留言表单时,action="/?m=home&c=message&a=add&l=zh-cn",
假设此时用户输入验证码错误,程序提示信息为中文“验证码错误或已过期”,参数 l=en-us 时程序提示信息为英文“Verification code input error or expired!”。
当然上面这个效果我们通过一个简单的参数判断就可以实现,但我们要换一种方法,也就是用多语言支持来实现。
实现流程:1、配置:开启多语言功能 —> 2、自定义语言包 —> 3、运用
1、配置:开启多语言功能
新建一个tags.php语言包配置文件,我们以放在应用公共目录下Conf目录为例(位置不同,作用的范围不同,见官方解释)
放置到 \Application\Common\Conf\tags.php<?php <br />
/**<br>
* 语言包配置文件<br>
*/<br>
return array(<br>
'app_begin' => array('Behavior\CheckLangBehavior'), //注意这里,官方的文档解释感觉有误(大家自行分辨),TP3.2.3用Behavior\CheckLang会出错,提示:Class 'Behavior\CheckLang' not found<br>
'LANG_SWITCH_ON' => true, // 开启语言包功能<br>
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效<br>
'LANG_LIST' => 'zh-cn,', // 允许切换的语言列表 用逗号分隔<br>
'VAR_LANGUAGE' => 'l', // 默认语言切换变量,注意到上面发的链接了么,l=zh-cn,就是在这里定义l这个变量<br>
);
2、自定义语言包
在\Application\Common\Lang\目录下建立两个文件(如果Lang目录不存在则新建):
\Application\Common\Lang\zh-cn.php //中文
\Application\Common\Lang\en-us.php //英文
如下图结构所示:
如果需要定义别的语言添加新的文件即可,但文件名的命名采用浏览器的语言命名(全部小写)定义。
zh-cn.php的内容如下:<?php <br />
/**<br>
* 中文自定义<br>
*/<br>
return array(<br>
/* 在线留言 */<br>
'VERI_CODE_ERROR'=>'验证码输入错误或已过期!', //这里只定义了一个项,用做例子,键名可以随意取<br>
//...其他<br>
);
en-us.php的内容如下:<?php <br />
/**<br>
* English custom<br>
*/<br>
return array(<br>
/* message */<br>
'VERI_CODE_ERROR'=>'Verification code input error or expired!', //键名可以随意取,但要与上面的中文的键名保持一致,值翻译成英文<br>
//...other<br>
);
3、运用
做个简单的测试:
假设我们将提交留言表单设置action="/?m=home&c=message&a=add&l=en-us",也就是把表单数据提交到message控制器下的add()方法,接收程序代码如下:<?php <br />
namespace Home\Controller;<br>
use Think\Controller;<br>
use Think\Think;<br>
<br>
class MessageController extends Controller {<br>
function __construct(){}<br>
public function add(){<br>
//验证码核对 <br>
if(....){ //假设验证码输入错误<br>
$this->error(L('VERI_CODE_ERROR')); //关键代码:L('VERI_CODE_ERROR') L方法可获取或设置语言定义,这里由于传递进来的 l 参数的值为en-us,所以显示的是 Verification code input error or expired!这个提示。<br>
}<br>
}<br>
}
4、小结:上面是一个简单的用例,但可以通过这个例子运用多语言支持这个功能点,流程就是这样,对新手朋友可能有点帮助。
AD:真正免费,域名+虚机+企业邮箱=0元