Guide de Démarrage Rapide - Système de Traduction

Version : 1.0 Date : 2026-01-25 Story : Epic 5, Story 5.4


Vue d'ensemble

Ce guide vous permet de démarrer rapidement avec le système de traduction multilingue. En 5 minutes, vous serez capable d'utiliser les traductions dans votre application.


1. Configuration minimale (5 minutes)

Étape 1 : Activer les traductions

Fichier : .env

TRANSLATIONS_ENABLED=true
TRANSLATIONS_INTERFACE_ENABLED=true
TRANSLATIONS_DATABASE_ENABLED=true
TRANSLATIONS_ROUTING_ENABLED=true
TRANSLATIONS_FILAMENT_ENABLED=true

Étape 2 : Vérifier la configuration

php artisan config:clear
php artisan cache:clear

Étape 3 : Tester

Créez un fichier de traduction :

Fichier : lang/fr.json

{
    "Welcome": "Bienvenue",
    "Hello": "Bonjour"
}

Fichier : lang/es.json

{
    "Welcome": "Bienvenido",
    "Hello": "Hola"
}

Dans une vue Blade :

<h1>{{ __('Welcome') }}</h1>
<p>{{ __('Hello') }}</p>


2. Utiliser les traductions dans les vues (2 minutes)

Traductions JSON (interface)

{{-- Simple --}}
{{ __('Welcome') }}

{{-- Avec paramètres --}} {{ __('Hello :name', ['name' => $user->name]) }}

{{-- Avec namespace --}} {{ __('blog.title') }}

Traductions de modèles (BDD)

{{-- Utiliser le helper trans_model --}}
<h1>{{ trans_model($post, 'title') }}</h1>
<p>{{ trans_model($post, 'content') }}</p>

{{-- Ou directement (si traductions activées) --}} <h1>{{ $post->title }}</h1>


3. Créer un modèle traduisible (5 minutes)

Étape 1 : Ajouter le trait

<?php

namespace App\Models;

use App\Specifics\Shares\Models\Concerns\ConditionallyTranslatable; use Illuminate\Database\Eloquent\Model;

class Article extends Model { use ConditionallyTranslatable;

protected function getTranslatableFields(): array { return ['title', 'content', 'slug']; } }

Étape 2 : Créer la migration

Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->json('title')->nullable();
    $table->json('content')->nullable();
    $table->json('slug')->nullable();
    $table->timestamps();
});

Étape 3 : Activer pour le modèle

Fichier : .env

TRANSLATIONS_MODEL_ARTICLE=true

Étape 4 : Utiliser

$article = new Article();
$article->setTranslation('title', 'fr', 'Mon article');
$article->setTranslation('title', 'es', 'Mi artículo');
$article->save();

// Récupérer $title = $article->getTranslation('title', 'fr'); // Ou $title = trans_model($article, 'title');


4. Utiliser dans Filament (3 minutes)

Étape 1 : Ajouter LocaleAction

use App\Filament\Support\LocaleAction;
use Filament\Resources\Pages\EditRecord;

class EditArticle extends EditRecord { public ?string $locale = null;

public function mount(int|string $record): void { parent::mount($record); $this->locale = current_locale(); }

protected function getHeaderActions(): array { return array_merge( LocaleAction::make() ?? [], parent::getHeaderActions() ); } }

Étape 2 : Utiliser TranslatableField

use App\Filament\Support\TranslatableField;

...TranslatableField::makeTextInput('title', 'Titre', fn ($field) => $field->required() ),


5. Helpers essentiels

// Locale courante
current_locale(); // 'fr'

// Locales disponibles available_locales(); // ['fr', 'es']

// Route localisée localized_route('blog.index'); // '/fr/blog' ou '/es/blog'

// Traduction de modèle trans_model($post, 'title'); // Titre selon la locale courante

// Vérifier l'activation translations_enabled(); // true/false translation_component_enabled('database'); // true/false


6. Prochaines étapes


Besoin d'aide ? Consultez la FAQ ou la documentation complète.

Prendre rendez-vous