Το Laravel είναι μια εφαρμογή σχεδιασμένη να είναι τοπική, να προσαρμόζεται σε διάφορες γλώσσες και πολιτισμούς. Η τοπική προσαρμογή προσαρμόζει διεθνοποιημένες εφαρμογές σε μια συγκεκριμένη γλώσσα μέσω μετάφρασης.
localhost
. Εάν όχι, αντικαταστήστε localhost
με το δικό σας όνομα τομέα ή διεύθυνση IP (ανάλογα με την εγκατάστασή σας).Στο Laravel, όπως και σε πολλά άλλα πλαίσια, μπορούμε να αποθηκεύσουμε μεταφράσεις για διαφορετικές γλώσσες σε ξεχωριστά αρχεία. Υπάρχουν δύο τρόποι οργάνωσης αρχείων μετάφρασης Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Για γλώσσες που διαφέρουν ανά περιοχή, θα πρέπει να τις ονομάσετε directory/file
της γλώσσας σύμφωνα με το ISO 15897. Για παράδειγμα, για τα αγγλικά του Ηνωμένου Βασιλείου θα χρησιμοποιούσατε en_GB
αντί en-gb
. Σε αυτό το άρθρο, θα εστιάσουμε στη δεύτερη προσέγγιση, αλλά το ίδιο ισχύει και για την πρώτη (εκτός από το πώς ονομάζονται και ανακτώνται τα κλειδιά μετάφρασης).
Τώρα, ας πάμε στο resources/views/welcome.blade.php
αρχείο και αντικαταστήστε τα περιεχόμενα του body
κάντε ετικέτα με τα δικά μας, όπως:
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
Welcome to our website
</div>
</div>
</div>
</body>
Θα ξεκινήσουμε προετοιμάζοντας το μήνυμα καλωσορίσματος τοπικής προσαρμογής, το οποίο είναι πολύ εύκολο στη Laravel. Το μόνο που έχετε να κάνετε είναι να αντικαταστήσετε το κείμενο «Καλώς ήρθατε στον ιστότοπό μας» με τον ακόλουθο κωδικό: {{ __('Welcome to our website') }}
. Αυτό θα δώσει εντολή στη Laravel να εμφανίζει από προεπιλογή το "Welcome to our website".definite και αναζητήστε μεταφράσεις αυτής της συμβολοσειράς εάν έχει οριστεί μια γλώσσα διαφορετική από την αγγλική (θα το δούμε αργότερα). Τα αγγλικά θα οριστούν ως προεπιλεγμένη γλώσσαdefinish της εφαρμογής μας, έτσι από προεπιλογήdefiΣτο τέλος θα εμφανίσουμε απλώς το κείμενο «Καλώς ήρθατε στην ιστοσελίδα μας». Εάν η τοπική ρύθμιση είναι διαφορετική, θα προσπαθήσουμε να βρούμε την αντίστοιχη μετάφραση και θα δημιουργηθεί σε λίγο.
Πώς όμως γνωρίζει η Laravel ποια είναι η τρέχουσα γλώσσα ή ποιες γλώσσες είναι διαθέσιμες στην εφαρμογή; Αυτό το κάνει κοιτάζοντας την τοπική διαμόρφωση στην εφαρμογή config/app.php
. Ανοίξτε αυτό το αρχείο και αναζητήστε αυτά τα δύο συσχετιστικά κλειδιά πίνακα:
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
Οι περιγραφές που εμφανίζονται πάνω από τα κλειδιά θα πρέπει να είναι αυτονόητες, αλλά εν συντομία, το κλειδί locale
περιέχει την τοπική προdefinish της αίτησής σας (τουλάχιστον, εάν δεν έχει οριστεί άλλη τοπική ρύθμιση στον κώδικα). Και το fallback_locale
ενεργοποιείται σε περίπτωση που ορίσουμε ανύπαρκτη τοπική ρύθμιση στην εφαρμογή μας.
Ενώ έχουμε ανοιχτό αυτό το αρχείο, ας προσθέσουμε ένα νέο κλειδί για τη διευκόλυνσή μας που θα περιλαμβάνει όλες τις τοπικές ρυθμίσεις που θα υποστηρίζει η εφαρμογή μας. Θα το χρησιμοποιήσουμε αργότερα κατά την προσθήκη ενός τοπικού διακόπτη. Ωστόσο, αυτή είναι μια προαιρετική εργασία, καθώς η Laravel δεν απαιτεί από εμάς να την κάνουμε.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Τώρα η εφαρμογή μας υποστηρίζει τρεις γλώσσες: Αγγλικά, Ιταλικά και Γαλλικά.
Τώρα που έχουμε δημιουργήσει όλες τις τοπικές ρυθμίσεις με τις οποίες θα εργαστούμε, μπορούμε να προχωρήσουμε και να προχωρήσουμε στη μετάφραση του μηνύματος καλωσορίσματος πρινdefiνύχτα.
Ας ξεκινήσουμε προσθέτοντας νέα αρχεία τοπικής προσαρμογής στο φάκελο resources/lang
. Πρώτα, δημιουργήστε ένα αρχείο resources/lang/it.json
και προσθέστε τις αντίστοιχες μεταφράσεις, ως εξής:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Στη συνέχεια, δημιουργήστε ένα αρχείο resources/lang/fr.json
:
{
"Καλώς ήρθατε στην ιστοσελίδα μας": “Καλώς ήρθατε στον ιστότοπό μας”
}
Όπως μπορείτε να δείτε, αναφερόμαστε πάντα στο προ μήνυμαdefinito που προσθέσαμε στο αρχείο welcome.blade.php
(η οποία ήταν {{ __('Welcome to our website') }}
). Ο λόγος για τον οποίο δεν χρειάζεται να δημιουργήσουμε ένα αρχείο en.json
είναι επειδή η Laravel γνωρίζει ήδη ποια μηνύματα περνάμε με προρύθμισηdefiτελείωσε στη λειτουργία __()
είναι για την τοπική μας πρdefinito en.
Σε αυτό το σημείο, η Laravel δεν ξέρει πώς να αλλάξει τις τοπικές ρυθμίσεις, οπότε προς το παρόν, ας κάνουμε τις μεταφράσεις απευθείας μέσα στη διαδρομή. Τροποποιήστε τη διαδρομή καλωσορίσματος πρινdefiλήφθηκε όπως φαίνεται παρακάτω:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Μπορούμε τώρα να επισκεφτούμε τον ιστότοπό μας, προσδιορίζοντας οποιαδήποτε από τις διαθέσιμες γλώσσες ως πρώτο τμήμα διαδρομής: για παράδειγμα, localhost/ru
o localhost/fr
. Θα πρέπει να δείτε το τοπικό περιεχόμενο. Σε περίπτωση που καθορίσετε μια μη υποστηριζόμενη τοπική ρύθμιση ή δεν καθορίσετε μια τοπική ρύθμιση, η Laravel θα χρησιμοποιήσει en
από προεπιλογήdefiνίτα.
Η αλλαγή της τοπικής ρύθμισης για κάθε σύνδεσμο ιστότοπου μπορεί να μην είναι αυτό που θέλετε και μπορεί να μην φαίνεται τόσο καθαρό από αισθητική άποψη. Γι' αυτό θα κάνουμε τη ρύθμιση γλώσσας μέσω ενός ειδικού εναλλάκτη γλώσσας και θα χρησιμοποιήσουμε τη συνεδρία χρήστη για να εμφανίσουμε το μεταφρασμένο περιεχόμενο. Επομένως, δημιουργήστε ένα νέο ενδιάμεσο λογισμικό μέσα στο app/Http/Middleware/Localization.php
αρχείο ή εκτελώντας artisan make:middleware Localization
.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class Localization
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
Αυτό το ενδιάμεσο λογισμικό θα δώσει εντολή στη Laravel να χρησιμοποιήσει την τοπική γλώσσα που έχει επιλέξει ο χρήστης εάν αυτή η επιλογή υπάρχει στη συνεδρία.
Εφόσον χρειάζεται να γίνει αυτό σε κάθε αίτημα, πρέπει επίσης να το προσθέσουμε στη στοίβα προ του ενδιάμεσου λογισμικούdefiτελείωσε μέσα app/http/Kernel.php
για το web
ομάδα ενδιάμεσου λογισμικού:
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Localization::class, /* <--- add this */
],
Στη συνέχεια, πρέπει να προσθέσουμε μια διαδρομή για να αλλάξουμε τις τοπικές ρυθμίσεις. Χρησιμοποιούμε μια διαδρομή κλεισίματος, αλλά μπορείτε να χρησιμοποιήσετε ακριβώς τον ίδιο κωδικό μέσα στον ελεγκτή σας, αν θέλετε:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Επίσης, μην ξεχάσετε να αφαιρέσετε την εναλλαγή τοπικής ρύθμισης που είχε προστεθεί προηγουμένως στη διαδρομή προ του καλωσορίσματοςdefinite:
Route::get('/', function () {
return view('welcome');
});
Μόλις γίνει αυτό, ο μόνος τρόπος για να αλλάξει ο χρήστης την τρέχουσα ρυθμισμένη γλώσσα είναι η εισαγωγή localhost/language/{locale}
. ο locale
Η επιλογή θα αποθηκευτεί εντός της συνεδρίας και θα ανακατευθύνει τους χρήστες από όπου προέρχονται (ελέγξτε το Localization
ενδιάμεσο λογισμικό). Για να το δοκιμάσετε, πηγαίνετε στο localhost/language/ru
(εφόσον υπάρχει το cookie συνεδρίας στο πρόγραμμα περιήγησής σας) και θα δείτε το μεταφρασμένο περιεχόμενο. Μπορείτε να μετακινηθείτε ελεύθερα στον ιστότοπο ή να προσπαθήσετε να ανανεώσετε τη σελίδα και να δείτε ότι η επιλεγμένη γλώσσα διατηρείται.
Τώρα πρέπει να δημιουργήσουμε κάτι στο οποίο ο χρήστης μπορεί να κάνει κλικ για να αλλάξει τη γλώσσα αντί να εισάγει μη αυτόματα τοπικούς κωδικούς στη διεύθυνση URL. Για να γίνει αυτό, θα προσθέσουμε έναν πολύ απλό έλεγχο γλώσσας. Επομένως, δημιουργήστε ένα νέο resources/views/partials/language_switcher.blade.php
αρχείο με τον ακόλουθο κώδικα:
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
@foreach($available_locales as $locale_name => $available_locale)
@if($available_locale === $current_locale)
<span class="ml-2 mr-2 text-gray-700">{{ $locale_name }}</span>
@else
<a class="ml-1 underline ml-2 mr-2" href="language/{{ $available_locale }}">
<span>{{ $locale_name }}</span>
</a>
@endif
@endforeach
</div>
Συμπεριλάβετε τον εναλλάκτη που δημιουργήθηκε πρόσφατα στην προβολή "καλωσορίσματος":
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
@include('partials/language_switcher')
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
{{ __('Welcome to our website') }}
</div>
</div>
</div>
</body>
Ανοιξε το app/Providers/AppServiceProvider.php
αρχείο και προσθέστε τον κώδικα για κοινή χρήση όταν θα δημιουργηθεί η εναλλαγή γλώσσας. Συγκεκριμένα, θα κοινοποιήσουμε την τρέχουσα τοπική ρύθμιση στην οποία μπορείτε να προσπελάσετε ως αρχείο {{ $current_locale }}
.
Θα συνεργαστούμε κυρίως με resources/views/welcome.blade.php
, επομένως όλα πρέπει να συμβαίνουν κατά την άποψή μας, εκτός εάν ορίζεται διαφορετικά.
Για παράδειγμα, ας πούμε ένα γεια στον φανταστικό μας χρήστη (Amanda) αντί να εμφανίσουμε απλώς ένα γενικό μήνυμα:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Σημειώστε ότι χρησιμοποιήσαμε το όνομα με το πρώτο γράμμα σε πεζά, αλλά το σύμβολο κράτησης θέσης με το πρώτο γράμμα σε κεφαλαία. Με αυτόν τον τρόπο, η Laravel μπορεί να σας βοηθήσει να γράψετε αυτόματα κεφαλαία την πραγματική λέξη. Αυτό θα συμβεί εάν το σύμβολο κράτησης θέσης ξεκινά με ένα κεφαλαίο γράμμα, για παράδειγμα, :Name
παράγει "Caroline" ή μια λέξη με πλήρη κεφαλαία, :NAME
, παράγει την “CAROLINE”.
Ενημερώνουμε επίσης τα μεταφραστικά μας αρχεία resources/lang/fr.json
e resources/lang/it.json
, καθώς αυτή τη στιγμή θα βλέπουμε μόνο την αγγλική έκδοση οπουδήποτε καθώς τα κλειδιά μετάφρασης δεν ταιριάζουν με τις μεταφράσεις.
Γαλλική γλώσσα:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Ιταλικό:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Για να δούμε τον πλουραλισμό στην πράξη, ας προσθέσουμε μια νέα παράγραφο κειμένου.
Για να εκτελέσετε πλουραλισμό, πρέπει να χρησιμοποιήσετε τη συνάρτηση trans_choice
αντί __()
, για παράδειγμα:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Όπως μπορείτε να δείτε, οι μορφές του πληθυντικού χωρίζονται με α |
.
Τώρα, τι γίνεται αν χρειαζόμαστε πολλαπλούς πληθυντικούς τύπους;
Αυτό είναι επίσης δυνατό:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Σε αυτήν την περίπτωση, επιτρέπουμε αριθμούς 0
, 1
, ε da 2
a 19
, και τέλος από τις 20 και μετά. Φυσικά, μπορείτε να προσθέσετε όσους κανόνες χρειάζεστε.
Τι γίνεται λοιπόν αν θέλουμε τα σύμβολα κράτησης θέσης στον πληθυντικό μας;
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Μπορούμε επίσης να χρησιμοποιήσουμε το πλήθος που μεταβιβάστηκε στο "trans_choice" εάν χρειάζεται χρησιμοποιώντας ένα σύμβολο κράτησης θέσης :count
ειδικός:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Τέλος, μην ξεχάσετε να ενημερώσετε τα αρχεία μετάφρασης με τυχόν αλλαγές που κάνατε στη βασική μετάφραση.
Ιταλικό:
{
"Welcome to our website, :Name": "Benvenuto nel nostro sito, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Nessuna mela|{1} C'è:count mela|[2,19] Ci sono :count mele"
}
Γαλλική γλώσσα:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name",
"{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples": "{0} Il n'y a pas de pommes|{1} Il n'y :form :count pomme|[2,19] Il y :form :count pommes"
}
Για να εντοπίσουμε ημερομηνίες, θα αξιοποιήσουμε τη δύναμη του άνθρακας , το οποίο έρχεται με Laravel από προεπιλογήdefiνίτα. Ελέγξτε το Τεκμηρίωση άνθρακα ; μπορείς να κάνεις πολλά ενδιαφέροντα πράγματα. Για παράδειγμα, μπορούμε να ορίσουμε την τοπική μας ρύθμιση με κανόνες ημερομηνίας και ώρας.
Για το απλό μας παράδειγμα, θα δείξουμε την τρέχουσα ημερομηνία προσαρμοσμένη για την επιλεγμένη γλώσσα. Στο δικό μας routes/web.php
, ενημερώνουμε τη διαδρομή της σελίδας καλωσορίσματος και μεταβιβάζουμε το μήνυμα της τοπικής ημερομηνίας στο δικό μας view
καλως ΗΡΘΑΤΕ:
<?php
Route::get('/', function () {
$today = \Carbon\Carbon::now()
->settings(
[
'locale' => app()->getLocale(),
]
);
// LL is macro placeholder for MMMM D, YYYY (you could write same as dddd, MMMM D, YYYY)
$dateMessage = $today->isoFormat('dddd, LL');
return view('welcome', [
'date_message' => $dateMessage
]);
});
Ας ενημερώσουμε resources/views/welcome.blade.php
προσθήκη εμφάνισης ημερομηνίας, όπως:
{{ __('Welcome to our website, :Name', ['name' => 'amanda']) }}
<br>
{{ trans_choice('{0} There :form :count apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
<br>
{{ $date_message }}
Προσπάθεια αλλαγής γλώσσας στην αρχική σελίδα του localhost
, θα δούμε ότι οι ημερομηνίες έχουν πλέον εντοπιστεί, για παράδειγμα:
Σε διαφορετικές χώρες, οι άνθρωποι χρησιμοποιούν διαφορετικές μορφές για να αναπαραστήσουν αριθμούς, για παράδειγμα:
Επομένως, για να αντικατοπτρίσετε αυτές τις διαφορές στην εφαρμογή Laravel, μπορείτε να χρησιμοποιήσετε NumberFormatter με τον εξής τρόπο:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Μπορείτε επίσης να γράψετε τον αριθμό σε μια συγκεκριμένη γλώσσα και να εμφανίσετε κάτι σαν "εκατόν είκοσι τρεις χιλιάδες εκατόν είκοσι τρία σημεία ένα δύο":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Επιπλέον, το NumberFormatter σάς επιτρέπει να εντοπίζετε εύκολα νομίσματα, για παράδειγμα:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Ετσι, για fr
θα δείτε Ευρώ, ενώ για en_US
το νόμισμα θα είναι σε δολάρια ΗΠΑ.
Ercole Palmeri
Η ανάπτυξη λεπτών κινητικών δεξιοτήτων μέσω του χρωματισμού προετοιμάζει τα παιδιά για πιο σύνθετες δεξιότητες όπως η γραφή. Να χρωματίσω…
Ο ναυτικός τομέας είναι μια πραγματική παγκόσμια οικονομική δύναμη, η οποία έχει προσανατολιστεί προς μια αγορά 150 δισεκατομμυρίων...
Την περασμένη Δευτέρα, οι Financial Times ανακοίνωσαν συμφωνία με το OpenAI. Η FT αδειοδοτεί την παγκόσμιας κλάσης δημοσιογραφία της…
Εκατομμύρια άνθρωποι πληρώνουν για υπηρεσίες ροής, πληρώνοντας μηνιαίες συνδρομές. Είναι κοινή γνώμη ότι…