下面以一个中英双语的例子来看项目多语言支持的具体实现。
在 项目目录/Lang/zh-cn/ 下创建 common.php 文件,并在内设定简体中文语言定义:
<?php return array( 'welcome'=>'欢迎使用 ThinkPHP !', 'message'=>'这是一条测试消息!', ); ?>
在 项目目录/Lang/en-us/ 下创建 common.php 文件,并在内设定美国英语语言定义:
<?php return array( 'welcome'=>'Welcome to ThinkPHP!', 'message'=>'This is a test message!', ); ?>
在操作中(如 Index 模块 lang 操作)中:
public function lang(){ $this->assign('message', L('message')); $this->display(); }
对应的模板(Tpl/default/Index/lang.html):
<p>{$Think.lang.welcome}</p> <p>{$message}</p> <p>切换到:<a href="?l=zh-cn">简体中文</a> | <a href="?l=en-us">English</a></p>
当我们访问该操作时,系统会根据当前浏览器语言来自动获取对应的语言包内容。上面的例子中,直接在模板中显示的内容使用 {$Think.lang.welcome} 来输出,而在操作中获取语言包内容时,需要使用 L 快捷方法。当点击 English 链接时,由于 URL 中传入了 l=en-us 参数,系统会获取对应的英语语言包,从而显示:
Welcome to ThinkPHP! This is a test message!
L 快捷方法用于获取和设置语言定义,语法如下:
L(name, value)
如果 name 和 value 参数都存在时,表示设定语言变量名 name=value;当 value 省略时,表示获取 name 语言变量对应的值,若 name 未定义时,将 name 以大写返回。