无法将应用程序转换为多语言并保持当前内容可翻译

Cannot convert application to multi-lang and keep current content translatable

我们有一个基于 Symfony-CMF 构建的应用程序,运行 很好。我们现在需要为内容添加语言环境和翻译。我们已经设置了一个页面 (/contact),其中包含各种特定于语言环境的路由(例如 /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 class:

/**
* @PHPCR\Document(referenceable=true,translator="attribute")
*/
class BasicPage extends Page implements SeoAwareInterface, SitemapElementInterface
{
  /**
   * @var string
   * @PHPCR\String(nullable=true,translated=true)
   */
  protected $intro;
  ...
}

我们还需要做些什么来使原始内容可翻译吗?

你现在如何加载灯具?是否使用 bindTranslation 以多种语言存储内容?否则您将只能创建内容的一种语言版本。

编辑时,您加载文档所用的语言就是您存储回的语言,除非您明确指定它是一种不同的语言。 (通常,您会更改映射到文档区域设置的字段)。

在你的情况下,如果文档目前只被翻译成英文,而你要求提供法语文档,phpcr-odm 将回退为英语并为你提供该文档。然后你编辑它并保存回来,更新英文版本。最好的方法是将区域设置映射到一个字段上,然后将其公开给编辑器以明确指定区域设置,或者在 url 中使用内容语言参数以避免混淆。

如果您想显示该信息,也可以向文档管理器询问可用的翻译。

顺便说一下,我们目前正在努力提供一种工具,将非翻译文档转换为翻译文档,反之亦然:https://github.com/doctrine/phpcr-odm/pull/655。如果您想检查一下,非常感谢您的反馈。

好的,所以我设法自己解决了这个问题(部分原因是 dbu and partly thanks to xdebug!) The cmf_create inline editor was generating ajax requests to update the documents but these were using the default locale rather than the locale specified in the request. Setting cmf_create.rest_force_request_locale to true as specified in the CMF docs worked and means we can edit each language separately when loaded from our fixtures. We still need a migration to make each document translatable but we may be able to leverage the converter tool as mentioned by dbu 提供的信息。