Skip to main content

Laravel i18n: teljes nemzetköziesítési és lokalizációs útmutató

Az első területifájltól az éles környezetig: állítsa be a Laravel fordítási rendszerét, kezelje a többes számot, javítsa a JSON-tartalék hibáját, és adjon intelligens láncokat a regionális változatokhoz.

1

A Laravel fordítási rendszerének megértése

A Laravel beépített fordítási rendszere két fájlformátumot támogat: PHP-tömböket és JSON-t. A PHP-fájlok funkciók szerint rendezett, egymásba ágyazott kulcsokat használnak (auth.failed, validation.required). A JSON a forrásszöveget használja kulcsként, ami egyszerűbb, de nem támogat beágyazást.

Terminal
composer create-project laravel/laravel my-app
cd my-app

# Laravel includes i18n out of the box
# No extra packages needed for basic usage
A Laravel fordítási rendszere a lang/ (Laravel 9+) vagy resources/lang/ (Laravel 8 és régebbi) könyvtárban található. A keretrendszer automatikusan felismeri. Ha mindkettő létezik, a lang/ élvez elsőbbséget.
2

Területi beállítások konfigurálása

Állítsa be az alkalmazás alapértelmezett és tartalékterületét a config/app.php fájlban. A tartalékot akkor használja, ha az aktív területről hiányzik egy kulcs. Adja meg a támogatott területeket, és middleware segítségével észlelje és állítsa be a felhasználó előnyben részesített területét.

config/app.php
// 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
// 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);
    }
}
3

Fordítási függvények használata

A Laravel három fordítási módot kínál: __() segédfüggvény (ajánlott), trans() függvény és @lang Blade-direktíva. Mindegyik fordítási kulcsot és választható helyettesítési paramétereket fogad. PHP-kódban és Blade-sablonokban __(), HTML escape-elés nélkül Blade-ben @lang szükséges.

lang/en/messages.php
// 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',
    ],
];
Új kódban részesítse előnyben a __() függvényt a trans() helyett. A __() PHP- és JSON-fordításfájlokkal is működik, a trans() csak PHP-val. Az @lang Blade-ben a {'{ __() }'} megfelelője, kissé tisztább szintaxissal.
4

Többes szám kezelése

A Laravel csőjellel elválasztott alakokat használ. Egyszerű forma: 'apples' => 'There is one apple|There are many apples'. Kifejezett tartományokhoz: 'apples' => '{0} No apples|{1} One apple|[2,*] :count apples'. A trans_choice() segéd vagy Str::plural() a szám alapján választ.

lang/en.json
// 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"
}
A Laravel beépített többesszám-kezelése a legtöbb nyelvnél csak az egyszerű one/other szabályokat kezeli helyesen. Összetett nyelveknél (arab 6, orosz 4, lengyel 3 alak) minden szükséges CLDR-kategóriát meg kell adnia. Nélkülük nyelvtanilag hibás szöveg jelenik meg.
5

Területi tartalékláncok hozzáadása

A Laravel beépített tartaléka csak az aktív területről a fallback_locale értékre vált — nincs köztes lépés. Egy hiányzó kulccsal találkozó pt-BR felhasználó a megfelelő pt-PT helyett angolt lát. A laravel-locale-chain ezt beállítható láncból betöltéskor mélyen egyesített fordításokkal javítja.

resources/views/example.blade.php
{{-- 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>
6

Fordítások automatizálása

A Laravel i18n beállítása után fordítsa le területifájljait mesterséges intelligenciával. Irányítsa az MI-segédet a forrásfájlra, vagy használja az i18n Agent parancssori eszközét a CI/CD-folyamatban. PHP- és JSON-fájlokat is támogat.

config/locale-chain.php
// 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 -> en
Fordítson fokozatosan — új kulcsok hozzáadásakor csak a különbséget fordítsa le. Így megmaradnak az ember által ellenőrzött fordítások, és elkerülhető a felesleges változtatási zaj.

Gyakori buktatók

Beégetett egyes-/többesszám-logika

A $count == 1 ? 'item' : 'items' használata trans_choice() helyett hibás ott, ahol a 0 egyes szám (francia), 3 vagy több alak van (orosz, lengyel), illetve 6 alak van (arab). Mindig a Laravel többesszám-szintaxisát használja, és adjon meg minden szükséges alakot.

A JSON-fordítások nem váltanak tartalékra

A Laravel fallback_locale csak PHP-fordításfájloknál működik. A JSON a forrásszöveget használja kulcsként, ezért hiányzó fordításnál a kulcsot (az angol szöveget) adja vissza a tartalékterület keresése helyett. Nincs valódi területi tartalék. Javításához használja a laravel-locale-chain csomagot.

PHP és JSON keverése az elsőbbség ismerete nélkül

Ha ugyanaz a kulcs PHP- és JSON-fájlban is létezik, a PHP élvez elsőbbséget. Ez zavaró lehet: a JSON frissítése hatástalan, mert a PHP elfedi. Funkciónévterenként válasszon egy formátumot, és használja következetesen.

Try i18n Agent Now

Drop your translation file here

JSON, YAML, PO, XML, CSV, Markdown, Properties

or click to browse

Target languages

No signup requiredInstant estimate

Laravel i18n – gyakori kérdések