国际化
如果系统有不同语言文案的支持,此时就需要使用国际化,统一管理不同语言的文案翻译
国际化配置
国际化配置主要是配置,国际化翻译文件路径和默认语言信息。Swoft 提供两种方式配置,properties 和 env,env 配置会覆盖 properties
可用配置:
languageDir
路径支持别名,框架底层会自动解析相应路径defaultCategory
配置默认分类,默认是default
defaultLanguage
配置默认语言,默认是en
properties
配置文件,app/config/properties/app.php
return [
// ......
'translator' =>[
'languageDir' => '@root/resources/languages/',
'defaultCategory' => 'default',
'defaultLanguage' => 'en',
],
// ......
];
env
环境变量配置,.env
文件
TRANSLATOR_LANG_DIR=@root/resources/languages/
TRANSLATOR_DEFAULT_CATEGORY=default
TRANSLATOR_DEFAULT_LANG=en
- 同样 env 路径配置也支持别名
翻译文件格式
不同语言文件,是放在不同的语言文件夹下面。
[root@0dd3950e175b languages]## tree
.
|-- en
| |-- default.php
| `-- msg.php
`-- zh
|-- default.php
`-- msg.php
翻译文件组成
- 语言,指的是文件夹名称,比如en/zh
- 分类,指的是不同语言文件夹下的文件,多个文件就是多个分类(msg/default)。
- Key,翻译文件内存是按照key/value形式定义
- default.php是默认分类
文件内容格式
return [
'body' => '这是一条消息 [%s] %d',
];
- value 替换规则是按照
sprintf()
函数格式替换
使用实例
$data[] = translate('title', [], 'zh');
$data[] = translate('title', [], 'en');
$data[] = translate('msg.body', ['Swoft', 1], 'zh');
$data[] = translate('msg.body', ['Swoft', 2], 'en');
- 第一个参数,若有”.“符号,先匹配分类,再匹配key,否则,直接匹配默认分类和key
- 第二个参数,按顺序传入需要替换参数
- 第三个参数,指定翻译语言,如果不指定,会使用默认配置的语言。