Polyscope - The agent-first dev environment for Laravel

Nova Translatable

optimistdigital/nova-translatable image

Nova Translatable stats

Downloads
262.5K
Stars
168
Open Issues
7
Forks
47

View on GitHub →

A laravel-translatable extension for Laravel Nova.

Nova Translatable

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

Requirements

  • PHP: ^8.0
  • laravel/nova: ^4.12
  • spatie/laravel-translatable: ^4.0 || ^5.0 || ^6.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

Screenshots

Installation

Firstly, set up spatie/laravel-translatable.

Install the package in a Laravel Nova project via Composer:

# Install nova-translatable
composer require outl1ne/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 Outl1ne\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"

Fill other locales from config option

The configuration option fill_other_locales_from allows you to pre-fill other locales from just one locale. This requires the resources to also have the HandlesTranslatable trait.

One select for all fields on a page

If you don't want to display the locale select next to each field, you can set the display_type to none and add a Outl1ne\NovaTranslatable\Fields\LocaleSelect field to your Nova resource. This will render a single select for all fields.

Edge cases

BelongsToMany allowDuplicateRelations corner-case

When using this field inside a BelongsToMany as a pivot field with ->allowDuplicateRelations() and you want to filter out exact matches using the NotExactlyAttached rule, use the BelongsToManyTranslatable field instead of the regular BelongsToMany.

Credits

License

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

outl1ne photo

Previously we were Optimist Digital. Now we're @outl1ne. If you wish to use our packages, please consider switching to the outl1ne namespace.

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Optimistdigital Nova Translatable Related Articles

Launch Your Dream SaaS Application with SaaSykit image

Launch Your Dream SaaS Application with SaaSykit

Read article
Translatable Enums image

Translatable Enums

Read article
Launch Your Dream SaaS Application with SaaSykit image

Launch Your Dream SaaS Application with SaaSykit

Read article
Build Your Dream SaaS Application with SaaSykit image

Build Your Dream SaaS Application with SaaSykit

Read article
Build Your SaaS App in No Time with SaaSykit image

Build Your SaaS App in No Time with SaaSykit

Read article
Build Your Multi-Tenant SaaS App in Days with SaaSykit Tenancy image

Build Your Multi-Tenant SaaS App in Days with SaaSykit Tenancy

Read article
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum
Curotec logo

Curotec

World class Laravel experts with GenAI dev skills. LATAM-based, embedded engineers that ship fast, communicate clearly, and elevate your product. No bloat, no BS.

Curotec
Tighten logo

Tighten

We help companies turn great ideas into amazing apps, products, and services.

Tighten
Typesense Search logo

Typesense Search

Typesense is an open source, blazing-fast search engine, optimized for helping you build delightful search experiences for your sites and apps. Natively integrated with Laravel Scout.

Typesense Search
Securing Laravel logo

Securing Laravel

The essential security resource for Laravel devs, covering everything you need to keep your apps secure. Sign up to receive weekly security tips and monthly in depth articles, diving deep into security concepts you need to know!

Securing Laravel
CodeKudu logo

CodeKudu

Stand-ups, Retrospectives, and 360° Feedback for the entire team. 50% off with code LARAVELNEWS.

CodeKudu