tableau-mkt/eggs-n-cereal

此包已被弃用且不再维护。未建议替代包。

一个基本的PHP XLIFF序列化库。

0.0.7 2016-06-23 17:50 UTC

This package is not auto-updated.

Last update: 2024-01-31 11:23:27 UTC


README

一个基本、通用的PHP XLIFF序列化库。

安装

当然,安装Eggs'n'Cereal推荐使用Composer

{
  "require": {
    "tableau-mkt/eggs-n-cereal": "@dev"
  }
}

注意:可能没有稳定的版本。所以...

使用方法

此库的基本思想是,为您的实体提供一系列“可翻译”的类。这些“可翻译”的类实现了EggsCereal\Interfaces\TranslatableInterface接口。

TranslatableInterface实例旨在通过统一的方法包装您的实体以获取和设置数据。您必须通过实现以下方法来完成此操作:

  • TranslatableInterface::getData()
  • TranslatableInterface::setData()

除了获取和设置数据外,您还必须提供一种获取您可翻译实体唯一标识符以及标签的方式,通过实现以下方法:

  • TranslatableInterface::getIdentifier()
  • TranslatableInterface::getLabel()

标识符和标签用于在导入/反序列化过程中验证XLIFF文件。

实现接口后,您可以按如下方式序列化和反序列化您的可翻译对象:

// Generated by composer.
require_once('vendor/autoload.php');

// Instantiate your translatable here.
$yourTranslatable = new YourTranslatable(/*...*/);

// Instantiate the serializer:
$xliffSerializer = new EggsCereal\Serializer();
$targetLanguage = 'pt-br';

// Serialize your translatable like so:
$xlf = $xliffSerializer->serialize($yourTranslatable, $targetLanguage);

// Unserialize an xliff file like so:
$translatedFile = file_get_contents('/path/to/translated-pt-br.xlf');
$xliffSerializer->unserialize($yourTranslatable, $targetLanguage, $translatedFile);

示例实现

假设您想要翻译存储在扁平、单级PHP数组中的数据。您可以编写一个ArrayTranslatable类如下:

use EggsCereal\Interfaces\TranslatableInterface;

class ArrayTranslatable implements TranslatableInterface {

  public $data = array();

  public function __construct(array $data) {
    $this->data = $data;
  }

  /**
   * {@inheritdoc}
   */
  public function getData() {
    $response = array();

    // Iterate through each item in the array.
    foreach ($data as $key => $value) {
      // For each item, set a #label and #text value.
      $response[$key] = array(
        '#label' => $key,
        '#text' => $value,
      );
    }

    return $response;
  }

  /**
   * {@inheritdoc}
   */
  public function setData(array $data, $targetLanguage) {
    foreach ($data as $key => $value) {
      $this->data[$key] = $value['#text'],
    }
  }

  // Note, you'll also need implementations for getIdentifier() and getLabel().
}

使用此ArrayTranslatable实现,使用方法简单。

$xliffSerializer = new EggsCereal\Serializer();
$targetLang = 'fr-fr';

$arrayTranslatable = new ArrayTranslatable(array(
  'foo' => 'Translatable foo value',
  'bar' => 'Translatable bar value',
));

// Generate an XLIFF file from your translatable.
$xlf = $xliffSerializer->serialize($arrayTranslatable, $targetLang);

// Import a translated XLIFF file.
$translatedFile = file_get_contents('/path/to/translated-array-fr-fr.xlf');
$xliffSerializer->unserialize($translatable, $targetLang, $translatedFile);

// Now, your array will be translated and might be available like so:
print_r($arrayTranslatable->data);
array(
  'foo' => 'Valeur de foo traduisible',
  'bar' => 'Valeur de bar traduisible',
);

警告

此库仍在开发中,并大量借鉴了Cloudwords在他们的Cloudwords for Multilingual Drupal模块上的工作。

目前请自行承担风险使用。