idynsys / localizator
Localizator的API客户端(SDK)
Requires
- php: ^7.4|^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7
- jms/serializer: ^3
- psr/cache: ^1.0|^2.0|^3.0
- symfony/cache: ^5.4|^6
Requires (Dev)
- ext-redis: *
- phpstan/phpstan: ^1.10
- phpunit/phpunit: 9.6.x-dev
- squizlabs/php_codesniffer: ^3.9
- symfony/var-dumper: 5.4.x-dev
This package is auto-updated.
Last update: 2024-09-16 07:35:38 UTC
README
描述
该包旨在将外部系统集成到PHP 7.4+和B2B backoffice服务Localizer中,以便获取在B2B backoffice服务Localizer中注册的元素的翻译数据。
使用该包可以
- 获取应用程序静态元素的翻译,按语言或所有已配置的语言立即获取,在"B2B Backoffice"中配置了您的应用程序。
- 设置缓存类型:按单独的键、按父元素、按语言。
- 使用自己的缓存系统或默认系统。
- 从B2B backoffice服务Localizer加载所有静态元素的翻译到缓存中。
- 从缓存中提取翻译。
- 清除缓存。
安装
- 在包含composer.json文件的您的项目目录中,执行以下命令
composer req idynsys/localizator
-
配置您的应用程序以执行对B2B Backoffice的请求。
执行请求需要在请求中传递有关应用程序标识符的信息,并使用用于签名参数的密钥。这可以通过两种方式完成。
2.1. 通过环境变量
在安装此包的应用程序环境变量中,需要创建以下环境变量LOCALIZER_SDK_CLIENT_ID=<clientId> LOCALIZER_SDK_APPLICATION_SECRET_KEY=<secret>
2.2. 通过创建Translator类的对象
use Idynsys\Localizator\TranslatorFactory; use Idynsys\Localizator\Translator; /** @var Translator $translator */ $translator = TranslatorFactory::create('<clientId>', '<secret>')->build();
其中"clientId"和"secret"将在将外部应用程序注册到B2B Backoffice后由您的公司提供,以便可以通过B2B执行请求。
3. !!! 对于生产版本,需要设置环境变量
LOCALIZER_SDK_MODE=PRODUCTION
如果该变量未设置或具有其他值,则所有请求都将重定向到测试服务器B2B Backoffice。
使用
创建Translator类的实例
<?php use Idynsys\Localizator\TranslatorFactory; use Idynsys\Localizator\Translator; // Если "clientId" и "secret" установлены через переменные окружения (см. п.2.1.) /** @var Translator $translator */ $translator = TranslatorFactory::create()->build(); ... // или через прямое указание через параметры (см. п.2.2.) /** @var Translator $translator */ $translator = TranslatorFactory::create('<clientId>', '<secret>')->build(); ...
从本地化器获取静态元素的翻译
// переводы для всех языков $allTranslations = $translator->getStaticItems(); // переводы для определенного языка приложения $rusTranslations = $translator->getStaticItems('rus');
将只加载已定义翻译的元素。如果某些语言没有翻译,则元素将不会包含在结果中。
加载的结果将是类Idynsys\Localizator\DTO\StaticTranslationDataCollection
的实例
可以通过以下方式从对象$allTranslations或$rusTranslations获取数据
- 以多维数组的形式提供原始数据,保留每个产品内部父级和子级记录的层次结构,每个语言一个
var_dump($allTranslations->getOriginalTranslations();
结果
array:1 [ "data" => array:2 [ 0 => array:3 [ "product_id" => 10 "product_name" => "Test product name" "translations" => array:3 [ "eng" => array:1 [ "Test form" => array:2 [ "Title1" => "Test form title1" "Title2" => "Test form title2" ] ] "rus" => array:1 [ "Test form" => array:2 [ "Title1" => "Название 1 тестовой формы" "Title2" => "Название 2 тестовой формы" ] ] ]
- 通过\Idynsys\Localizator\DTO\StaticTranslationData对象集合
2.1. 所有翻译
use Idynsys\Localizator\DTO\StaticTranslationData; /** @var StaticTranslationData $translation */ foreach ($allTranslations->translations() as $translation) { var_dump($translation->getTranslation()); }
2.2. 指定产品的所有翻译
use Idynsys\Localizator\DTO\StaticTranslationData; /** @var StaticTranslationData $translation */ foreach ($allTranslations->translations('Test product name') as $translation) { var_dump($translation->getTranslation()); }
2.2. 指定产品的所有英语翻译
use Idynsys\Localizator\DTO\StaticTranslationData; /** @var StaticTranslationData $translation */ foreach ($allTranslations->translations('Test product name', 'rus') as $translation) { var_dump($translation->getTranslation()); }
2.3. 所有英语翻译
use Idynsys\Localizator\DTO\StaticTranslationData; /** @var StaticTranslationData $translation */ foreach ($allTranslations->translations(null, 'rus') as $translation) { var_dump($translation->getTranslation()); }
将翻译加载到缓存中
- 加载所有语言的静态元素翻译
$translator->setStaticItemsToCache()
- 加载特定语言的静态元素翻译
$translator->setStaticItemsToCache('eng')
设置缓存类型
默认情况下,翻译将分别保存为每个从本地化器获取的元素。但如有需要,可以更改此设置,按组或按语言存储翻译。当您想要获取特定表单、模块或错误消息组的所有翻译时,这将很有用。
提供了3种类型
// (по умолчанию) Сохраняется каждый перевод отдельно в кэш под своими ключами $cacheStorageType = CacheStorageTypes::TRANSLATIONS_STORAGE_TYPE(); // Переводы сохраняются с группировкой по родительскому элементу $cacheStorageType = CacheStorageTypes::PARENTS_STORAGE_TYPE(); // Переводы сохраняются с группировкой по коду языка $cacheStorageType = CacheStorageTypes::LANGUAGE_STORAGE_TYPE();
要更改缓存键的生成方式,需要调用函数
$translator->changeStorageType($cacheStorageType);
您可以在处理翻译的过程中不受限制地切换类型,保存每个类型的翻译,然后在需要时按最优化水平访问它们。
从缓存中提取翻译
- 当缓存类型为
TRANSLATIONS_STORAGE_TYPE
时
/** @var \Idynsys\Localizator\DTO\StaticTranslationData $cashedData */ $cachedData = $translator->getStaticItemFromCache('Test product name', 'eng', 'Test form', 'Title'); echo $cachedData->getTranslation();
结果
"Test form title"
- 当缓存类型为
PARENTS_STORAGE_TYPE
时
/** @var \Idynsys\Localizator\DTO\StaticTranslationData $cashedData */ $cachedData = $translator->getStaticItem('Test product name', 'rus'); var_dump($cachedData->getTranslation());
结果
array:1 [ "Title" => "Test form title" ]
- 当缓存类型为
LANGUAGE_STORAGE_TYPE
时
/** @var \Idynsys\Localizator\DTO\StaticTranslationData $cashedData */ $cachedData = $translator->getStaticItem('eng'); var_dump($cachedData->getTranslation());
结果
array:1 [ "Test form" => array:1 [ "Title" => "Test form title" ] ]
清除缓存
$translator->cacheClear();
其他
//использовать собственную реализацию кешера Psr\Cache\CacheItemPoolInterface $translator = TranslatorFactory::create($applicationId, 'rus') ->setCache(new RedisAdapter(new \Redis())) ->build();
一些开发命令
docker-compose run --rm php-cli composer --version docker-compose run --rm php-cli composer install
代码风格
可用命令
- composer cs - 检查代码标准
- composer cs-diff - 检查当前GIT分支中的代码标准
- composer cs-fix - 自动修正代码以符合标准
- composer stan - 对整个库进行基本静态代码分析 (PHPStan)
- composer stan-diff - 分析当前GIT分支中更新的代码 (PHPStan)