发新话题
打印

关于ThinkPHP多语言的支持和使用

关于ThinkPHP多语言的支持和使用

ThinkPHP是支持多语言和多模版的。多语言的支持是通过语言包的方式,每个项目可以定义自己的语言包,其文件存放目录是在项目目录下面的Lang目录。

语言文件的命名方式
采用浏览器的语言命名(全部小写)定义,如:
  • 简体中文 zh-cn.php
  • 繁体中文 zh-tw.php
  • English (United States) en-us.php



语言包的定义方式
为了不和系统的配置常量冲突 建议语言的定义常量采用“_”打头(但是这个没有限制,只要不产生冲突),例如:
  • define('_SUCCESS','操作成功');
  • define('_ERROR','页面出错');


然后在Action类里面使用定义的语言常量就可以了。
例如,示例代码:
  • $result = $dao->save($user);
  •             if($result) {
  •                  $this->success(_SUCCESS);
  •                  $this->assign("jumpUrl",__APP__);
  •             }else {
  •                  $this->error(_ERROR);
  •             }



上面的语言包是指项目的语言包,如果在提示信息的时候使用了框架底层的提示,那么还需要定义系统的语言包,系统语言包目录位于ThinkPHP目录下面的Lang目录。
如果需要在模版里面输出语言定义,使用常量显示标签就可以了。
类似于 {$Think._ERROR} 就可以根据当前语言显示提示了。

多语言的切换
ThinkPHP的多语言支持是自动的,系统会根据用户的浏览器语言设置自动获取相关的语言包,如果找到匹配当前的语言包文件,就会自动加载进来,因此不需要你手动加载语言包文件在项目中。
如果你需要测试语言包的话,可以使用l参数(可以通过项目配置项VAR_LANGUAGE设置)来手动切换,进行效果测试。例如:
  • http:/ /ServerIP/AppName/ModuleName/ActionName/l/zh-tw/  //切换到繁体中文
  • http:/ /ServerIP/AppName/ModuleName/ActionName/l/en-us/ //切换到英文



上面的方式是动态数据的输出,如果对于模版里面的静态内容也需要多语言支持的话,可以通过定义多个模版系列来解决(如果你不怕麻烦,也可以使用语言包常量定义,呵呵~)。也就是说,你给简体定义一个模版,繁体定义一个模版。手动切换模版的方法和语言切换类似,不过使用 t 变量(可以通过项目配置项VAR_TEMPLATE设置)。

其实,通常的多语言应用主要是涉及到其他语言,对于只是想要简体和繁体两种语言支持的话,通常不需要使用语言包功能,支持使用框架的简繁转换插件就可以了。该插件是服务器端,还可以考虑客户端的JS简繁转换解决方案。

暂时就先写这么多,如果还有疑问的,请回复~
神迹兄~~好久不见鸟~~~

TOP

发新话题