candeno/laravel-translations

EAV-based per-locale translations for Eloquent models — stores translated field values in a shared translations table with a HasTranslations trait for get/set/bulk-write operations.

Maintainers

Package info

github.com/Candeno/laravel-translations

pkg:composer/candeno/laravel-translations

Statistics

Installs: 20

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-04-24 11:28 UTC

This package is auto-updated.

Last update: 2026-04-24 11:40:37 UTC


README

EAV-based per-locale translations for Eloquent models. Stores translated field values in a shared translations table with a HasTranslations trait for get/set/bulk-write operations.

Installation

composer require candeno/laravel-translations

Publish and run the migration:

php artisan vendor:publish --tag=candeno-translations-migrations
php artisan migrate

Usage

Add the trait to any Eloquent model:

use Candeno\LaravelTranslations\Concerns\HasTranslations;

class Activity extends Model
{
    use HasTranslations;

    protected array $translatable = ['title', 'subtitle', 'why_text'];
}

Get a translation

// Falls back: requested locale → fallback locale → raw model attribute
$activity->getTranslation('title', 'uk', 'da');

Set a translation

$activity->setTranslation('title', 'uk', 'Назва');

Set all locales for a field

$activity->setTranslations('title', [
    'da' => 'Titel',
    'uk' => 'Назва',
]);

Bulk-write from a localizedContent map

Useful when consuming the automation form payload directly:

// $localizedContent = ['da' => ['title' => '...', 'description' => '...'], 'uk' => [...]]
$activity->setLocalizedContent($localizedContent, [
    'title'       => 'title',
    'description' => 'subtitle',
    'buttonText'  => 'action_label',
]);

Schema

column type notes
table_name varchar Eloquent model table
row_id varchar Model primary key (int or UUID)
locale varchar(10) e.g. da, uk, en
field varchar Model field name
value text Translated value

A unique index on (table_name, row_id, locale, field) ensures upserts are safe.