Neos / Flow 领域模型的本地化
Localization of Domain Models in Neos / Flow
我目前正在使用 Neos / Flow 开发的一个网站包括一个作为 Flow 插件实现的自主开发的商店系统。产品、变体和优惠券作为域模型保存。
由于客户希望以不同的语言提供他们的网站,我需要找到一种方法来管理域对象的翻译。
我找不到融入 Neos/Flow 的方法,所以我的第一个想法是简单地在可翻译字段(描述和类似的东西)中插入翻译标识符,然后在视图中使用翻译 viewhelper。如果客户不想自己编辑这些字段,这将完全正常。
我的下一个想法是为每个语言维度和每个可翻译字段实现一个额外的字段(如 description_en;description_es,...)。但就可维护性和可变性而言,这将是最糟糕的方法。
我通常从事 TYPO3 项目,在这些项目中,领域对象的翻译非常简单,而且开箱即用。所以这次在Neos内部的体验是非常令人沮丧的。
有没有人遇到过类似的问题,甚至找到了解决方案?
到目前为止,每当我们需要拥有多语言内容时,我们都会通过将数据存储在 Neos 内容存储库中来解决这个问题。通过这种方式,语言处理 aka 维度可以开箱即用。此外,通过使用内联编辑或内容模块的检查器,为该记录构建 UI 非常容易。
请注意,将数据存储在 CR 中并不一定意味着您必须将其存储在 /site 根节点下。您还可以添加一个新的根节点 /products
来存储您的产品。
您可以查看 https://github.com/neos/metadata-contentrepositoryadapter 元数据存储在其自己的根目录下的位置。
希望对您有所帮助,
干杯,丹尼尔
郑重声明,在纯流程中使用 Doctrine Translateable 扩展也可以实现类似的功能:
https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md
请参阅http://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/PartIII/Persistence.html#on-the-doctrine-event-system了解如何在 Flow 中激活扩展。
但是,更简洁的方法确实是将域模型和内容实际分开(除非您构建 CMS 并且内容是您的域;)
我目前正在使用 Neos / Flow 开发的一个网站包括一个作为 Flow 插件实现的自主开发的商店系统。产品、变体和优惠券作为域模型保存。 由于客户希望以不同的语言提供他们的网站,我需要找到一种方法来管理域对象的翻译。 我找不到融入 Neos/Flow 的方法,所以我的第一个想法是简单地在可翻译字段(描述和类似的东西)中插入翻译标识符,然后在视图中使用翻译 viewhelper。如果客户不想自己编辑这些字段,这将完全正常。
我的下一个想法是为每个语言维度和每个可翻译字段实现一个额外的字段(如 description_en;description_es,...)。但就可维护性和可变性而言,这将是最糟糕的方法。 我通常从事 TYPO3 项目,在这些项目中,领域对象的翻译非常简单,而且开箱即用。所以这次在Neos内部的体验是非常令人沮丧的。
有没有人遇到过类似的问题,甚至找到了解决方案?
到目前为止,每当我们需要拥有多语言内容时,我们都会通过将数据存储在 Neos 内容存储库中来解决这个问题。通过这种方式,语言处理 aka 维度可以开箱即用。此外,通过使用内联编辑或内容模块的检查器,为该记录构建 UI 非常容易。
请注意,将数据存储在 CR 中并不一定意味着您必须将其存储在 /site 根节点下。您还可以添加一个新的根节点 /products
来存储您的产品。
您可以查看 https://github.com/neos/metadata-contentrepositoryadapter 元数据存储在其自己的根目录下的位置。
希望对您有所帮助, 干杯,丹尼尔
郑重声明,在纯流程中使用 Doctrine Translateable 扩展也可以实现类似的功能:
https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md
请参阅http://flowframework.readthedocs.io/en/stable/TheDefinitiveGuide/PartIII/Persistence.html#on-the-doctrine-event-system了解如何在 Flow 中激活扩展。
但是,更简洁的方法确实是将域模型和内容实际分开(除非您构建 CMS 并且内容是您的域;)