bayfrontmedia/translation

一个PHP翻译库,利用多种语言存储选项。

v2.0.0 2023-01-26 16:53 UTC

This package is auto-updated.

Last update: 2024-08-26 20:10:51 UTC


README

一个PHP翻译库,利用多种语言存储选项。

许可证

此项目为开源,可在MIT许可证下获取。

作者

Bayfront Media

要求

  • 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))

此表结构确保只有一个行与匹配的 localeid。应将包含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**');