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

时间:2015-10-09 15:11:26

标签: symfony symfony-cmf

我们有一个基于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;
  ...
}

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

2 个答案:

答案 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中提到的转换器工具。