2015-04-13 5 views
0

Я новичок в symfo, но мне нужно перевести содержимое моего сайта.Как получить перевод «сущности» с помощью Symfony a2lix knp doctrine behaviors translatable

Я использую a2lix (последняя версия) и поведение доктрины KNP (Translatable).

Предположим, что у меня есть 2 объекта (например, статьи и категории).

Как и в документе (https://github.com/KnpLabs/DoctrineBehaviors) для переводов, я использую 2 класса для категорий (категория и категория перевода). Чтобы получить переводы, моей категории, я использую запрос с языковой версией. Я получаю локаль с запросом $ 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, 
     )); 
    } 

Repository Я пытаюсь получить информацию для локали.

public function findAllByLocale($locale){ 

     return $this->createQueryBuilder('a') 
        ->join('a.translations', 'aTrans') 
        ->where('aTrans.locale = :locale') 
        ->setParameter("locale", $locale) 
        ->addSelect('aTrans') 
        ->getQuery() 
        ->getResult() 
     ;   
} 

Я не знаю, хорошая практика, но это работает для меня. Я получить пт/ан категории в шаблоне Twig, как и когда я изменить URL:

<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), но я действительно не понимаю. Это способ всегда проходить локаль?

Что я делаю неправильно?

Я заблокирован и не нашел документов для решения проблемы. Извините за мой английский ;-)

Любая помощь будет очень признательна. Many Thanks

+0

посмотреть на [этот ответ] (http://stackoverflow.com/questions/29232860/how-to-access-translated-property-using-knp-labs -транспалируемое-доктрина-поведение/29233740 # 29233740), это может быть полезно для вас. –

+0

@gp_sflover, большое спасибо, вы тоже спасете мою жизнь. –

ответ

1

KNP имеет свой собственный способ угадать текущий язык, просто обратившись к области текущего запроса. Вся вещь «прохождение локали» полезна, если вы хотите вывести записи для определенной локали.

Теперь для перевода вашей категории. Поскольку вы не включили свои сущности, я попытаюсь показать вам несколько примеров для доступа к вашим переводам.

В вашей организации категории, скажем, у вас есть свойство имя, которое вернет название вашей категории. Затем вы можете определить простой вспомогательный метод, который бы возвращал это имя по текущему языку:

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

    return ''; 
} 

Итак, что мы здесь сделали?

  1. $ this-> перевод() -> GetName() - эта линия выглядит для вашей организации перевода (в данном случае, будет CategoryTranslation) и вызывает метод GetName(). Затем мы либо возвращаем имя переведенной категории, либо пустую строку, если перевод не был добавлен.

И, наконец, это то, как вы можете получить доступ к имени категории в шаблоне веточки:

Поскольку мы определили наш вспомогательный метод, больше нет необходимости доступа к .translations в шаблоне. Вы можете просто позвонить:

{{ category.name }} 

Надеюсь, у вас возникла эта идея.

+0

большое спасибо, вы спасете мою жизнь. –

0

И вы также можете использовать этот

{{ category.translate.name }} 

 Смежные вопросы

  • Нет связанных вопросов^_^