在考虑了很多如何支持 i18n 之后,我想出了一个公认的解决方案来拥有一张单独的桌子。
可翻译的问题
我按照建议从学说扩展安装了可翻译,但没有按我的意愿工作,有经验的用户建议我不要使用它。即使有一个单独的表,它在主表和翻译表中都有可翻译的列,并以一种方式存储这些值。此外,如果默认语言环境更改(发生在我身上并可能再次发生),它会使事情变得复杂,因为主表中的默认值似乎没有指定的语言环境。另外我有几个可翻译字段(5~)。这将导致 5或者在回退的情况下甚至更多的左连接。
其他解决
方案 我认为的另一个解决方案是有一个单独的表,其中仅包含每个表的翻译,并可能通过 postLoad 事件侦听器设置默认语言环境和回退。这样我可以在没有 obj.translations['en' 的情况下调用 obj.getTitle() ].getTitle() ,无需提供语言环境。
问题
这种方法的问题是回退。一种解决方法是在加入期间添加“WITH locale in ('en','de') 例如。这将返回更多数据但回退会起作用。另一种方法是正在使用合并,但教义不可能将其映射到实体。有没有办法有效地实施后备?