StofDoctrineExtensionsBundle可翻译

时间:2015-11-24 15:50:10

标签: php symfony doctrine stofdoctrineextensions

我使用两种语言构建Symfony 2应用程序我实现了可翻译来自StofDoctrineExtensionsBundle。可翻译使其他表ext_translations并存储翻译。

以下是我将用于翻译的表格(对象表格):

enter image description here

这是表ext_translations(ext_translations表):

enter image description here

当我在ext_translations表中运行代码以保存翻译时出于某种原因。

    $entity = $em->getRepository('ObjectsBundle:Object')->find(1);
    $entity->setTitle('my title in ru');
    $entity->setTranslatableLocale('ru'); // change locale
    $em->persist($entity);
    $em->flush();

在创建时,它会在对象表中写入标题,但稍后在更新时,它只更新ext_translations表。

如何使用两种语言处理symfony 2中的更新和创建?

我是否需要复制这些输入并将其存储在一次提交中。例如在Object表中我有标题,我需要:

<input type="text" name="title_bg">
<input type="text" name="title_en">

提交时,请更改参数local:

 $entity->setTranslatableLocale('ru'); -- or what lang parameter we have

然后提交上面的代码。这种应用的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:1)

&#34;非翻译表&#34;文本(适当实体中的文本)是默认语言环境中的文本。所以通常它是&#34; en&#34; (或更恰当的应该是en_US或en_GB)。

如果你想让你的翻译默认为俄语(&#34; ru&#34;或更好&#34; ru_RU&#34;),你应该将你的默认语言环境设置为。

翻译(以及ext_translations表的条目)是非默认语言环境翻译的条目。

要设置默认语言环境,请转到parameters.yml.dist并设置

parameters:
    [...]
    locale: de

运行php composer.phar install将其转移到您的parameters.yml中。您当然可以直接在parameters.yml中对其进行编辑,但在作曲家更新/安装后可能会再次覆盖

编辑(评论): 如果您遇到CRUD(或者很可能是U)的问题,您必须确保已加载正确的实体。可翻译扩展始终依赖于您在实体内设置的区域设置。 要使用要编辑的文本加载正确的实体,必须在加载

时执行以下操作
$entity = $em->getRepository('ObjectsBundle:Object')->find(1);
$entity->setTranslatableLocale('ru'); // change locale
$em->refresh($entity);

如果您想编辑非默认语言文本,可以这样做。 保存时,您仍需确保在实体中正确设置区域设置(如上所述)。

编辑#2: https://gist.github.com/Koalabaerchen/8ed60894cdbbdcd42f3c 这是用户会话内的_locale参数集的示例(如果不是existant)。使用Symfony 2.7.7及以下版本进行测试

如果要切换用户会话的_locale(以获取其他翻译),您只需创建一个控制器操作,该操作设置_locale会话属性,以便加载另一种语言&#34;神奇地&#34;通过可翻译的捆绑。

相关问题