如何使用 Symfony a2lix knp doctrine behaviours translatable 检索 "sub entity" 的翻译
How to retrieve translation of a "sub entity" using Symfony a2lix knp doctrine behaviors translatable
我是 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()
;
}
我不知道这是否是个好习惯,但它对我有用。当我更改 url :
时,我在我的 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))
当我尝试呈现 Article 的记录时,我从未检索到我的类别名称的翻译,但检索到标题和描述。
我也看过(https://github.com/KnpLabs/DoctrineBehaviors#guess-the-current-locale),但我不是很明白。这是一种始终传递语言环境的方法吗?
我做错了什么?
我被阻止了,找不到任何文档来解决我的问题。对不起我的英语 ;-)
如有任何帮助,我们将不胜感激。非常感谢
KNP 有自己的方法来猜测当前区域设置,只需访问当前请求范围即可。如果您想提取特定区域设置的记录,整个 "passing locale" 东西很有用。
现在,为您的类别翻译。由于您没有包含您的实体,我将尝试向您展示一些示例以访问您的翻译。
在您的类别实体中,假设您有一个 属性 name return 您的类别名称。然后您可以定义一个简单的辅助方法,该方法将 return 该名称,按当前语言环境:
public function getName() {
if( $name == $this->translate()->getName() ) {
return $name;
}
return '';
}
那么,我们在这里做了什么?
- $this->translate()->getName() - 此行查找您的翻译实体(在本例中为 CategoryTranslation)并调用方法 getName()。然后,我们要么 return 翻译的类别名称,要么如果没有添加翻译则为空字符串。
最后,这是您在 Twig 模板中访问类别名称的方法:
自从我们定义了辅助方法后,就不再需要在您的模板中访问 .translations。您可以简单地调用:
{{ category.name }}
希望你明白了。
你也可以用这个
{{ category.translate.name }}
我是 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()
;
}
我不知道这是否是个好习惯,但它对我有用。当我更改 url :
时,我在我的 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))
当我尝试呈现 Article 的记录时,我从未检索到我的类别名称的翻译,但检索到标题和描述。
我也看过(https://github.com/KnpLabs/DoctrineBehaviors#guess-the-current-locale),但我不是很明白。这是一种始终传递语言环境的方法吗?
我做错了什么?
我被阻止了,找不到任何文档来解决我的问题。对不起我的英语 ;-)
如有任何帮助,我们将不胜感激。非常感谢
KNP 有自己的方法来猜测当前区域设置,只需访问当前请求范围即可。如果您想提取特定区域设置的记录,整个 "passing locale" 东西很有用。
现在,为您的类别翻译。由于您没有包含您的实体,我将尝试向您展示一些示例以访问您的翻译。
在您的类别实体中,假设您有一个 属性 name return 您的类别名称。然后您可以定义一个简单的辅助方法,该方法将 return 该名称,按当前语言环境:
public function getName() {
if( $name == $this->translate()->getName() ) {
return $name;
}
return '';
}
那么,我们在这里做了什么?
- $this->translate()->getName() - 此行查找您的翻译实体(在本例中为 CategoryTranslation)并调用方法 getName()。然后,我们要么 return 翻译的类别名称,要么如果没有添加翻译则为空字符串。
最后,这是您在 Twig 模板中访问类别名称的方法:
自从我们定义了辅助方法后,就不再需要在您的模板中访问 .translations。您可以简单地调用:
{{ category.name }}
希望你明白了。
你也可以用这个
{{ category.translate.name }}