Skip to main content

Laravel i18n: Πλήρης οδηγός διεθνοποίησης και τοπικής προσαρμογής

Από το πρώτο αρχείο locale έως την παραγωγή: ρυθμίστε το σύστημα μετάφρασης του Laravel, χειριστείτε τον πληθυντικό αριθμό, διορθώστε το σφάλμα εναλλακτικής γλώσσας του JSON και προσθέστε έξυπνες αλυσίδες εναλλακτικών locale για τοπικές παραλλαγές.

1

Κατανοήστε το σύστημα μετάφρασης του Laravel

Το Laravel διαθέτει ενσωματωμένο σύστημα μετάφρασης που υποστηρίζει δύο μορφές αρχείων: πίνακες PHP και JSON. Τα αρχεία PHP χρησιμοποιούν ένθετα κλειδιά οργανωμένα ανά λειτουργία (auth.failed, validation.required). Τα αρχεία JSON χρησιμοποιούν ως κλειδί τη συμβολοσειρά της γλώσσας προέλευσης, κάτι που είναι απλούστερο αλλά δεν υποστηρίζει ένθεση.

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
Το σύστημα μετάφρασης του Laravel βρίσκεται στον κατάλογο lang/ (Laravel 9+) ή resources/lang/ (Laravel 8 και παλαιότερες εκδόσεις). Το framework εντοπίζει αυτόματα τον κατάλογο. Αν υπάρχουν και οι δύο, το lang/ έχει προτεραιότητα.
2

Ρυθμίστε τις επιλογές locale

Ορίστε το προεπιλεγμένο locale και το εναλλακτικό locale της εφαρμογής σας στο config/app.php. Το εναλλακτικό locale χρησιμοποιείται όταν λείπει ένα κλειδί μετάφρασης από το ενεργό locale. Ρυθμίστε τα υποστηριζόμενα locale της εφαρμογής σας και προσθέστε middleware που εντοπίζει και ορίζει το προτιμώμενο locale του χρήστη.

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

Χρησιμοποιήστε τις συναρτήσεις μετάφρασης

Το Laravel παρέχει τρεις τρόπους μετάφρασης συμβολοσειρών: τη βοηθητική συνάρτηση __() (συνιστάται), τη συνάρτηση trans() και την οδηγία Blade @lang. Και οι τρεις δέχονται το κλειδί μετάφρασης και προαιρετικές παραμέτρους αντικατάστασης. Χρησιμοποιήστε το __() σε κώδικα PHP και πρότυπα Blade και το @lang στο Blade όταν δεν χρειάζεται διαφυγή του 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',
    ],
];
Προτιμήστε το __() αντί του trans() σε νέο κώδικα. Το __() λειτουργεί με αρχεία μετάφρασης PHP και JSON, ενώ το trans() λειτουργεί μόνο με αρχεία PHP. Η οδηγία @lang ισοδυναμεί με το {'{ __() }'} στα πρότυπα Blade, αλλά έχει λίγο καθαρότερη σύνταξη.
4

Χειριστείτε τον πληθυντικό αριθμό

Το Laravel χρησιμοποιεί σύνταξη με κατακόρυφες γραμμές για τις μορφές πληθυντικού. Η απλούστερη μορφή είναι 'apples' => 'There is one apple|There are many apples'. Για ρητά εύρη, χρησιμοποιήστε 'apples' => '{0} No apples|{1} One apple|[2,*] :count apples'. Η βοηθητική συνάρτηση trans_choice() ή η Str::plural() επιλέγει τη σωστή μορφή βάσει του πλήθους.

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"
}
Ο ενσωματωμένος χειρισμός πληθυντικού του Laravel καλύπτει σωστά μόνο απλούς κανόνες one/other για τις περισσότερες γλώσσες. Για γλώσσες με σύνθετες μορφές πληθυντικού (τα Αραβικά έχουν 6, τα Ρωσικά 4 και τα Πολωνικά 3), πρέπει να ορίσετε όλες τις απαιτούμενες κατηγορίες πληθυντικού CLDR. Διαφορετικά, οι χρήστες βλέπουν γραμματικά λανθασμένο κείμενο.
5

Προσθέστε αλυσίδες εναλλακτικών locale

Η ενσωματωμένη εναλλακτική γλώσσα του Laravel μεταβαίνει μόνο από το ενεργό locale στο fallback_locale — δεν υπάρχει ενδιάμεσο βήμα. Ένας χρήστης του pt-BR, όταν λείπει ένα κλειδί, βλέπει Αγγλικά αντί για την απολύτως κατάλληλη μετάφραση pt-PT. Το laravel-locale-chain διορθώνει το πρόβλημα συγχωνεύοντας σε βάθος τις μεταφράσεις μιας ρυθμιζόμενης αλυσίδας εναλλακτικών locale κατά τη φόρτωση.

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

Αυτοματοποιήστε τις μεταφράσεις

Αφού ολοκληρώσετε τη ρύθμιση i18n του Laravel, μεταφράστε τα αρχεία locale με τη χρήση AI. Υποδείξτε στον βοηθό AI το αρχείο του locale προέλευσης ή χρησιμοποιήστε το i18n Agent CLI στο pipeline CI/CD. Υποστηρίζονται αρχεία μετάφρασης PHP και JSON.

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
Μεταφράζετε σταδιακά — όταν προσθέτετε νέα κλειδιά, μεταφράζετε μόνο τις διαφορές αντί να δημιουργείτε ξανά όλα τα αρχεία. Έτσι διατηρούνται οι μεταφράσεις που έχουν ελεγχθεί από ανθρώπους και αποφεύγονται περιττές αλλαγές.

Συνήθεις παγίδες

Σκληροκωδικοποιημένη λογική ενικού και πληθυντικού

Η χρήση του $count == 1 ? 'item' : 'items' αντί του trans_choice() αποτυγχάνει σε γλώσσες όπου το 0 αντιμετωπίζεται ως ενικός (Γαλλικά), όπου υπάρχουν 3 ή περισσότερες μορφές πληθυντικού (Ρωσικά, Πολωνικά) ή όπου υπάρχουν 6 μορφές (Αραβικά). Χρησιμοποιείτε πάντα τη σύνταξη πληθυντικού του Laravel και ορίζετε όλες τις απαιτούμενες μορφές.

Οι μεταφράσεις JSON δεν χρησιμοποιούν εναλλακτικό locale

Το fallback_locale του Laravel λειτουργεί μόνο για αρχεία μετάφρασης PHP. Οι μεταφράσεις JSON χρησιμοποιούν ως κλειδί τη συμβολοσειρά προέλευσης, οπότε μια μετάφραση που λείπει επιστρέφει το ίδιο το κλειδί (το αγγλικό κείμενο), αντί να αναζητείται στο εναλλακτικό locale. Αυτό σημαίνει ότι οι μεταφράσεις JSON δεν διαθέτουν πραγματική εναλλακτική γλώσσα. Χρησιμοποιήστε το laravel-locale-chain για να το διορθώσετε.

Ανάμειξη PHP και JSON χωρίς κατανόηση της προτεραιότητας

Όταν το ίδιο κλειδί υπάρχει σε αρχεία PHP και JSON, η PHP έχει προτεραιότητα. Αυτό μπορεί να προκαλέσει σύγχυση, καθώς η ενημέρωση του αρχείου JSON δεν έχει αποτέλεσμα επειδή το αρχείο PHP το επισκιάζει. Επιλέξτε μία μορφή ανά χώρο ονομάτων λειτουργίας και χρησιμοποιείτε την με συνέπεια.

Δοκιμάστε τώρα το i18n Agent

Αφήστε εδώ το αρχείο μετάφρασής σας

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

ή κάντε κλικ για να επιλέξετε αρχείο

Γλώσσες-στόχοι

Δεν απαιτείται εγγραφήΆμεση εκτίμηση

Συχνές ερωτήσεις για το Laravel i18n