Spatie / laravel-translatable показывает локаль по умолчанию, когда я пытаюсь получить перевод, которого еще не существует

Проблема в том, что я хочу название на 3 языках (английский, итальянский, немецкий). Пользователь может добавить 3 названия в форму для каждого языка, из которых только итальянский required. После этого заголовки сохраняются в БД с помощью spatie / laravel-translatable:

{"it":"Titolo in italiano.","en":"English title."}

Идея состоит в том, что пользователь может редактировать эти заголовки, но есть проблема. В форме при попытке получить заголовки для английского, итальянского, немецкого языков, когда один из заголовков для этих языков отсутствует, и я пытаюсь показать его, используя:

{{ $item->getTranslation('title_lang', 'de') }}

Он извлекает заголовок по умолчанию в соответствии с локалью по умолчанию, в данном случае это 'it'. Так что, если название Germa отсутствует, отображается итальянское.

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

Я не знаю, как я могу проверить blade с помощью оператора @if или какой-либо другой логики. Я отчаянно пробовал это, но безуспешно (нет смысла, но я попробую):

@if (isset($product->getTranslation('description_locale', 'de')))
    {{ $product->getTranslation('description_locale', 'de') }}
@endif

Я просмотрел документы, но не нашел ничего, что могло бы мне помочь.

Кто-нибудь знает, как этого добиться?

Спасибо!

вы можете попробовать параметр $useFallbackLocale=false, чтобы не получить строку локали по умолчанию. github.com/spatie/laravel-translatable/blob/master/src/… Как: $product->getTranslation('description_locale', 'de', false)

Enver Arslan 11.12.2020 15:17

Бро ты прав! Большое спасибо! Меня заблокировали и в голову ничего не приходит. Вы можете написать это как ответ, и я могу принять это!

Marinario Agalliu 11.12.2020 15:20

к вашему сведению: @if (isset({{ $product->getTranslation('description_locale', 'de') }})) не должен содержать {{ и }}, так как вы уже используете Blade

brombeer 11.12.2020 15:21

@brombeer да, это так глупо, я просто запутался и сделал это, я знаю, что @if не должен конатин {{}}, но я просто был сбит с толку. Спасибо, в любом случае. Я тоже пробовал это без {{}} и не работал. Я редактирую вопрос, но я уже получил ответ.

Marinario Agalliu 11.12.2020 15:23

Это может быть из-за isset(), @if ($product->getTranslation('description_locale', 'de')) должно работать, хотя не проверялось

brombeer 11.12.2020 15:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
5
2 456
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Можете ли вы попробовать параметр $useFallbackLocale=false, чтобы не получить строку локали по умолчанию.

Вы можете проверить использование метода из исходного кода.

Как: $product->getTranslation('description_locale', 'de', false)

Другие вопросы по теме