У меня проблема с DoctrineBehaviors
расслоение. Я пытаюсь получить перевод для определенного языка (французский) для объекта, который не имеет перевода на французский язык. Он возвращает запасной язык, который подходит для внешнего интерфейса, но мне нужно знать, есть ли у этого языка перевод, потому что мне нужно заполнить свой внутренний интерфейс.
Как я могу узнать, переведено ли поле сущности на определенный язык?
С использованием 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
).
Других решений пока нет …