我是symfo的新手,但我需要翻译我网站的内容。
我使用的是a2lix(最新版本)和KNP教条行为(可翻译)。
我们说我有2个实体(例如文章和类别)。
与文档(https://github.com/KnpLabs/DoctrineBehaviors)中的翻译一样,我使用了2个类别(Category和CategoryTranslation)。 要检索我的类别的翻译,我使用带有区域设置的查询。我得到了Request $ request($ locale = $ request-> getLocale();)的语言环境。这是我的控制器和我的存储库中的查询的示例。
控制器
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$locale = $request->getLocale();
$entities = $em->getRepository('AcmeBundle:Category')->findAllByLocale($locale);
return $this->render('CTCArtworkBundle:Backend/Artwork:index.html.twig', array(
'entities' => $entities,
));
}
存储库 我正在尝试检索语言环境的信息。
public function findAllByLocale($locale){
return $this->createQueryBuilder('a')
->join('a.translations', 'aTrans')
->where('aTrans.locale = :locale')
->setParameter("locale", $locale)
->addSelect('aTrans')
->getQuery()
->getResult()
;
}
我不知道这是不是一个好习惯,但它对我有用。当我更改网址时,我在我的Twig模板中检索fr / en类别:
<tr>
<th>Category</th>
<td>{{ category.translations|First.name }}</td>
</tr>
我的问题
对于我的文章的翻译,我也这样做。我有3个属性 - 标题 - 描述 - 类别(我使用a2lix_translatedEntity(http://a2lix.fr/bundles/translation-form/#bundle-additional))
当我尝试渲染文章的记录时,我从不检索我的类别名称的翻译,但是标题和描述的翻译。
我也读到了(https://github.com/KnpLabs/DoctrineBehaviors#guess-the-current-locale),但我并不理解。这是一种总是传递语言环境的方法吗?
我做错了什么?
我被阻止了,找不到任何文件来解决我的问题。对不起我的英文; - )
任何帮助都会非常感激。非常感谢
答案 0 :(得分:1)
KNP有自己的方式来猜测当前的语言环境,只需访问当前的请求范围即可。如果要为特定区域设置提取记录,整个“传递区域设置”很有用。
现在,您的类别翻译。由于您没有包含您的实体,我将尝试向您展示一些访问您的翻译的示例。
在您的类别实体中,假设您有一个属性名称,它将返回您的类别名称。然后,您可以定义一个简单的帮助器方法,该方法将按当前语言环境返回该名称:
public function getName() {
if( $name == $this->translate()->getName() ) {
return $name;
}
return '';
}
那么,我们在这做了什么?
最后,您可以在枝条模板中访问类别名称:
由于我们定义了辅助方法,因此不再需要在模板中访问 .translations 。您只需致电:
{{ category.name }}
希望你明白了。
答案 1 :(得分:0)
你也可以使用这个
{{ category.translate.name }}