我使用两种语言构建Symfony 2应用程序我实现了可翻译来自StofDoctrineExtensionsBundle。可翻译使其他表ext_translations并存储翻译。
以下是我将用于翻译的表格(对象表格):
这是表ext_translations(ext_translations表):
当我在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
然后提交上面的代码。这种应用的最佳解决方案是什么?
答案 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;通过可翻译的捆绑。