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
实体 - title
和 content
。这意味着我们应该具有以下 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。
希望这可以为您澄清一些事情。如果您对此有更多疑问,请告诉我。
在 Gedmo Doctrine Extensions 的可翻译行为中,它有关于“Personal Translations”的说明。有人可以澄清什么是个人翻译吗?
tl;博士
当您想要处理翻译实体(您自己拥有 table)而不是默认行为时,使用个人翻译,通过对所有翻译使用单个 table。
通过使用默认行为,您会得到一个名为 ext_translations
的 table,它包含您所有的翻译数据。我会根据 DoctrineExtensions
.
假设我们创建了一个具有 2 个 translatable 字段的 Article
实体 - title
和 content
。这意味着我们应该具有以下 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。
希望这可以为您澄清一些事情。如果您对此有更多疑问,请告诉我。