
Laravel i18n : guide complet de l'internationalisation et de la localisation
Du premier fichier de locale à la production : configurez le système de traduction de Laravel, gérez la pluralisation, corrigez le bug de repli JSON et ajoutez des chaînes de repli de locale intelligentes pour les variantes régionales.
Comprendre le système de traduction de Laravel
Laravel est fourni avec un système de traduction intégré qui prend en charge deux formats de fichiers : les tableaux PHP et le JSON. Les fichiers PHP utilisent des clés imbriquées organisées par fonctionnalité (auth.failed, validation.required). Les fichiers JSON utilisent la chaîne source comme clé, ce qui est plus simple mais ne prend pas en charge l'imbrication.
composer create-project laravel/laravel my-app
cd my-app
# Laravel includes i18n out of the box
# No extra packages needed for basic usageConfigurer les paramètres de locale
Définissez la locale par défaut et la locale de repli de votre application dans config/app.php. La locale de repli est utilisée lorsqu'une clé de traduction est manquante dans la locale active. Configurez les locales prises en charge par votre application et ajoutez un middleware pour détecter et définir la locale préférée de l'utilisateur.
// config/app.php
return [
'locale' => 'en', // Default locale
'fallback_locale' => 'en', // Fallback when key is missing
'faker_locale' => 'en_US',
// Available locales (for your language switcher)
'available_locales' => ['en', 'de', 'ja', 'es', 'fr', 'pt-BR'],
];// app/Http/Middleware/SetLocale.php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class SetLocale
{
public function handle(Request $request, Closure $next)
{
$locale = $request->segment(1); // e.g. /de/about
if (in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return $next($request);
}
}Utiliser les fonctions de traduction
Laravel propose trois façons de traduire des chaînes : la fonction utilitaire __() (recommandée), la fonction trans() et la directive Blade @lang. Les trois acceptent la clé de traduction et des paramètres de remplacement facultatifs. Utilisez __() dans le code PHP et les modèles Blade, et @lang dans Blade lorsque vous n'avez pas besoin d'échapper le HTML.
// lang/en/messages.php
return [
'welcome' => 'Welcome to our application',
'greeting' => 'Hello, :name!',
'nav' => [
'home' => 'Home',
'about' => 'About',
'settings' => 'Settings',
],
];
// lang/de/messages.php
return [
'welcome' => 'Willkommen in unserer Anwendung',
'greeting' => 'Hallo, :name!',
'nav' => [
'home' => 'Startseite',
'about' => 'Über uns',
'settings' => 'Einstellungen',
],
];Gérer la pluralisation
Laravel utilise une syntaxe séparée par des barres verticales pour les formes plurielles. La forme la plus simple est 'apples' => 'There is one apple|There are many apples'. Pour des plages explicites, utilisez 'apples' => '{0} No apples|{1} One apple|[2,*] :count apples'. L'utilitaire trans_choice() ou Str::plural() sélectionne la forme correcte en fonction du nombre.
// lang/en.json
{
"Welcome back!": "Welcome back!",
"You have :count new notifications": "You have :count new notifications",
"Copyright :year :company": "Copyright :year :company"
}
// lang/de.json
{
"Welcome back!": "Willkommen zurück!",
"You have :count new notifications": "Sie haben :count neue Benachrichtigungen",
"Copyright :year :company": "Copyright :year :company"
}Ajouter des chaînes de repli de locale
Le repli intégré de Laravel ne va que de la locale active à fallback_locale — il n'existe aucune étape intermédiaire. Un utilisateur pt-BR ayant une clé manquante voit s'afficher l'anglais au lieu d'une traduction pt-PT pourtant parfaitement valable. laravel-locale-chain corrige cela en fusionnant en profondeur les traductions d'une chaîne de repli configurable au chargement.
{{-- Simple translation --}}
<h1>{{ __('messages.welcome') }}</h1>
{{-- With variables --}}
<p>{{ __('messages.greeting', ['name' => $user->name]) }}</p>
{{-- Using @lang directive --}}
<h2>@lang('messages.nav.home')</h2>
{{-- JSON translations (use the string itself as key) --}}
<p>{{ __('Welcome back!') }}</p>
{{-- Pluralization --}}
{{ trans_choice('{0} No items|{1} One item|[2,*] :count items', $count) }}
{{-- Inside Blade components --}}
<x-button>{{ __('messages.nav.settings') }}</x-button>Automatiser les traductions
Une fois votre configuration i18n Laravel terminée, traduisez vos fichiers de locale à l'aide de l'IA. Pointez votre assistant IA vers le fichier de locale source, ou utilisez le CLI i18n Agent dans votre pipeline CI/CD. Les fichiers de traduction PHP et JSON sont tous deux pris en charge.
// Install locale chain package
composer require i18n-agent/laravel-locale-chain
// config/locale-chain.php
return [
'chains' => [
'pt-BR' => ['pt-BR', 'pt', 'en'],
'zh-Hant-TW' => ['zh-Hant-TW', 'zh-Hant', 'zh', 'en'],
'es-419' => ['es-419', 'es', 'en'],
],
];
// In AppServiceProvider::boot()
use I18nAgent\LocaleChain\LocaleChainServiceProvider;
// The package automatically deep-merges translations
// across the chain: pt-BR -> pt -> enPièges courants
Logique singulier/pluriel codée en dur
Les traductions JSON ne se replient pas
Mélanger PHP et JSON sans comprendre l'ordre de priorité
Essayez i18n Agent maintenant
Déposez votre fichier de traduction ici
JSON, YAML, PO, XML, CSV, Markdown, Properties
ou cliquez pour parcourir
Langues cibles