如何使用Symfony a2lix knp学说行为可翻译检索"sub entity"的翻译



我是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 '';
}

那么,我们在这里做了什么?

  1. $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 }}

相关内容

  • 没有找到相关文章

最新更新