我是symfo的新手,但我需要翻译我的网站内容。
我使用的是a2lix(最新版本)和KNP条令行为(可翻译)。
假设我有两个实体(例如文章和类别)。
如文档中所示(https://github.com/KnpLabs/DoctrineBehaviors)对于翻译,我使用了两个类别(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类别,当我更改url:时是这样的
<tr>
<th>Category</th>
<td>{{ category.translations|First.name }}</td>
</tr>
我的问题
为了翻译我的文章,我也这么做。我有三处房产-所有权-说明-category(我使用的是a2lix_translatedEntity(http://a2lix.fr/bundles/translation-form/#bundle-附加))
当我试图呈现文章的记录时,我从不检索我的类别名称的翻译,而是检索标题和描述。
我也读到(https://github.com/KnpLabs/DoctrineBehaviors#guess-当前的语言环境),但我并不真正理解。这是一种总是通过区域设置的方法吗?
我做错了什么?
我被阻止了,找不到任何文档来解决我的问题。对不起我的英语;-)
任何帮助都将不胜感激。非常感谢
KNP有自己的方法来猜测当前的区域设置,只需访问当前的请求范围。如果您想提取特定区域设置的记录,那么整个"传递区域设置"功能非常有用。
现在,为您的类别翻译。由于您没有包括您的实体,我将尝试向您展示一些示例来访问您的翻译。
在您的类别实体中,假设您有一个属性name,它将返回您的类别名称。然后,您可以定义一个简单的助手方法,该方法将按当前区域设置返回该名称:
public function getName() {
if( $name == $this->translate()->getName() ) {
return $name;
}
return '';
}
那么,我们在这里做了什么?
- $this->translate()->getName()-此行查找您的翻译实体(在本例中为CategoryTranslation)并调用方法getName(。然后,我们要么返回翻译后的类别名称,如果没有添加翻译,则返回一个空字符串
最后,这就是你如何在你的树枝模板中访问你的类别名称:
由于我们定义了helper方法,因此不再需要访问模板中的.productions。您可以简单地拨打:
{{ category.name }}
希望你有这个想法。
使用DoctrineBehaviors v2,您可以将其添加到您的Category类中:
public function __call($name, $arguments)
{
return $this->proxyCurrentLocaleTranslation($name, $arguments);
}
以下是它的作用。因此,在您的Category实体中,假设您有一个属性描述,它将保存您的类别描述。上面的代码将生成相应的属性getter:getDescription()。最终将允许您在Twig模板中使用此属性:
{{ category.description }}
您也可以使用这个
{{ category.translate.name }}