
Laravel i18n: Komplet guide til internationalisering og lokalisering
Fra den første landestandardfil til produktion: Konfigurer Laravels oversættelsessystem, håndter flertalsformer, ret JSON-reservefejlen og tilføj intelligente reserverækkefølger for regionale landestandardvarianter.
Forstå Laravels oversættelsessystem
Laravel leveres med et indbygget oversættelsessystem, der understøtter to filformater: PHP-arrays og JSON. PHP-filer bruger indlejrede nøgler organiseret efter funktion (auth.failed, validation.required). JSON-filer bruger kildestrengen som nøgle, hvilket er enklere, men ikke understøtter indlejring.
composer create-project laravel/laravel my-app
cd my-app
# Laravel includes i18n out of the box
# No extra packages needed for basic usageKonfigurer landestandardindstillinger
Angiv din applikations standardlandestandard og reservelandestandard i config/app.php. Reservelandestandarden bruges, når en oversættelsesnøgle mangler i den aktive landestandard. Konfigurer de landestandarder, som din applikation understøtter og tilføj middleware for at registrere og angive brugerens foretrukne landestandard.
// 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);
}
}Brug oversættelsesfunktioner
Laravel giver dig tre måder at oversætte strenge på: hjælpefunktionen __() (anbefalet), funktionen trans() og Blade-direktivet @lang. Alle tre accepterer oversættelsesnøglen og valgfrie erstatningsparametre. Brug __() i PHP-kode og Blade-skabeloner og @lang i Blade, når du ikke behøver at escape 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',
],
];Håndter flertalsformer
Laravel bruger en syntaks med lodrette streger til flertalsformer. Den enkleste form er 'apples' => 'Der er ét æble|Der er mange æbler'. Brug 'apples' => '{0} Ingen æbler|{1} Ét æble|[2,*] :count æbler' til eksplicitte intervaller. Hjælpefunktionen trans_choice() eller Str::plural() vælger den korrekte form ud fra antallet.
// 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"
}Tilføj reserverækkefølger for landestandarder
Laravels indbyggede reserve går kun fra den aktive landestandard til fallback_locale – der er intet mellemtrin. En pt-BR-bruger med en manglende nøgle ser engelsk i stedet for den udmærkede pt-PT-oversættelse. laravel-locale-chain løser dette ved at flette oversættelser rekursivt fra en konfigurerbar reserverækkefølge ved indlæ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>Automatiser oversættelser
Når din Laravel i18n-opsætning er færdig, kan du oversætte dine landestandardfiler med AI. Peg din AI-assistent mod kildelandestandardfilen eller brug i18n Agent CLI i din CI/CD-pipeline. Både PHP- og JSON-oversættelsesfiler understøttes.
// 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 -> enAlmindelige faldgruber
Hardkodet entals-/flertalslogik
JSON-oversættelser bruger ikke reservelandestandarden
Blanding af PHP og JSON uden at forstå forrang
Prøv i18n Agent nu
Slip din oversættelsesfil her
JSON, YAML, PO, XML, CSV, Markdown, Properties
eller klik for at vælge en fil
Målsprog