Laravel is een applicatie die is ontworpen om lokaal te zijn, om zich aan te passen aan verschillende talen en culturen. Lokalisatie stemt geïnternationaliseerde applicaties af op een specifieke taal door middel van vertaling.
localhost
. Zo niet, vervang dan localhost
met uw eigen domeinnaam of IP-adres (afhankelijk van uw installatie).In Laravel kunnen we, net als in veel andere frameworks, vertalingen voor verschillende talen opslaan in aparte bestanden. Er zijn twee manieren om Laravel-vertaalbestanden te organiseren:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Voor talen die per territorium verschillen, moet u ze een naam geven directory/file
van de taal volgens ISO 15897. Voor Brits Engels zou u bijvoorbeeld gebruiken en_GB
in plaats van en-gb
. In dit artikel concentreren we ons op de tweede benadering, maar hetzelfde geldt voor de eerste (behalve hoe vertaalsleutels worden genoemd en opgehaald).
Laten we nu naar de resources/views/welcome.blade.php
bestand en vervang de inhoud van het body
tag met de onze, zoals zo:
<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>
We beginnen met het voorbereiden van ons welkomstbericht voor lokalisatie, wat heel eenvoudig is in Laravel. Het enige wat je hoeft te doen is de tekst “Welkom op onze website” te vervangen door de volgende code: {{ __('Welcome to our website') }}
. Dit zal Laravel instrueren om standaard "Welkom op onze website" weer te gevendefinite en zoek naar vertalingen van deze string als een andere taal dan Engels is ingesteld (daar komen we later op terug). Engels wordt ingesteld als de standaardtaaldefieinde van onze app, dus standaardinstellingdefiAan het einde zullen we gewoon de tekst "Welkom op onze website" weergeven. Als de locale anders is, zullen we proberen de overeenkomende vertaling te vinden en deze zal zo gemaakt worden.
Maar hoe weet Laravel wat de huidige taal is of welke talen beschikbaar zijn in de applicatie? Het doet dit door te kijken naar de lokale configuratie in de app config/app.php
. Open dit bestand en zoek naar deze twee associatieve arraysleutels:
/*
|--------------------------------------------------------------------------
| 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',
De beschrijvingen boven de toetsen zouden voor zichzelf moeten spreken, maar in het kort, de sleutel locale
bevat de lokale predefieinde van uw toepassing (tenminste, als er geen andere locale is ingesteld in de code). En de fallback_locale
het wordt geactiveerd voor het geval we een niet-bestaande landinstelling in onze applicatie instellen.
Terwijl we dit bestand open hebben, laten we voor ons gemak een nieuwe sleutel toevoegen met een lijst van alle landinstellingen die onze applicatie ondersteunt. We zullen dit later gebruiken bij het toevoegen van een lokale switcher. Dit is echter een optionele taak, aangezien Laravel dit niet van ons vereist.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Nu ondersteunt onze applicatie drie talen: Engels, Italiaans en Frans.
Nu we alle locaties hebben vastgesteld waarmee we zullen werken, kunnen we doorgaan met het vertalen van ons welkomstbericht.defiavond.
Laten we beginnen met het toevoegen van nieuwe lokalisatiebestanden aan de map resources/lang
. Maak eerst een bestand aan resources/lang/it.json
en voeg de overeenkomstige vertalingen als volgt toe:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Maak vervolgens een bestand aan resources/lang/fr.json
:
{
"Welkom op onze website": "Welkom op onze website"
}
Zoals je ziet verwijzen we altijd naar het voorberichtdefinito die we in het bestand hebben toegevoegd welcome.blade.php
(welke was {{ __('Welcome to our website') }}
). De reden waarom we geen bestand hoeven aan te maken en.json
het is omdat Laravel al weet welke berichten we doorgeven door vooraf in te stellendefiklaar met de functie __()
ze zijn voor onze lokale predefinito nl.
Op dit moment weet Laravel niet hoe hij de locatie moet wijzigen, dus laten we voorlopig de vertalingen direct in het pad doen. Wijzig het welkomstpad voorafdefiafgewerkt zoals hieronder getoond:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
We kunnen nu onze website bezoeken en een van de beschikbare talen specificeren als het eerste padsegment: bijvoorbeeld localhost/ru
o localhost/fr
. U zou de gelokaliseerde inhoud moeten zien. Als u een niet-ondersteunde landinstelling opgeeft of helemaal geen landinstelling specificeert, zal Laravel gebruiken en
standaarddefinee.
Het wijzigen van de landinstelling voor elke sitelink is misschien niet wat u wilt, en het ziet er esthetisch misschien niet zo schoon uit. Daarom doen we de taalinstelling via een speciale taalwisselaar en gebruiken we de gebruikerssessie om de vertaalde inhoud weer te geven. Maak daarom een nieuwe middleware aan in het app/Http/Middleware/Localization.php
bestand of door te draaien 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);
}
}
Deze middleware zal Laravel instrueren om de door de gebruiker geselecteerde locale te gebruiken als deze selectie aanwezig is in de sessie.
Aangezien we dit bij elk verzoek moeten doen, moeten we het ook toevoegen aan de pre-middleware-stackdefibinnen geëindigd app/http/Kernel.php
de web
middleware-groep:
* 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 */
],
Vervolgens moeten we een pad toevoegen om de landinstelling te wijzigen. We gebruiken een sluitpad, maar je kunt precies dezelfde code in je controller gebruiken als je wilt:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Vergeet ook niet de locale-schakelaar te verwijderen die eerder is toegevoegd in ons pre-welkomstpaddefiavond:
Route::get('/', function () {
return view('welcome');
});
Zodra dit is gebeurd, is de enige manier voor de gebruiker om de momenteel ingestelde taal te wijzigen, door deze in te voeren localhost/language/{locale}
. De locale
selectie wordt opgeslagen binnen de sessie en zal gebruikers omleiden naar waar ze vandaan kwamen (controleer de Localization
middle ware). Ga naar om het te proberen localhost/language/ru
(zolang uw sessiecookie aanwezig is in uw browser) en u ziet de vertaalde inhoud. U kunt vrij rondlopen op de website of proberen de pagina te vernieuwen en ervoor te zorgen dat de geselecteerde taal behouden blijft.
Nu moeten we iets maken waarop de gebruiker kan klikken om de taal te wijzigen in plaats van handmatig lokale codes in de URL in te voeren. Om dit te doen, voegen we een heel eenvoudige taalcontrole toe. Maak daarom een nieuwe aan resources/views/partials/language_switcher.blade.php
bestand met de volgende code:
<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>
Neem de nieuw gemaakte switcher op in de "welkom" -weergave:
<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>
april il app/Providers/AppServiceProvider.php
bestand en voeg de code toe om te delen wanneer onze taalwisselaar wordt samengesteld. We zullen met name de huidige locale delen die toegankelijk is als een bestand {{ $current_locale }}
.
We gaan vooral werken met resources/views/welcome.blade.php
, dus alles moet in onze welkome weergave gebeuren, tenzij anders aangegeven.
Laten we bijvoorbeeld hallo zeggen tegen onze denkbeeldige gebruiker (Amanda) in plaats van alleen een generiek bericht weer te geven:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Merk op dat we de naam gebruikten met de eerste letter in kleine letters, maar de tijdelijke aanduiding met de eerste letter in hoofdletters. Op deze manier kan Laravel u helpen om het eigenlijke woord automatisch in hoofdletters te schrijven. Dit gebeurt als de tijdelijke aanduiding begint met een hoofdletter, bijvoorbeeld :Name
produceert "Caroline" of een volledig hoofdletterwoord, :NAME
, produceert “CAROLINE”.
We werken ook onze vertaalbestanden bij resources/lang/fr.json
e resources/lang/it.json
, aangezien we op dit moment alleen de Engelse versie zullen zien omdat de vertaalsleutels niet overeenkomen met de vertalingen.
Frans:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italiaans:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Laten we een nieuwe alinea tekst toevoegen om meervoud in actie te zien.
Om meervoud uit te voeren, moet u de functie gebruiken trans_choice
in plaats van __()
, bijvoorbeeld:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Zoals je kunt zien, worden meervoudsvormen gescheiden door een a |
.
Wat als we meerdere meervoudsvormen nodig hebben?
Dit is ook mogelijk:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
In dit geval staan we nummers toe 0
, 1
En 2
a 19
, en tot slot vanaf 20. U kunt natuurlijk zoveel regels toevoegen als u nodig heeft.
Dus wat als we de tijdelijke aanduidingen in onze meervoudsvormen willen?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
We kunnen indien nodig ook de telling gebruiken die is doorgegeven in `trans_choice` met behulp van een tijdelijke aanduiding :count
speciaal:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Vergeet ten slotte niet uw vertaalbestanden bij te werken met eventuele wijzigingen die u in de basisvertaling hebt aangebracht.
Italiaans:
{
"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"
}
Frans:
{
"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"
}
Om data te lokaliseren, we zullen de kracht van benutten Carbon Fibre , die standaard bij Laravel wordt geleverddefinita. Bekijk de Carbon documentatie ; je kunt veel interessante dingen doen. We kunnen bijvoorbeeld onze locale instellen met datum- en tijdregels.
Voor ons eenvoudige voorbeeld tonen we de huidige datum gelokaliseerd voor de geselecteerde taal. In onze routes/web.php
, werken we het pad van de welkomstpagina bij en geven we het gelokaliseerde datumbericht door aan het onze view
welkom:
<?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
]);
});
Laten we updaten resources/views/welcome.blade.php
datumweergave toevoegen, zoals zo:
{{ __('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 }}
Proberen de taal op de startpagina van te wijzigen localhost
, zullen we zien dat de datums nu gelokaliseerd zijn, bijvoorbeeld:
In verschillende landen gebruiken mensen verschillende notaties om getallen weer te geven, bijvoorbeeld:
Om deze verschillen in uw Laravel-app weer te geven, kunt u daarom gebruiken Nummeropmaak op de volgende manier:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
U kunt het nummer ook in een bepaalde taal schrijven en iets weergeven als "honderddrieëntwintigduizend honderddrieëntwintig komma één twee":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Bovendien kunt u met NumberFormatter eenvoudig valuta's lokaliseren, bijvoorbeeld:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Dus voor fr
je zult euro's zien, terwijl voor en_US
de valuta zal in Amerikaanse dollars zijn.
Ercole Palmeri
Microsoft Excel is de referentietool voor data-analyse, omdat het veel mogelijkheden biedt voor het organiseren van datasets,…
Walliance, SIM en platform behoren sinds 2017 tot de koplopers in Europa op het gebied van Real Estate Crowdfunding, kondigt de voltooiing aan…
Filament is een "versneld" Laravel-ontwikkelingsframework dat verschillende full-stack-componenten biedt. Het is ontworpen om het proces van…
«Ik moet terugkeren om mijn evolutie te voltooien: ik zal mezelf in de computer projecteren en pure energie worden. Eenmaal gesetteld…
Google DeepMind introduceert een verbeterde versie van zijn kunstmatige-intelligentiemodel. Het nieuwe, verbeterde model biedt niet alleen…
Laravel, beroemd om zijn elegante syntaxis en krachtige functies, biedt ook een solide basis voor modulaire architectuur. Daar…
Cisco en Splunk helpen klanten hun reis naar het Security Operations Center (SOC) van de toekomst te versnellen met…
Ransomware heeft het nieuws de afgelopen twee jaar gedomineerd. De meeste mensen weten heel goed dat aanvallen...