carlosv2 / translatte
基于模式匹配的数据翻译库
1.0.0
2017-02-16 15:44 UTC
Requires
- php: >=5.3,<7.2
Requires (Dev)
- phpunit/phpunit: ^4.8
This package is not auto-updated.
Last update: 2024-09-14 20:20:12 UTC
README
此包旨在为数据提供一个解释层。
使用方法
使用它的时机和用途没有限制。唯一的要求是你的类实现了 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文档中的安装章节中所述。