mountainclans / livewire-translatable
This is my package livewire-translatable
Fund package maintenance!
Mountain Clans
Requires
- php: ^8.2
- ext-dom: *
- ext-libxml: *
- illuminate/contracts: ^10.0||^11.0||^12.0
- livewire/livewire: ^3.5
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-translatable: ^6.9
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- spatie/laravel-activitylog: ^4.9
README
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>
из пакета UI и <x-ui.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.