Построение полиморфной транслируемой модели в Laravel с автозагрузкой переводов
Здесь описывается, как настроить систему перевода в Laravel, используя JSON-колонки для хранения переводов, что делает управление многоязычным контентом более эффективным.
Вместо того чтобы хранить каждый перевод в отдельной строке базы данных, можно использовать JSON-колонку, в которой все переводы для одного элемента будут храниться вместе. Это упрощает как управление данными, так и их извлечение.
Шаги по реализации:
✅Создание таблицы переводов:
Если таблица для переводов еще не существует, создается новая. В этой таблице будут храниться переводы в формате JSON, а также информация о языке перевода, типе и идентификаторе связанной модели (например, пост или продукт).
✅Запуск миграции:
Миграция применяется к базе данных, чтобы создать таблицу с нужной структурой.
✅Создание модели для переводов:
Создается модель для управления переводами. Эта модель описывает полиморфную связь с другими моделями, что позволяет использовать переводы для различных типов данных.
✅Создание трейта для перевода:
Для удобства работы с переводами создается трейт, который автоматически загружает переведенный контент в зависимости от выбранного языка. Если перевода для текущего языка нет, используется резервный перевод на языке по умолчанию.
✅Применение трейта к моделям:
Трейт добавляется к любой модели, для которой требуется поддержка перевода, например, к модели поста.
✅Добавление и получение переведенных данных:
Переводы можно добавлять и получать через методы модели. При этом учитывается текущая локаль, и если перевода для неё нет, используется перевод на языке по умолчанию.
✅Отображение переведенного контента в шаблонах:
В шаблонах Laravel (Blade) переведенный контент отображается как обычные атрибуты модели, что делает работу с многоязычным контентом простой и интуитивно понятной.
Post #4732
2.88K