outl1ne / nova-translatable by Tarpsvo

A laravel-translatable extension for Laravel Nova.
330,351
201
7
Package Data
Maintainer Username: Tarpsvo
Maintainer Contact: tarvoreinpalu@gmail.com (Tarvo Reinpalu)
Package Create Date: 2019-12-20
Package Last Update: 2024-10-19
Home Page:
Language: PHP
License: MIT
Last Refreshed: 2024-12-17 03:07:26
Package Statistics
Total Downloads: 330,351
Monthly Downloads: 5,264
Daily Downloads: 224
Total Stars: 201
Total Watchers: 7
Total Forks: 58
Total Open Issues: 16

Nova Translatable

Latest Version on Packagist Total Downloads

This Laravel Nova allows you to make any input field spatie/laravel-translatable compatible and localisable.

Requirements

  • laravel/nova: ^2.9 || ^3.0
  • spatie/laravel-translatable: ^4.0

Features

  • Supports almost all fields (including third party ones)
  • Supports default validation automatically
  • Simple to implement with minimal code changes (after spatie/laravel-translatable support)
  • Locale tabs to switch between different locale values of the same field
  • Double click on a tab to switch all fields to that locale
  • Supports nova-settings package

Known non-working fields

Limitations

  • The following methods can not be used, as this package uses them internally:
    • resolveUsing
    • fillUsing
    • displayUsing (might be fixed eventually)

Screenshots

Detail View

Form View

Form View w/ Validation Errors

Installation

Firstly, set up spatie/laravel-translatable.

Install the package in a Laravel Nova project via Composer:

# Install nova-translatable
composer require optimistdigital/nova-translatable

# Publish configuration (optional, but useful for setting default locales)
php artisan vendor:publish --tag="nova-translatable-config"

Usage

Call ->translatable() on any field, like so:

// Any Nova field
Text::make('Name')
  ->rules('required', 'min:2')
  ->translatable(),

// Any third-party input field
Multiselect::make('Football teams')
  ->rules('required')
  ->translatable(),

// Optionally pass custom locales on a per-field basis
Number::make('Population')
  ->translatable([
    'en' => 'English',
    'et' => 'Estonian',
  ]),

Validation

It's possible to define locale specific validation rules.

To do so, add the ->rulesFor() on your field and the HandlesTranslatable trait to your Nova resource.

->rulesFor accepts array|string|callable locales and array|callable rules.

use OptimistDigital\NovaTranslatable\HandlesTranslatable;

class Product extends Resource
{
    use HandlesTranslatable;

    public function fields(Request $request)
    {
        return [
            Text::make(__('Name'), 'name')
                ->sortable()
                ->translatable()
                ->rules(['max:255'])
                ->rulesFor('en', [
                    'required',
                ])
                ->rulesFor(['en', 'et'], function ($locale) {
                    return ["unique:products,name->$locale{{resourceId}}"];
                }),
        ];
    }
}

In this example, rules will be added to the following values

max: name.*
required: name.en
unique: name.en & name.et

Configuration

You can define default locales for all the translatable fields in the config file. The config file can be published using:

php artisan vendor:publish --tag="nova-translatable-config"

Credits

License

This project is open-sourced software licensed under the MIT license.