idynsys/localizator

Localizator的API客户端(SDK)

3.1.0 2024-05-16 06:41 UTC

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加载所有静态元素的翻译到缓存中。
  • 从缓存中提取翻译。
  • 清除缓存。

安装

  1. 在包含composer.json文件的您的项目目录中,执行以下命令
composer req idynsys/localizator
  1. 配置您的应用程序以执行对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获取数据

  1. 以多维数组的形式提供原始数据,保留每个产品内部父级和子级记录的层次结构,每个语言一个
    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 тестовой формы"
        ]
      ]
    ]
  1. 通过\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());
}

将翻译加载到缓存中

  1. 加载所有语言的静态元素翻译
    $translator->setStaticItemsToCache()
  1. 加载特定语言的静态元素翻译
    $translator->setStaticItemsToCache('eng')

设置缓存类型

默认情况下,翻译将分别保存为每个从本地化器获取的元素。但如有需要,可以更改此设置,按组或按语言存储翻译。当您想要获取特定表单、模块或错误消息组的所有翻译时,这将很有用。

提供了3种类型

    // (по умолчанию) Сохраняется каждый перевод отдельно в кэш под своими ключами
    $cacheStorageType = CacheStorageTypes::TRANSLATIONS_STORAGE_TYPE();
    
    // Переводы сохраняются с группировкой по родительскому элементу
    $cacheStorageType = CacheStorageTypes::PARENTS_STORAGE_TYPE();
    
    // Переводы сохраняются с группировкой по коду языка
    $cacheStorageType = CacheStorageTypes::LANGUAGE_STORAGE_TYPE();

要更改缓存键的生成方式,需要调用函数

    $translator->changeStorageType($cacheStorageType);

您可以在处理翻译的过程中不受限制地切换类型,保存每个类型的翻译,然后在需要时按最优化水平访问它们。

从缓存中提取翻译

  1. 当缓存类型为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" 
  1. 当缓存类型为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"
    ]
  1. 当缓存类型为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)