在考虑了很多如何支持i18n之后,我提出了一个可以接受的解决方案来制作一张单独的表格。
可翻译的问题
我按照建议从教条扩展中安装了Translatable,但没有按照我想要的方式工作,有经验的用户建议我不要使用它。即使有一个单独的表,它在主表和转换表中都有可翻译的列,并以eav方式存储值。此外,如果默认语言环境发生了变化(发生在我身上并且可能再次发生),它会让事情变得复杂,因为主表上的默认值似乎没有指定的语言环境。我也有几个可翻译的字段(5~)。这将导致5或者甚至更多的左连接以防止后退。
其他解决方案
我认为另一个解决方案是有一个单独的表,只有每个表的翻译,并设置默认的语言环境和回退可能通过postLoad事件监听器。这样我可以调用obj.getTitle()没有obj.translations ['en']。 getTitle(),不需要提供语言环境。
问题
这种方法的问题是回退。一个解决方法是在连接期间添加一个“WITH locale in('en','de')例如。这将返回更多的数据,但后退将起作用。另一种方式是使用合并但是学说不可能将它映射到实体。有没有办法有效地实现回退?
答案 0 :(得分:5)
您可以查看https://github.com/KnpLabs/DoctrineBehaviors#translatable,这是我们在深入挖掘后找到的最佳解决方案。
我们目前正在将它用于许多实体,并且效果非常好。 您可以使用DQL查询翻译为任何其他权利,加入。
是的,您可以轻松地想象使用现有api的后备机制。