| Install | |
|---|---|
composer require mountainclans/livewire-translatable |
|
| Latest Version: | 1.1.4 |
| PHP: | ^8.2 |
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::all() - позволяет получить массив всех языков, на которые переводится приложение в формате ключ => название языка.ContentLanguages::default() - возвращает ключ первого языка, заданного в конфигурации.Трейт позволяет задать пустые стартовые значения для всех языков, на которые переводится сайт, для только что инициализированного поля. Полезен при использовании с редактором, который требует строку при инициализации значения.
Использование:
# 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 атрибутов модели.
Предоставляет Livewire-компоненту метод requireTranslations, позволяющий убедиться при валидации поля, что у него есть переводы полей.
# Your livewire component
public function saveSomething(): void
{
$this->validate([
'categoryId' => [
'nullable',
'exists:blog_categories,id',
],
...$this->requireTranslations('title', true, true, 10, 255),
]);
}
Метод принимает следующие параметры:
$fieldName - поле компонента, которое валидируем;$isOptional - можно ли оставить его пустым;$requireDefaultLanguage - требовать ли заполнения хотя бы ключа по умолчанию (получаемого из ContentLanguages::default());$minLength - минимальная длина поля;$maxLength - максимальная длина поля.Позволяет корректно логировать изменения в переводимых полях модели с использованием пакета 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.