Skip to main content

Laravel i18n: Heildarhandbók um alþjóðavæðingu og staðfærslu

Frá fyrstu staðfærsluskrá til rekstrarumhverfis: grunnstilltu þýðingarkerfi Laravel, meðhöndlaðu fleirtölumyndir, lagaðu JSON-varaleiðarvilluna og bættu við snjöllum staðfærsluvarakeðjum fyrir svæðisbundin afbrigði.

1

Kynntu þér þýðingarkerfi Laravel

Laravel kemur með innbyggðu þýðingarkerfi sem styður tvö skráarsnið: PHP-fylki og JSON. PHP-skrár nota falda lykla sem eru flokkaðir eftir eiginleikum (auth.failed, validation.required). JSON-skrár nota upprunastrenginn sem lykil, sem er einfaldara en styður ekki földun.

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
Þýðingarkerfi Laravel er í möppunni lang/ (Laravel 9+) eða resources/lang/ (Laravel 8 og eldri). Umgjörðin finnur möppuna sjálfkrafa. Ef báðar eru til hefur lang/ forgang.
2

Grunnstilltu staðfærslustillingar

Stilltu sjálfgefna staðfærslu forritsins og varastaðfærslu í config/app.php. Varastaðfærslan er notuð þegar þýðingarlykil vantar í virku staðfærsluna. Grunnstilltu studdar staðfærslur fyrir forritið og bættu við millibúnaði sem greinir og stillir kjörstaðfærslu notandans.

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

Notaðu þýðingarföll

Laravel býður þrjár leiðir til að þýða strengi: hjálparfallið __() (mælt með), fallið trans() og Blade-tilskipunina @lang. Allar þrjár taka við þýðingarlyklinum og valfrjálsum útskiptiviðföngum. Notaðu __() í PHP-kóða og Blade-sniðmátum og @lang í Blade þegar þú þarft ekki að sérkóða HTML.

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',
    ],
];
Veldu __() fremur en trans() í nýjum kóða. __() virkar bæði með PHP- og JSON-þýðingarskrám en trans() virkar aðeins með PHP-skrám. Tilskipunin @lang jafngildir {'{ __() }'} í Blade-sniðmátum en hefur örlítið snyrtilegri setningagerð.
4

Meðhöndlaðu fleirtölumyndir

Laravel notar pípuskipta setningagerð fyrir fleirtölumyndir. Einfaldasta myndin er 'apples' => 'Það er eitt epli|Það eru mörg epli'. Fyrir tiltekin bil skaltu nota 'apples' => '{0} Engin epli|{1} Eitt epli|[2,*] :count epli'. Hjálparfallið trans_choice() eða Str::plural() velur rétta mynd út frá fjöldanum.

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"
}
Innbyggð fleirtölumeðhöndlun Laravel ræður aðeins rétt við einfaldar reglur um eintölu og aðrar myndir í flestum tungumálum. Fyrir tungumál með flóknar fleirtölumyndir (arabíska hefur 6, rússneska 4 og pólska 3) þarftu að skilgreina alla nauðsynlega CLDR-fleirtöluflokka. Annars sjá notendur málfræðilega rangan texta.
5

Bættu við staðfærsluvarakeðjum

Innbyggða varaleið Laravel fer aðeins frá virku staðfærslunni til fallback_locale — ekkert milliskref er til staðar. Notandi með pt-BR sem vantar lykil sér ensku í stað fullgildrar pt-PT-þýðingar. laravel-locale-chain lagar þetta með því að djúpsameina þýðingar úr grunnstillanlegri varakeðju við innlestur.

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

Sjálfvirknivæddu þýðingar

Þegar Laravel i18n-uppsetningin er tilbúin skaltu þýða staðfærsluskrárnar með gervigreind. Beindu gervigreindaraðstoðinni að skrá frummálsins eða notaðu skipanalínuviðmót i18n Agent í CI/CD-vinnslurásinni. Bæði PHP- og JSON-þýðingarskrár eru studdar.

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
Þýddu í áföngum — þegar þú bætir við nýjum lyklum skaltu aðeins þýða mismuninn í stað þess að endurgera allar skrár. Þannig varðveitast þýðingar sem fólk hefur yfirfarið og óþarfa breytingaumfang minnkar.

Algengar gryfjur

Harðkóðuð eintölu- og fleirtölurökvísi

Notkun $count == 1 ? 'item' : 'items' í stað trans_choice() bregst í tungumálum þar sem 0 tekur eintölu (franska), þar sem fleirtölumyndirnar eru 3 eða fleiri (rússneska, pólska) eða þar sem myndirnar eru 6 (arabíska). Notaðu alltaf fleirtölusetningagerð Laravel og skilgreindu allar nauðsynlegar myndir.

JSON-þýðingar nota ekki varaleið

fallback_locale í Laravel virkar aðeins fyrir PHP-þýðingarskrár. JSON-þýðingar nota upprunastrenginn sem lykil, þannig að þýðing sem vantar skilar lyklinum sjálfum (enska textanum) í stað þess að leita í varastaðfærslunni. JSON-þýðingar hafa því enga raunverulega staðfærsluvaraleið. Notaðu laravel-locale-chain til að laga þetta.

PHP og JSON blandað saman án þess að forgangsröðin sé skilin

Þegar sami lykill er bæði í PHP- og JSON-skrám hefur PHP forgang. Þetta getur valdið ruglingi þegar uppfærsla JSON-skrárinnar hefur engin áhrif vegna þess að PHP-skráin skyggir á hana. Veldu eitt snið fyrir hvert eiginleikanafnrými og haltu þig við það.

Prófaðu i18n Agent núna

Slepptu þýðingarskránni þinni hér

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

eða smelltu til að fletta

Markmál

Engin skráning nauðsynlegKostnaðaráætlun samstundis

Algengar spurningar um Laravel i18n