
Laravel i18n: komplett guide till internationalisering och lokalisering
Från den första språkfilen till produktion: konfigurera Laravels översättningssystem, hantera pluralformer, åtgärda JSON-felet med reservspråk och lägg till smarta reservspråkskedjor för regionala varianter.
Förstå Laravels översättningssystem
Laravel har ett inbyggt översättningssystem som stöder två filformat: PHP-arrayer och JSON. PHP-filer använder nästlade nycklar som ordnas efter funktion (auth.failed, validation.required). JSON-filer använder källsträngen som nyckel, vilket är enklare, men saknar stöd för nästling.
composer create-project laravel/laravel my-app
cd my-app
# Laravel includes i18n out of the box
# No extra packages needed for basic usageKonfigurera språkinställningar
Ange applikationens standardspråk och reservspråk i config/app.php. Reservspråket används när en översättningsnyckel saknas för det aktiva språket. Konfigurera vilka språk applikationen stöder och lägg till mellanprogram som identifierar och anger användarens föredragna språk.
// 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);
}
}Använd översättningsfunktioner
Laravel erbjuder tre sätt att översätta strängar: hjälpfunktionen __() (rekommenderas), funktionen trans() och Blade-direktivet @lang. Alla tre tar emot översättningsnyckeln och valfria ersättningsparametrar. Använd __() i PHP-kod och Blade-mallar och @lang i Blade när HTML-utdata inte behöver HTML-kodas.
// 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',
],
];Hantera pluralformer
Laravel använder lodstrecksavgränsad syntax för pluralformer. Den enklaste formen är 'apples' => 'There is one apple|There are many apples'. För uttryckliga intervall använder du 'apples' => '{0} No apples|{1} One apple|[2,*] :count apples'. Hjälpfunktionen trans_choice() eller Str::plural() väljer rätt form utifrån antalet.
// 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"
}Lägg till reservspråkskedjor
Laravels inbyggda reservfunktion går bara från det aktiva språket till fallback_locale. Det finns inget mellansteg. En pt-BR-användare som saknar en nyckel ser därför engelska i stället för den fullt användbara pt-PT-översättningen. laravel-locale-chain åtgärdar detta genom att djupsammanfoga översättningar från en konfigurerbar reservspråkskedja vid inläsning.
{{-- 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>Automatisera översättningar
När Laravel i18n är konfigurerat kan du översätta språkfilerna med AI. Ge källspråkfilen till din AI-assistent eller använd i18n Agent CLI i CI/CD-processen. Både PHP- och JSON-översättningsfiler stöds.
// 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 -> enVanliga fallgropar
Hårdkodad logik för singular och plural
JSON-översättningar använder inte reservspråket
PHP och JSON blandas utan förståelse för prioriteringen
Prova i18n Agent nu
Släpp din översättningsfil här
JSON, YAML, PO, XML, CSV, Markdown, Properties
eller klicka för att välja en fil
Målspråk