Проверьте, существует ли перевод для поля в DoctrineBehaviors

У меня проблема с DoctrineBehaviors расслоение. Я пытаюсь получить перевод для определенного языка (французский) для объекта, который не имеет перевода на французский язык. Он возвращает запасной язык, который подходит для внешнего интерфейса, но мне нужно знать, есть ли у этого языка перевод, потому что мне нужно заполнить свой внутренний интерфейс.

Как я могу узнать, переведено ли поле сущности на определенный язык?

4

Решение

С использованием Translatable сущность, вы можете получить все переводы, известные вашей конкретной сущности (документация).

$product = $this->getDoctrine()
->getRepository('AppBundle:Product')
->find($productId);

$repository = $this->getDoctrine()->getRepository('Gedmo\Translatable\Entity\Translation');
$translations = $repository->findTranslations($product);

Переменная $translations теперь содержит массив с ключами, например,

array(2) {
["en_US"]=>
array(1) {
["name"]=>
string(8) "Keyboard"}
["fr_FR"]=>
array(1) {
["name"]=>
string(7) "Clavier"}
}

Выяснить, может ли сущность преобразована, теперь просто проверяет, находится ли локаль в ключах массива.

if (!array_key_exists('fr_FR', $translations)) {
throw $this->createNotFoundException('product description not available in French');
}

Обратите внимание, что Translatable сущность не содержит локаль по умолчанию (если вы не установили setPersistDefaultLocaleTranslation в true).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]