thinkphp 多语言支持
ThinkPHP内置多语言支持,如果你的应用涉及到国际化的支持,那么可以定义相关的语言包文件。任何字符串形式的输出,都可以定义语言常量。
要启用多语言功能,需要配置开启多语言行为,在应用的配置目录下面的行为定义文件tags.php中,添加:
return array(// 添加下面一行定义即可'app_begin' => array('Behavior\CheckLang'),// 如果是3.2.1版本 需要改成// 'app_begin' => array('Behavior\CheckLangBehavior'),);
表示在app_begin标签位置执行多语言检测行为。
要开启语言包功能,需要开启
'LANG_SWITCH_ON' => true, // 开启语言包功能
其他的配置参数包括:
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效'LANG_LIST' => 'zh-cn', // 允许切换的语言列表 用逗号分隔'VAR_LANGUAGE' => 'l', // 默认语言切换变量
可以为项目定义不同的语言文件,框架的系统语言包目录在系统框架的Lang目录下面,每个语言都对应一个语言包文件,系统默认只有简体中文语言包文件zh-cn.php和英文语言包en-us.php ,如果要增加繁体中文zh-tw或者其他语言支持,只要增加相应的语言定义文件。
语言包的使用由系统自动判断当前用户的浏览器支持语言来定位,如果找不到相关的语言包文件,会使用默认的语言。如果浏览器支持多种语言,那么取第一种支持语言。
ThinkPHP的多语言支持是指的是模板多语言支持,数据的多语言转换(翻译)不在这个范畴之内。ThinkPHP具备语言包定义、自动识别、动态定义语言参数的功能。并且可以自动识别用户浏览器的语言,从而选择相应的语言包(如果有定义)。例如:
throw_exception('新增用户失败!');
我们在语言包里面增加了ADD_USER_ERROR语言配置变量的话,在程序中的写法就要改为:
throw_exception(L('ADD_USER_ERROR'));
也就是说,字符串信息要改成L方法和语言定义来表示。
应用语言包文件位于应用公共模块下的Lang目录,并且按照语言类别分子目录存放,在执行的时候系统会自动加载,无需手动加载。
具体的语言包文件命名和位置如下:
| 语言包 | 语言文件位置 |
|---|---|
| 应用语言包 | 应用公共目录/Lang/语言文件.php |
| 模块语言包 | 模块目录/Lang/语言文件.php |
| 控制器语言包 | 模块目录/Lang/语言目录/控制器名(小写).php |
以当前模块为Home、当前语言为zh-cn为例,我们可以读取语言包的顺序如下(如果没有定义则不读取):
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控制器语言包
语言子目录采用浏览器的语言命名(全部小写)定义,例如English (United States) 可以使用en-us作为目录名。如果项目比较小,整个项目只有一个语言包文件,那可以定义应用的公共语言文件即可,而无需按照模块分开定义。
语言文件定义
ThinkPHP语言文件定义采用返回数组方式:
return array('lan_define'=>'欢迎使用ThinkPHP',);
也可以在程序里面动态设置语言定义的值,使用下面的方式:
L('define2','语言定义');$value = L('define2');
通常多语言的使用是在控制器里面,但是模型类的自动验证功能里面会用到提示信息,这个部分也可以使用多语言的特性。例如原来的方式是把提示信息直接写在模型里面定义:
array('title','require','标题必须!',1),
如果使用了多语言功能的话(假设,我们在当前语言包里面定义了' lang_var'=>'标题必须!'),就可以这样定义模型的自动验证
array('title','require','{%lang_var}',1),
如果要在模板中输出语言变量不需要在控制器中赋值,可以直接使用模板引擎特殊标签来直接输出语言定义的值:大理石平台价格
{$Think.lang.lang_var}
可以输出当前选择的语言包里面定义的 lang_var语言定义。
变量传入支持
3.2.2版本开始,语言包定义的时候支持传入变量,例如:
'FILE_FORMAT' => '文件格式: {$format},文件大小:{$size}',
在模板中输出语言字符串的时候传入变量值即可:
{:L('FILE_FORMAT',array('format' => 'jpeg,png,gif,jpg','maximum' => '2MB'))}
thinkphp 多语言支持的更多相关文章
- thinkPHP的多语言支持如何配置和部署
框架底层语言包位于:ThinkPHP/Lang/zh-cn.php 可以参考如何编写语言文件 第一步:项目目录下的配置文件中配置多语言支持的相关选项 以我的路径为例是Application\Commo ...
- thinkphp多语言设置
thinkphp多语言设置有点'高大上',为什么说它有点'高大上'呢?因为本人设置了好久才弄好,而本人之所以弄了好久的原因,竟然是因为'开启语言设置必须得先开启初始化系统的行为类',所以,在这里,因为 ...
- tp 多语言支持
tp支持多语言 通过get来改变语言的 http://localhost/tp/index.php/Admin/User/add/hl/zh-cn http://localhost/tp/index. ...
- tp实现多语言支持测试
用tp框架实现网页多种语言切换 时间:2016-11-11 浏览次数:1120 编辑:youjiejie 网页如何设计多种语言切换,本文用tp框架实现网页多种语言切换方法结合实例形式较为详细的分析 ...
- 分享两种实现Winform程序的多语言支持的解决方案
因公司业务需要,需要将原有的ERP系统加上支持繁体语言,但不能改变原有的编码方式,即:普通程序员感受不到编码有什么不同.经过我与几个同事的多番沟通,确定了以下两种方案: 方案一:在窗体基类中每次加载并 ...
- EnumHelper.cs枚举助手(枚举描述信息多语言支持)C#
C#里面经常会用到枚举类型,枚举是值类型对象,如果你想用枚举类型的多属性特性,或者你想在MVC页面上通过简单的值类型转换,将某字段值所代表的含义转换为文字显示,这时候必须要将枚举扩展,是它支持文本描述 ...
- ios调用系统相册、相机 显示中文标题、本地化多语言支持
因为调用系统相册.相机需要显示中文,所以搞了半天才知道是在Project->info->Custom ios Target Properties 添加 Localizations 并加入C ...
- (视频)《快速创建网站》 3.3 国际化高大上 - WordPress多语言支持
本文是<快速创建网站>系列的第7篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- iOS-生成国际化包-配置App多语言支持
标签: ios国际化 ios多语言支持 xcode多语言支持 xcode生成多语言 国际化 it 分类: 功能知识 如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支 ...
随机推荐
- 八、结构模式之组合(Composite)模式
组合模式属于对象的结构模式,有时又叫做部分-整体模式,组合模式将对象组织到树结构中,可以用来描述整体与部分的联系.其可以使客户端将单纯元素和组合元素同等对待. 当需求中是体现部分与整体层次的结构时,以 ...
- Kali Linux更新和配置
1.用vim打开 /etc/apt/source.list root@kali:~# vim /etc/apt/sources.list #中科大 deb http://mirrors.ustc.ed ...
- 59. jdk1.5新特性之----增强for循环
/*jdk1.5新特性之----增强for循环:底层是一个迭代器 作用:简化迭代器书写格式 使用范围:实现了Iterable接口的对象或者数组对象 格式: for(变量类型 变量名 :遍历目标 ...
- 避免 Java 代码中的“坏味道”
1.需要 Map 的主键和取值时,应该迭代 entrySet() 当循环中只需要 Map 的主键时,迭代 keySet() 是正确的.但是,当需要主键和取值时,迭代 entrySet() 才是更高效的 ...
- NLP(一) Python常用开发工具
一.Numpy NumPy系统是Python的一种开源的数值计算包. 包括: 1.一个强大的N维数组对象Array: 2.比较成熟的(广播)函数 库: 3.用于整合C/C++和Fortran代码的工具 ...
- PHP ftp_pasv() 函数
定义和用法 ftp_pasv() 函数把被动模式设置为打开或关闭. 在被动模式中,数据连接是由客户机来初始化的,而不是服务器.这在客户机位于防火墙之后时比较有用. 语法 ftp_pasv(ftp_co ...
- $\mathcal{CSP-S}$,私は来ています
记事本 开个坑.背包dp我是真的一点也不会了... NOIP2014飞扬的小鸟 NOIP2018货币系统 11-4:$Countdown$ $to$ $the$ $tenth$ $day$ 上午 困的 ...
- DOM学习总结(六)DOM导航
什么是 HTML DOM 导航? DOM是一个以节点关系组成的结构,所以我们可以使用节点之间的关联找到整个HTML页面中的元素 1.HTML DOM 节点列表: getElementsByTagNam ...
- (转)ubuntu 下安装mysql5.5.30的过程以及遇到的问题
转:http://blog.chinaunix.net/uid-27103408-id-3280584.html 由于实验需要安装mysql,当然我们可以通过sudo apt-get install ...
- delphi基础篇之数据类型之三:3.结构类型(Struct)
3.结构类型(Struct) 结构类型在内存中存储一组相关的数据项,而不是像简单数据类型那样单一的数值.结构数据类型包括:集合类型.数组类型.记录类型.文件类型.类类型.类引用类型和接口类型等.