This package allows you to manage Laravel Models which use Laravel Translatable in Laravel Nova.
- Laravel Nova >= 4.0
- Laravel >= 10.0
- PHP >= 8.2
NOTE: These instructions are for Laravel >= 10.0 and PHP >= 8.2 If you are using prior version, please see the previous version's docs.
You can install the package via composer:
composer require novius/laravel-nova-translatable
Next we need to publish the package's assets. We do this by running the following command:
php artisan vendor:publish --provider="Novius\LaravelNovaTranslatable\LaravelNovaTranslatableServiceProvider" --tag="public"
- Add
Locale
field on your Nova Resource. - Add
Translations
field on your Nova Resource. Don't forget to add relationtranslations
in the eager loading of your resource. You can translate item from the list of flags displayed. - You can add the
LocaleFilter
filter on your Nova Resource. - You can add the
Locales
card on your Nova Resource, if you've added theLocaleFilter
.
In all cases, add an availableLocales
on your Resource.
use Laravel\Nova\Resource;
use Novius\LaravelNovaTranslatable\Nova\Actions\Translate;
class Post extends Resource
{
// If your model uses the SoftDelete trait
// public static $with = ['translationsWithDeleted'];
// Otherwise
public static $with = ['translations'];
public function availableLocales(): array
{
return ['fr' => 'Français', 'en' => 'English'];
}
public function fields(NovaRequest $request): array
{
return [
Locale::make(),
Translations::make(),
];
}
// Optional, if you want to have a bar to switch locale of the items displayed on the index, more accessible than the filters
// work with the filter LocaleFilter
public function cards(NovaRequest $request): array
{
return [
new Locales(),
];
}
public function filters(NovaRequest $request): array
{
return [
new LocaleFilter(),
];
}
// Optional, if you want to implement custom translation on your model
public function translate(): void
{
$model = $this->model();
$model->attribute_to_translate = 'Translation';
}
If you want to customize the lang files, you can publish them with:
php artisan vendor:publish --provider="Novius\LaravelNovaTranslatable\LaravelNovaTranslatableServiceProvider" --tag="lang"
Lint your code with Laravel Pint using:
composer run-script lint
This package is under GNU Affero General Public License v3 or (at your option) any later version.