ThinkPHP框架中可以通过使用内置的Lang类来进行多语言切换和国际化处理。
在ThinkPHP框架中,有两种方式实现国际化:
将不同语言对应的短语(如按钮文字、页面提示等)写入不同的语言文件,再使用Lang类中的get方法来读取对应语言文件中的内容。
例如,在应用目录下新建lang目录,并在该目录下创建zh-cn.php和en-us.php两个语言文件,分别存放中文和英文的短语,如下所示:
// zh-cn.php
return [
'welcome' => '欢迎',
'hello' => '你好',
];
// en-us.php
return [
'welcome' => 'Welcome',
'hello' => 'Hello',
];
然后在控制器或模板中,使用Lang类的get方法即可读取对应语言文件中的内容:
// 控制器中使用
echo Lang::get('welcome'); // 输出“欢迎”或“Welcome”,根据当前语言环境而定
// 模板中使用
{$Think.lang.welcome} // 输出“欢迎”或“Welcome”,根据当前语言环境而定
将不同语言对应的翻译内容存储到数据库中,再使用Lang类中的db方法来读取对应语言环境下的翻译内容。
例如,在数据库中创建一张表,存储不同语言环境下的短语和对应的翻译内容:
-- 创建翻译表
CREATE TABLE `lang` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '短语名称',
`zh_cn` varchar(255) DEFAULT NULL COMMENT '中文翻译',
`en_us` varchar(255) DEFAULT NULL COMMENT '英文翻译',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='多语言翻译表';
-- 往翻译表插入数据
INSERT INTO `lang` (`id`, `name`, `zh_cn`, `en_us`)
VALUES
(1, 'welcome', '欢迎', 'Welcome'),
(2, 'hello', '你好', 'Hello');
然后在控制器或模板中,使用Lang类的db方法即可读取对应语言环境下的翻译内容:
// 控制器中使用
echo Lang::db('lang')->where(['name' => 'welcome'])->value('zh_cn'); // 输出“欢迎”或“Welcome”,根据当前语言环境而定
// 模板中使用
{$Think.lang.db(lang).where(name='welcome').value('zh_cn')} // 输出“欢迎”或“Welcome”,根据当前语言环境而定
需要注意的是,在使用Lang类进行多语言切换和国际化处理时,应该先设置当前的语言环境,可以通过配置文件或用户选项来动态设置。比如:
// 在config.php中设置默认语言为中文
'lang_switch_on' => true,
'default_lang' => 'zh-cn',
// 用户可以在前台界面进行手动选择语言,然后在控制器中进行设置
public function setLang($lang = 'zh-cn')
{
cookie('think_var', $lang);
}