0

我是 symfo 的新手,但我需要翻译我网站的内容。

我正在使用 a2lix(最新版本)和 KNP 教义行为(可翻译)。

假设我有 2 个实体(例如文章和类别)。

与文档 ( https://github.com/KnpLabs/DoctrineBehaviors ) 中的翻译一样,我使用 2 个类别的类别(类别和类别翻译)。为了检索我的类别的翻译,我使用了带有语言环境的查询。我通过 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))

当我尝试呈现文章的记录时,我从不检索我的类别名称的翻译,但对于标题和描述却很好。

我也读过(https://github.com/KnpLabs/DoctrineBehaviors#guess-the-current-locale),但我不太明白。这是一种总是通过 locale 的方法吗?

我究竟做错了什么 ?

我被阻止了,找不到任何文档来解决我的问题。对不起我的英语不好 ;-)

任何帮助将不胜感激。非常感谢

4

2 回答 2

1

KNP 有自己的方式来猜测当前的语言环境,只需访问当前请求范围。如果您想提取特定语言环境的记录,整个“传递语言环境”的东西很有用。

现在,为您的类别翻译。由于您没有包含您的实体,我将尝试向您展示一些示例以访问您的翻译。

在您的类别实体中,假设您有一个将返回您的类别名称的属性名称然后,您可以定义一个简单的帮助方法,该方法将通过当前语言环境返回该名称:

public function getName() {
    if( $name == $this->translate()->getName() ) {
        return $name;
    }

    return '';
}

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

  1. $this->translate()->getName() - 此行查找您的翻译实体(在本例中为 CategoryTranslation)并调用方法getName()。然后,我们要么返回翻译的类别名称,要么返回一个空字符串,如果没有添加翻译。

最后,这是您可以在 twig 模板中访问类别名称的方法:

由于我们定义了辅助方法,因此不再需要访问模板中的.translations。您可以简单地调用:

{{ category.name }}

希望你明白了。

于 2015-04-13T12:03:45.403 回答
0

你也可以使用这个

{{ category.translate.name }}
于 2016-03-18T07:44:53.453 回答