bayfrontmedia / translation
一个PHP翻译库,利用多种语言存储选项。
Requires
- php: ^8.0
- ext-json: *
- ext-pdo: *
- bayfrontmedia/php-array-helpers: ^2.0
README
一个PHP翻译库,利用多种语言存储选项。
许可证
此项目为开源,可在MIT许可证下获取。
作者
要求
- PHP
^8.0
- JSON PHP扩展
- PDO PHP扩展
安装
composer require bayfrontmedia/translation
使用
注意:无论数据存储在哪里,填充翻译数据由您决定。此库仅从其源读取现有数据。
存储适配器
必须将 Bayfront\Translation\ApadpterInterface
传递给 Bayfront\Translation\Translate
构造函数。有各种存储适配器可供选择,每个适配器都有其自己的配置要求。
定义数组
定义数组适配器允许您使用包含所有翻译的预定义数组。
use Bayfront\Translation\Adapters\DefinedArray;
$adapter = new DefinedArray([
'en' => [ // Locale
'dashboard' => [ // ID
'title' => 'Account dashboard',
'greeting' => 'Welcome back, {{name}}'
]
]
]);
本地
本地适配器允许您使用包含所有翻译数组的本地原生PHP文件。
use Bayfront\Translation\Adapters\Local;
$adapter = new Local('/root_path');
从根路径开始的文件结构应为
/root_path
/locale
/id.php
例如,如果地区设置为 en
,则方法 say('dashboard.greeting')
将搜索文件 /root_path/en/dashboard.php
,以及数组键 greeting
。
示例 dashboard.php
<?php
return [
'title' => 'Account dashboard',
'greeting' => 'Welcome back, {{name}}'
];
PDO
PDO适配器允许您使用 \PDO
实例从数据库中检索语言,并在其构造函数中可能抛出 Bayfront\Translation\AdapterException
异常。
要创建兼容的表,执行以下语句
CREATE TABLE IF NOT EXISTS table_name (
`locale` varchar(80) NOT NULL,
`id` varchar(255) NOT NULL,
`contents` longtext NOT NULL,
UNIQUE KEY unique_index(locale,id))
此表结构确保只有一个行与匹配的 locale
和 id
。应将包含JSON编码数组的 contents
列。
PDO适配器将创建/使用名为 "translations" 的表,除非在构造函数中指定了其他名称。
use Bayfront\Translation\Adapters\PDO;
try {
$adapter = new PDO($dbh, 'table_name');
} catch (AdapterException $e) {
die($e->getMessage());
}
开始使用Translation
创建适配器后,它可以与Translation一起使用。此外,应将定义地区的字符串传递给构造函数。
最后一个参数默认为 true
。当为 true
时,如果找不到翻译且 $default = NULL
,则返回原始字符串。如果为 false
,则抛出 Bayfront\Translation\TranslationException
。
use Bayfront\Translation\Translate;
$translate = new Translate($adapter, 'en', true);
公共方法
getLocale
描述
获取地区。
参数
- 无
返回
- (字符串)
示例
echo $translate->getLocale();
setLocale
描述
设置地区。
参数
$locale
(字符串)
返回
- (self)
示例
$translate->setLocale('es');
getTranslations
描述
返回所有已知翻译的数组。
翻译只有在它们的ID已被使用,或者通过 addTranslations 方法添加后才会被认为是“已知的”。
参数
- 无
返回
- (数组)
示例
$translations = $translate->getTranslations();
addTranslations
描述
仅向当前请求的已知翻译中添加翻译。
参数
$translations
(数组)
返回
- (self)
示例
$translate->addTranslations([
'en' => [ // Locale
'dashboard' => [ // ID
'title' => 'New account dashboard'
]
],
'es' => [
'dashboard' => [
'greeting' => 'Bienvenidos, {{name}}'
]
]
]);
get
描述
返回给定字符串的翻译。
字符串格式为: id.key
。键使用数组点表示法,因此可以按需要深度嵌套。
替换变量应使用 {{ }}
包围在原始字符串中。
如果找不到翻译且 $default = NULL
,则根据构造函数中选择的设置,返回原始字符串或抛出 TranslationException
。
参数
$string
(字符串)$replacements = []
(数组)$default = NULL
(混合类型): 如果未找到翻译,则返回的默认值
返回
- (混合类型)
抛出异常
Bayfront\Translation\TranslationException
示例
$title = $translate->get('dashboard.title');
// Example with replacements
$greeting = $translate->get('dashboard.greeting', [
'name' => 'John'
]);
say
描述
输出给定字符串的翻译。
参数
$string
(字符串)$replacements = []
(数组)$default = NULL
(混合类型): 如果未找到翻译,则返回的默认值
返回
- (void)
抛出异常
Bayfront\Translation\TranslationException
示例
$translate->say('dashboard.title');
replace
描述
替换字符串中的大小写敏感值。
参数
$string
(字符串): 原始字符串$replacements = []
(数组): 包含值和替换的数组
返回
- (字符串)
示例
$title = $translate->get('dashboard.title');
echo $translate->replace($title, [
'dashboard' => 'homepage'
]);
replaceAll
描述
将字符串中的多个大小写敏感值替换为单个替换。
参数
$string
(字符串): 原始字符串$values
(数组): 要替换的值数组$replacement
(字符串)
返回
- (字符串)
示例
echo $translate->replaceAll($user_comment, [
'array',
'of',
'bad',
'words'
], '**CENSORED**');