发新话题
打印

ThinkPHP夜话之5:多语言支持

ThinkPHP夜话之5:多语言支持

ThinkPHP的多语言支持已经相当完善了,可以满足应用的多语言需求。这里是指的是模板多语言支持,数据的多语言转换(翻译)不在这个范畴之内。ThinkPHP具备语言包定义、自动识别、动态定义语言参数的功能。并且可以自动识别用户浏览器的语言,从而选择相应的语言包(如果有定义)。

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


语言包文件位于项目的Lang目录下面,系统会自动加载。

语言文件定义
ThinkPHP语言文件定义包含下面三种方式:
  • //PHP常量定义 为了保持兼容保留了
  • define('LAN_DEFINE','欢迎使用ThinkPHP');
  • // PHP数组定义 注意一定要用 $_lang
  • $_lang['lan_define'] = '欢迎使用ThinkPHP';
  • // PHP数组返回定义
  • return array('lan_define'=>'欢迎使用ThinkPHP');



要在程序里面设置语言定义的值,使用下面的方式:
  • $language = Language : : getInstance();
  • $language->set('define2','语言定义');
  • // 获取语言定义
  • $value = $language->get('define2');
  • 为了更加方便获取语言定义的值,系统公共函数定义了快捷方法L,例如
  • $value = L("define2");
  • //和下面的方法等效
  • $language = Language : : getInstance();
  • $value = $language->get('define2');
  • // 设置语言变量的快捷方法
  • L('define2','语言定义2');



模板引擎的标签使用下面的方式来输出语言定义的值:
  • {$Think.lang.lang_define}


上面的语言包是指项目的语言包,如果在提示信息的时候使用了框架底层的提示,那么还需要定义系统的语言包,系统语言包目录位于ThinkPHP目录下面的Lang目录。

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

TOP

发新话题