2

在考虑了很多如何支持 i18n 之后,我想出了一个公认的解决方案来拥有一张单独的桌子。
可翻译的问题
我按照建议从学说扩展安装了可翻译,但没有按我的意愿工作,有经验的用户建议我不要使用它。即使有一个单独的表,它在主表和翻译表中都有可翻译的列,并以一种方式存储这些值。此外,如果默认语言环境更改(发生在我身上并可能再次发生),它会使事情变得复杂,因为主表中的默认值似乎没有指定的语言环境。另外我有几个可翻译字段(5~)。这将导致 5或者在回退的情况下甚至更多的左连接。

其他解决
方案 我认为的另一个解决方案是有一个单独的表,其中仅包含每个表的翻译,并可能通过 postLoad 事件侦听器设置默认语言环境和回退。这样我可以在没有 obj.translations['en' 的情况下调用 obj.getTitle() ].getTitle() ,无需提供语言环境。

问题
这种方法的问题是回退。一种解决方法是在加入期间添加“WITH locale in ('en','de') 例如。这将返回更多数据但回退会起作用。另一种方法是正在使用合并,但教义不可能将其映射到实体。有没有办法有效地实施后备?

4

1 回答 1

5

您可以查看https://github.com/KnpLabs/DoctrineBehaviors#translatable,这是我们深入研究后找到的最佳解决方案。

我们目前正在将它用于许多实体,并且效果很好。您可以查询翻译作为任何其他实体,连接,例如使用 DQL。

是的,你可以很容易地想象一个备用机制,使用现有的 api。

于 2012-05-03T14:07:17.683 回答