学说2 - i18n的最佳实践?

Dan*_*Dan 7 php orm doctrine internationalization doctrine-orm

我正在寻找一些关于如何处理需要将字段翻译成n种语言的表的建议.我已经读过最好的方法,它有一个基表,它包含所有非语言特定的字段,一个表包含所有带翻译的字段.

例:


 PRODUCT             PRODUCT_TRANSLATIONS
+--------------+    +----------------------+
| id           |    | id                   |
+--------------+    +----------------------+
| category_id  |    | product_id           |
+--------------+    +----------------------+
| price        |    | language_id          |
+--------------+    +----------------------+
                    | name                 |
                    +----------------------+
                    | description          |
                    +----------------------+

因此,我们将拥有包含所有元数据的基表PRODUCT和包含所有需要翻译成多种语言的数据的PRODUCT_TRANSLATIONS表.PRODUCT表与PRODUCT_TRANSLATIONS表具有OneToMany关系.

什么是处理这种情况的学说方式?如果我查询Products表,我会将所有翻译加入此表.但大多数时候我只想为给定的产品ID进行一次翻译.我可以使用存储库类来编写我自己的getter方法,将结果集限制为只有一种语言,但是我会有很多表都需要翻译.我敢打赌,这个问题有一个更通用的解决方案.另一个问题是,如果我查询与另一个对象相关的一个对象,我将获得该第二个对象的所有翻译.

顺便说一句:我知道Gediminas的可翻译行为扩展,但我不喜欢所有翻译都存储在一个表中的事实.

所以我在寻找国际化方面的最佳实践.任何关于这个主题的想法都非常感谢.

Pro*_*tic 0

您提到的可翻译行为扩展确实允许每类翻译实体。查看可翻译文档的高级示例部分下的“翻译实体”子标题。

其缺点是:使用@Gedmo\TranslationEntity注释来指定用于存储翻译的特定实体。这样,您可以将负载拆分到多个表中。

  • 在“翻译实体”下的高级示例中,我可以看到使用了这些字段:{“locale”,“objectClass”,“foreign_key”,“field”}。我假设使用它会导致每个翻译字段都有一条记录。因此,一份翻译产品将导致翻译表中出现多条记录。对于一条翻译记录,翻译表中是否可以只有一条记录(包含所有翻译字段)? (2认同)