Laravel is 'n toepassing wat ontwerp is om plaaslik te wees, om aan te pas by verskeie tale en kulture. Lokalisering pas geïnternasionaliseerde toepassings aan by 'n spesifieke taal deur vertaling.
localhost
. Indien nie, vervang localhost
met jou domeinnaam of IP-adres (afhangende van jou installasie).In Laravel, net soos in baie ander raamwerke, kan ons vertalings vir verskillende tale in aparte lêers stoor. Daar is twee maniere om Laravel-vertalingslêers te organiseer:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Vir tale wat volgens grondgebied verskil, moet jy die noem directory/file
van die taal volgens ISO 15897. Byvoorbeeld, vir Britse Engels sal jy gebruik en_GB
in plaas van en-gb
. In hierdie artikel sal ons op die tweede benadering fokus, maar dieselfde geld vir die eerste (met die uitsondering van hoe vertaalsleutels benoem en herwin word).
Nou, kom ons gaan na resources/views/welcome.blade.php
lêer en vervang die inhoud van die body
merk met ons s'n, soos volg:
<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>
Ons sal begin deur ons verwelkomingsboodskap vir lokalisering voor te berei, wat baie maklik in Laravel is. Al wat jy hoef te doen is om die "Welkom by ons webwerf" teks met die volgende kode te vervang: {{ __('Welcome to our website') }}
. Dit sal Laravel opdrag gee om "Welkom by ons webwerf" by verstek te vertoondefinita en soek vertalings van hierdie string as 'n ander taal as Engels gestel is (ons sal later daarby uitkom). Engels sal as die verstektaal gestel worddefiniteit van ons toepassing, dus by verstekdefinita sal ons bloot die teks "Welkom by ons webwerf" vertoon. As die plek anders is, sal ons probeer om die ooreenstemmende vertaling te soek wat binne 'n oomblik geskep sal word.
Maar hoe weet Laravel wat die huidige taal is of watter tale in die toepassing beskikbaar is? Dit doen dit deur na die plaaslike konfigurasie in die toepassing te kyk config/app.php
. Maak hierdie lêer oop en soek hierdie twee assosiatiewe skikkingsleutels:
/*
|--------------------------------------------------------------------------
| 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',
Die beskrywings wat bo die sleutels getoon word, moet selfverduidelikend wees, maar in kort, die sleutel locale
bevat die voorkamerdefinooi van jou aansoek (ten minste, indien geen ander plek in die kode gestel is nie). En die fallback_locale
dit word geaktiveer as ons 'n nie-bestaande kamer in ons toepassing stel.
Terwyl ons hierdie lêer oop het, laat ons 'n nuwe sleutel byvoeg vir ons gerief, 'n lys van al die plekke wat ons toepassing sal ondersteun. Ons sal dit later gebruik wanneer ons 'n plaaslike skakelaar byvoeg. Dit is egter 'n opsionele taak aangesien Laravel nie van ons vereis om dit te doen nie.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Nou ondersteun ons toepassing drie tale: Engels, Italiaans en Frans.
Noudat ons al die plekke gevestig het waarmee ons sal werk, kan ons voortgaan om ons voorafverwelkomingsboodskap te vertaaldefinag.
Kom ons begin deur nuwe lokaliseringslêers by die gids te voeg resources/lang
. Skep eers 'n lêer resources/lang/it.json
en voeg die ooreenstemmende vertalings soos volg by:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Skep dan 'n lêer resources/lang/fr.json
:
{
"Welkom by ons webwerf": “Welkom by ons webwerf”
}
Soos u kan sien, verwys ons altyd na die voorboodskapdefinte wat ons in die lêer bygevoeg het welcome.blade.php
(wat was {{ __('Welcome to our website') }}
). Die rede waarom ons nie 'n hoef te skep nie en.json
Dit is omdat Laravel reeds weet watter boodskappe ons deur voorafinstelling deurstuurdefiklaar met die funksie __()
hulle is vir ons plaaslike predefinito en.
Op hierdie stadium weet Laravel nie hoe om van plek te verander nie, so vir nou doen ons die vertalings direk binne die pad. Wysig vooraf welkom paddefivoltooi soos hieronder getoon:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Nou kan ons ons webwerf besoek en enige van die beskikbare tale as die eerste padsegment spesifiseer: byvoorbeeld, localhost/ru
o localhost/fr
. Jy behoort gelokaliseerde inhoud te sien. In die geval dat jy 'n nie-ondersteunde plek spesifiseer of glad nie 'n plek spesifiseer nie, sal Laravel gebruik en
by verstek instellingdefinita.
Om die plek vir elke werfskakel te verander, is dalk nie wat jy wil hê nie en lyk dalk nie so skoon esteties nie. Daarom sal ons die taalinstelling via 'n spesiale taalwisselaar uitvoer en die gebruikerssessie gebruik om die vertaalde inhoud te vertoon. Daarom skep dit 'n nuwe middelware binne die app/Http/Middleware/Localization.php
lêer of hardloop 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);
}
}
Hierdie middelware sal Laravel opdrag gee om die plek wat deur die gebruiker gekies is te gebruik as hierdie keuse in die sessie teenwoordig is.
Aangesien ons nodig het dat hierdie bewerking op elke versoek uitgevoer moet word, moet ons dit ook by die voormiddelware-stapel voegdefiingeskryf het app/http/Kernel.php
vir die web
middelware 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 moet ons 'n pad byvoeg om die plek te verander. Ons gebruik 'n sluitingspad, maar jy kan presies dieselfde kode binne jou beheerder gebruik as jy wil:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Moet ook nie vergeet om die locale-wisselaar te verwyder wat voorheen in ons voorafverwelkomingspad bygevoeg is niedefinag:
Route::get('/', function () {
return view('welcome');
});
Sodra dit gedoen is, is die enigste manier vir die gebruiker om die tans gestelde taal te verander deur in te voer localhost/language/{locale}
. Die locale
seleksie sal binne die sessie gestoor word en sal gebruikers herlei na waar hulle vandaan kom (kyk die Localization
middelware). Om dit te probeer, gaan na localhost/language/ru
(solank jou sessiekoekie in jou blaaier teenwoordig is) en jy sal die vertaalde inhoud sien. Jy kan vrylik op die webwerf beweeg of probeer om die bladsy te verfris en sien dat die geselekteerde taal behoue bly.
Nou moet ons iets skep waarop die gebruiker kan klik om die taal te verander in plaas daarvan om locale kodes handmatig in die URL in te voer. Om dit te doen, sal ons 'n baie eenvoudige taalkontrole byvoeg. Skep dus 'n nuwe een resources/views/partials/language_switcher.blade.php
lêer met die volgende kode:
<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>
Sluit die nuutgeskepte skakelaar in die "welkom"-aansig in:
<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>
Maak die oop app/Providers/AppServiceProvider.php
lêer en voeg die kode by om te deel wanneer ons taalwisselaar saamgestel is. Spesifiek, ons sal die huidige ligginginstellings deel wat as 'n lêer verkry kan word {{ $current_locale }}
.
Ons sal hoofsaaklik met resources/views/welcome.blade.php
, so alles moet in ons welkome siening gebeur, tensy anders gespesifiseer.
Kom ons sê byvoorbeeld hallo vir ons denkbeeldige gebruiker (Amanda) in plaas daarvan om net 'n generiese boodskap te vertoon:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Neem asseblief kennis dat ons die naam met die eerste letter kleinletter gebruik het, maar die plekhouer met die eerste letter hoofletters. Op hierdie manier kan Laravel jou help om die werklike woord outomaties met hoofletters te gebruik. Dit sal gebeur as die plekhouer met 'n hoofletter begin, byvoorbeeld, :Name
produseer "Caroline" of 'n volledige hoofletterwoord, :NAME
, produseer "CAROLINE".
Ons werk ook ons vertaallêers op resources/lang/fr.json
e resources/lang/it.json
, aangesien ons op die oomblik net die Engelse weergawe oral sal sien aangesien die vertaalsleutels nie ooreenstem met die vertalings nie.
Frans:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italiano:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Om pluralisering in aksie te sien, kom ons voeg 'n nuwe paragraaf teks by.
Om pluralisering uit te voer, moet jy die funksie gebruik trans_choice
in plaas van __()
, byvoorbeeld:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Soos jy kan sien, word die meervoudsvorme geskei deur 'n |
.
Nou, wat as ons meer meervoudsvorme nodig het?
Dit is ook moontlik:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
In hierdie geval laat ons getalle toe 0
, 1
, en van 2
a 19
, en uiteindelik vanaf 20. Natuurlik kan jy soveel reëls byvoeg as wat jy nodig het.
So, wat as ons plekhouers in ons meervoudsvorme wil hê?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Ons kan ook die telling wat in `trans_choice` geslaag is, gebruik indien nodig deur 'n plekhouer te gebruik :count
spesiaal:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Ten slotte, moenie vergeet om jou vertalinglêers op te dateer met enige veranderinge wat jy aan die basisvertaling gemaak het nie.
Italiano:
{
"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 datums op te spoor, sal ons die krag van koolstof , wat by verstek by Laravel komdefinita. Kyk na die Koolstof dokumentasie ; jy kan baie cool dinge doen. Ons kan byvoorbeeld ons lokalisering opstel met datum- en tydreëls.
Vir ons eenvoudige voorbeeld, sal ons die huidige datum gelokaliseer vir die geselekteerde taal wys. In ons routes/web.php
, werk ons die welkombladsypad op en gee die gelokaliseerde datumboodskap aan ons s'n deur 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
]);
});
Kom ons werk op resources/views/welcome.blade.php
byvoeging van datumvertoning, soos hierdie:
{{ __('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 }}
Probeer om die taal te verander op die tuisblad van localhost
, sal ons sien dat die datums nou gelokaliseer is, byvoorbeeld:
In verskillende lande gebruik mense verskillende formate om getalle voor te stel, byvoorbeeld:
Daarom, om hierdie verskille in jou Laravel-toepassing te weerspieël, kan jy gebruik NumberFormatter op die volgende manier:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Jy kan ook die getal in 'n spesifieke taal skryf en iets sien soos "honderd drie-en-twintigduisend, honderd drie-en-twintig punt een twee":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Verder laat NumberFormatter jou toe om geldeenhede maklik op te spoor, byvoorbeeld:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
So vir fr
jy sal sien Euro, terwyl vir en_US
die geldeenheid sal in Amerikaanse dollars wees.
Ercole Palmeri
Die ontwikkeling van fyn motoriese vaardighede deur inkleur berei kinders voor vir meer komplekse vaardighede soos skryf. Om in te kleur...
Die vlootsektor is 'n ware globale ekonomiese moondheid, wat na 'n 150 miljard-mark navigeer het ...
Verlede Maandag het die Financial Times 'n ooreenkoms met OpenAI aangekondig. FT lisensieer sy wêreldklas-joernalistiek ...
Miljoene mense betaal vir stromingsdienste en betaal maandelikse intekengeld. Dit is algemene opinie dat jy...