我们有一个基于Symfony-CMF构建的应用程序运行良好。我们现在需要为内容添加区域设置和翻译。我们已经设置了一个页面(/联系人),其中包含各种特定于语言环境的路由(例如/ en / contact和/ fr / contact),我们可以访问这些URL并独立编辑每种语言的内容。但是,我们无法查看现有内容,因此当我们点击/ en / contact时,所有可编辑内容区域都是空白的。
通过重建我们的应用程序并使用相关的多语言配置加载内容(通过灯具),我们能够看到原始内容,但是当我们编辑它时,它似乎为每种语言编辑它。因此,当我们转到/ en / contact并在那里编辑内容时,我们会看到更改反映在/ fr / contact,反之亦然。
我们添加了以下配置:
doctrine_phpcr:
odm:
locales:
en: ~
fr: [en]
de: [en]
cmf_core:
multilang:
locales: [en, fr, de]
我们的文档有BasicPage类:
/**
* @PHPCR\Document(referenceable=true,translator="attribute")
*/
class BasicPage extends Page implements SeoAwareInterface, SitemapElementInterface
{
/**
* @var string
* @PHPCR\String(nullable=true,translated=true)
*/
protected $intro;
...
}
我们还需要做些什么来使原始内容可以翻译吗?
答案 0 :(得分:1)
你现在如何加载灯具?你使用bindTranslation存储多种语言的内容?否则您只会创建一种语言版本的内容。
编辑时,加载文档的语言是您存储的语言,除非您明确指定其他语言。 (通常,您将更改映射到文档区域设置的字段。)
在您的情况下,如果该文档目前仅翻译为英文并且您要求使用法语文档,那么phpcr-odm将回退到英文并为您提供该文档。然后编辑并保存,更新英文版。最好是在字段上映射语言环境,并将其公开给编辑器以显式指定语言环境或在URL中使用内容语言参数以避免混淆。
如果您想要显示该信息,也可以向文档管理员询问可用的翻译。
顺便提一下,我们目前正致力于提供一种工具,将非翻译文档转换为翻译文档,反之亦然:https://github.com/doctrine/phpcr-odm/pull/655。如果你想看看这个,反馈非常感谢。答案 1 :(得分:1)
好的,所以我设法自己解决这个问题(部分原因是dbu提供的信息,部分归功于xdebug!)cmf_create内联编辑器生成了更新文档的ajax请求,但这些是使用默认值语言环境而不是请求中指定的语言环境。将cmf_create.rest_force_request_locale设置为true,因为指定in the CMF docs有效,这意味着我们可以在从我们的灯具加载时单独编辑每种语言。我们仍然需要迁移才能使每个文档都可以翻译,但我们可以利用dbu中提到的转换器工具。