carlosv2/translatte

基于模式匹配的数据翻译库

1.0.0 2017-02-16 15:44 UTC

This package is not auto-updated.

Last update: 2024-09-14 20:20:12 UTC


README

此包旨在为数据提供一个解释层。

License Build Status SensioLabsInsight

使用方法

使用它的时机和用途没有限制。唯一的要求是你的类实现了 carlosV2\Translatte\TranslationInterface

例如,你可以进行语言翻译

class HelloWorldTranslation implements TranslationInterface
{
    public function matches($message)
    {
        return $message === 'Hello World';
    }
    
    public function translate($message)
    {
        return 'Hola Mundo';
    }
}

或将文件路径翻译为其内容

class FileTranslation implements TranslationInterface
{
    public function matches($message)
    {
        return file_exists($message);
    }
    
    public function translate($message)
    {
        return file_get_contents($message);
    }
}

如果你要执行这些翻译,你需要实例化一个翻译器并向它提供翻译

$translator = new Translator();

$translator->addTranslation(new HelloWorldTranslation());
$translator->addTranslation(new FileTranslation());

echo $translator->translate('Hello World'); // Hola Mundo
echo $translator->translate('/etc/passwd'); // The contents of your file

SQL到RAW

库中包含一段代码,可以帮助翻译SQL。请注意,它非常简单,它不理解SQL,而是通过模式匹配来工作。

为了实现这些翻译,你需要扩展 carlosV2\Translatte\SqlToRaw\SqlToRawTranslation。尽管这个类只强制实现 getSqlPattern 方法,但你还需要实现 process 方法。

例如,假设我们有一些按某个值索引的数据,并且出于某种原因,我们有一个查找这些数据的SQL。使用这个包,我们可以捕获SQL中请求的值并使用它来选择正确的数据。看看下面

class LoadRowSql extends SqlToRawTranslation
{
    private $data;

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

    protected function getSqlPattern()
    {
        return 'SELECT {*} FROM my_table WHERE field = {field}';
    }
    
    protected function process($field)
    {
        return $this->data[$field];
    }
}

匹配将根据以下规则进行

  • 任何字符都将匹配自身
  • 占位符将匹配任意数量的字符

占位符由 { + 一些名称 + } 组成,并且有两种不同的占位符

  • 丢弃占位符:它包含一个星号,它告诉库我们不在乎那里的内容。
  • 命名占位符:它包含一个有效的参数名称,它告诉库提取那里的内容并将其作为值在 process 方法中提供相同的参数名称。

安装

打开命令行,进入你的项目目录并执行以下命令以下载此项目的最新稳定版本

$ composer require carlosv2/translatte

此命令要求你全局安装了Composer,如Composer文档中的安装章节中所述。