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**');