kraenkvisuell / nova-astrotranslatable

An Astrotomic Translatable extension for Laravel Nova.


Nova Astrotomic Translatable

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

It is made from a fork from Optimist Digital's Laravel Nova Translatable field, which is tailored for the Spatie Laravel Translatable package - so huge thanks to them, 99% of the work was made by them!


  • laravel/nova: ^2.9 || ^3.0
  • astrotomic/laravel-translatable: ^11.0


  • Supports almost all fields (including third party ones)
  • Supports default validation automatically
  • Simple to implement with minimal code changes (after astrotomic/laravel-translatable support)
  • Locale tabs to switch between different locale values of the same field

Known non-working fields

  • Image and File


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


Detail View

Form View

Form View w/ Validation Errors


Firstly, set up astrotomic/laravel-translatable.

Install the package in a Laravel Nova project via Composer:

# Install nova-translatable
composer require kraenkvisuell/nova-astrotranslatable

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


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

// Any Nova field
  ->rules('required', 'min:2')

// Any third-party input field
Multiselect::make('Football teams')

// Optionally pass custom locales on a per-field basis
    'en' => 'English',
    'et' => 'Estonian',


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 KraenkVisuell\NovaAstrotranslatable\HandlesTranslatable;

class Product extends Resource
    use HandlesTranslatable;

    public function fields(Request $request)
        return [
            Text::make(__('Name'), 'name')
                ->rulesFor('en', [
                ->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 &


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"



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