mountainclans/livewire-translatable
| Install | |
|---|---|
composer require mountainclans/livewire-translatable |
|
| Latest Version: | 1.1.4 |
| PHP: | ^8.2 |
| License: | MIT |
| Last Updated: | Sep 29, 2025 |
| Links: | GitHub · Packagist |
Livewire Translatable
UI компонент для интуитивной работы с переводимыми полями. Опирается на функциональность, предоставляемую пакетом Spatie Translatable.
Установка
Установите пакет при помощи Composer:
composer require mountainclans/livewire-translatable
Обратите внимание, что для корректной стилизации в вашем проекте должен использоваться TailwindCSS.
Добавьте в tailwind.config.js в секцию content:
'./vendor/mountainclans/livewire-translatable/resources/views/**/*.blade.php'
Опубликуйте файл конфигурации и задайте в нём нужные языки, на которые переводится ваш сайт:
php artisan vendor:publish --tag="livewire-translatable-config"
Опционально, вы можете опубликовать views для их переопределения:
php artisan vendor:publish --tag="livewire-translatable-views"
Использование
Оберните translatable-поля компонентом <x-ui.translatable>:
<x-ui.translatable>
Переводимые поля, к примеру
<x-ui.input wire:model="title"
translatable
placeholder="{{ __('Enter the page title') }}"
label="{{ __('Page title *') }}"
/>
</x-ui.translatable>
Каждому из переводимых полей необходимо добавить атрибут translatable.
Поддерживаемые компоненты переводимых полей
<x-ui.input>из пакета Livewire UI<x-ui.tiptap>из пакета Livewire Tiptap
ContentLanguages
Пакет предоставляет сервис-класс ContentLanguages, имеющий два статических метода:
ContentLanguages::all()- позволяет получить массив всех языков, на которые переводится приложение в форматеключ=>название языка.ContentLanguages::default()- возвращает ключ первого языка, заданного в конфигурации.
Трейты
Трейт FilledTranslatableFields
Трейт позволяет задать пустые стартовые значения для всех языков, на которые переводится сайт, для только что инициализированного поля. Полезен при использовании с редактором, который требует строку при инициализации значения.
Использование:
# Your livewire component
//...
use MountainClans\LivewireTranslatable\Traits\FilledTranslatableFields;
public function mount(?string $blogId = null): void
{
if ($this->blogId) {
$this->blog = Blog::findOrFail($this->blogId);
$this->content = $this->blog->getAllTranslations('content');
//...
}
}
Поле модели (в данном случае, content) обязательно должно быть указано в списке $translatable атрибутов модели.
Трейт RequireTranslations
Предоставляет Livewire-компоненту метод requireTranslations, позволяющий убедиться при валидации поля, что у него есть переводы полей.
# Your livewire component
public function saveSomething(): void
{
$this->validate([
'categoryId' => [
'nullable',
'exists:blog_categories,id',
],
...$this->requireTranslations('title', true, true, 10, 255),
]);
}
Метод принимает следующие параметры:
- string
$fieldName- поле компонента, которое валидируем; - bool
$isOptional- можно ли оставить его пустым; - bool
$requireDefaultLanguage- требовать ли заполнения хотя бы ключа по умолчанию (получаемого изContentLanguages::default()); - int
$minLength- минимальная длина поля; - int
$maxLength- максимальная длина поля.
Трейт LogTranslatableAttributes
Позволяет корректно логировать изменения в переводимых полях модели с использованием пакета Spatie Activitylog.
class YourModel extends Model {
use LogsActivity; // обязательно подключите трейт от Spatie
use LogTranslatableAttributes;
public array $translatable = [
// ...
];
}
Использование трейта опционально. Данный пакет не требует использования пакета Spatie Activitylog.
Изменения
Получите больше информации об изменениях в пакете, прочитав CHANGELOG.
Авторы
Лицензия
The MIT License (MIT). Please see License File for more information.