tableau-mkt / eggs-n-cereal
此包已被弃用且不再维护。未建议替代包。
一个基本的PHP XLIFF序列化库。
0.0.7
2016-06-23 17:50 UTC
Requires
- psr/log: ~1.0
Requires (Dev)
- phpunit/phpunit: ~4.4
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模块上的工作。
目前请自行承担风险使用。