Gedmo Doctrine Extensions 中的个人翻译是什么?

What are Personal Translations in Gedmo Doctrine Extensions?

在 Gedmo Doctrine Extensions 的可翻译行为中,它有关于“Personal Translations”的说明。有人可以澄清什么是个人翻译吗?

tl;博士

当您想要处理翻译实体(您自己拥有 table)而不是默认行为时,使用个人翻译,通过对所有翻译使用单个 table。


通过使用默认行为,您会得到一个名为 ext_translations 的 table,它包含您所有的翻译数据。我会根据 DoctrineExtensions.

的文档给你举个例子

假设我们创建了一个具有 2 个 translatable 字段的 Article 实体 - titlecontent。这意味着我们应该具有以下 articles 的 table 结构:

+----+-------+---------+
| id | title | content |
+----+-------+---------+

现在,默认情况下,每次您创建新实体时,TranslatableListener 都会设置 en_us 语言环境,因此只会填充 articles table:

$article = new Article();
$article->setTitle('Title english');
$article->setContent('Content english');

会导致以下结果:

+----+---------------+-----------------+
| id |     title     |     content     |
+----+---------------+-----------------+
|  1 | Title english | Content english |
+----+---------------+-----------------+

到目前为止,只有 articles 可以更新新记录,但是当您想要翻译那些具有不同区域设置的字段时,我们常用的 table ext_translations 也会更新.

table的结构如下:

+----+--------+---------------+---------+-------------+------------+
| id | locale | object_class  |  field  | foreign_key |  content   |
+----+--------+---------------+---------+-------------+------------+

那么,当我们用一些新的翻译更新我们的记录时会发生什么:

$article->setTitle('My title');
$article->setContent('My content');
$article->setTranslatableLocale('de_de');

当我们持久化更新的实体时,我们在 ext_translations 中得到以下结构:

+----+--------+---------------+---------+-------------+------------+
| id | locale | object_class  |  field  | foreign_key |  content   |
+----+--------+---------------+---------+-------------+------------+
|  1 | de_de  | Bundle\Entity | title   |           1 | My title   |
|  2 | de_de  | Bundle\Entity | content |           1 | My content |
+----+--------+---------------+---------+-------------+------------+

现在您知道默认行为是如何工作的了。它将您的所有翻译(不仅针对单个实体,所有翻译)存储在单个 table.

但是,当您使用个人翻译时,您可以将您的(为了我们的示例假设)Article 翻译存储为自己的翻译,单独 table、article_translations .

如果您熟悉 KnpLabs 提供的 DoctrineExtensions,那么您已经了解了 PersonalTranslations 的含义。 Link 有关此主题的文档,请参见 here

希望这可以为您澄清一些事情。如果您对此有更多疑问,请告诉我。