{:__('ok')}是怎么匹配到语言包里对应的中文和英文的
在 ThinkPHP 框架里,{:__('ok')} 这种表达式能够匹配到语言包里对应的中文和英文,主要涉及到下面几个步骤:
1. 语言包文件的组织
ThinkPHP 默认会把语言包文件存放在 resources/lang 目录下,针对不同的语言,会创建对应的子目录,像 en(英文)、zh-cn(简体中文)。在每个子目录中,会有多个 PHP 文件,这些文件以数组形式定义了不同的语言项。例如:- 英文语言包(resources/lang/en/common.php)
<?php
return [
'ok' => 'OK',
// 其他语言项...
];
- 中文语言包(resources/lang/zh-cn/common.php)
<?php
return [
'ok' => '好的',
// 其他语言项...
];
2. 语言环境的设置
在应用里,需要设置当前的语言环境。可以通过多种方式来设置,常见的方式如下:
- 配置文件:在 app.php 配置文件中设置默认语言。
// application/extra/app.php
return [
// 默认语言
'default_lang' => 'zh-cn',
];
- 动态设置:在控制器或者中间件里动态设置语言环境。
use think\facade\Lang;
// 设置为英文环境
Lang::setLangSet('en');
3. 模板引擎解析与翻译
当模板引擎解析到 {:__('ok')}
表达式时,会按照以下步骤进行处理:
- 调用翻译函数:
__()
是 ThinkPHP 框架提供的翻译函数,它会接收 'ok' 作为参数。 - 查找语言包:依据当前设置的语言环境,到对应的语言包目录中查找定义了语言项的 PHP 文件。例如,当前语言环境是 zh-cn,就会到
resources/lang/zh-cn
目录中查找。 - 匹配语言项:在找到的语言包文件里,查找键为 'ok' 的语言项。如果找到了,就返回对应的值;要是没找到,就返回原始的字符串 'ok'。
- 输出结果
模板引擎会把__('ok')
函数返回的结果输出到页面上。例如,当前语言环境是 zh-cn,就会输出 “好的”;若当前语言环境是 en,则会输出 “OK”。
综上所述,{:__('ok')}
表达式借助设置语言环境、查找语言包文件以及匹配语言项等步骤,实现了不同语言之间的翻译和输出。