Laravel është një aplikacion i krijuar për të qenë lokal, për t'u përshtatur me gjuhë dhe kultura të ndryshme. Lokalizimi përshtat aplikacionet e ndërkombëtarizuara në një gjuhë specifike përmes përkthimit.
localhost
. Nëse jo, zëvendësojeni localhost
me emrin tuaj të domenit ose adresën IP (në varësi të instalimit tuaj).Në Laravel, ashtu si në shumë korniza të tjera, ne mund të ruajmë përkthime për gjuhë të ndryshme në skedarë të veçantë. Ka dy mënyra për të organizuar skedarët e përkthimit Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Për gjuhët që ndryshojnë sipas territorit, duhet t'i emërtoni ato directory/file
të gjuhës sipas ISO 15897. Për shembull, për anglishten e Mbretërisë së Bashkuar do të përdorni en_GB
në vend të en-gb
. Në këtë artikull, ne do të përqendrohemi në qasjen e dytë, por e njëjta gjë vlen edhe për të parën (përveç se si emërtohen dhe merren çelësat e përkthimit).
Tani, le të shkojmë në resources/views/welcome.blade.php
skedari dhe zëvendësoni përmbajtjen e body
etiketo me tonat, si kështu:
<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>
Ne do të fillojmë duke përgatitur mesazhin tonë të mirëseardhjes së lokalizimit, i cili është vërtet i lehtë në Laravel. E tëra çfarë ju duhet të bëni është të zëvendësoni tekstin "Mirë se vini në faqen tonë të internetit" me kodin e mëposhtëm: {{ __('Welcome to our website') }}
. Kjo do të udhëzojë Laravel të shfaqë "Mirë se vini në faqen tonë të internetit" si parazgjedhjedefinite dhe kërkoni për përkthime të këtij vargu nëse është caktuar një gjuhë tjetër përveç anglishtes (ne do të arrijmë tek ajo më vonë). Anglishtja do të vendoset si gjuha e paracaktuardefinish i aplikacionit tonë, kështu që sipas cilësimeve të parazgjedhuradefiNë fund ne thjesht do të shfaqim tekstin "Mirë se vini në faqen tonë të internetit". Nëse vendndodhja është e ndryshme, ne do të përpiqemi të gjejmë përkthimin që përputhet dhe ai do të krijohet në një moment.
Por si e di Laravel cila është gjuha aktuale apo cilat gjuhë janë të disponueshme në aplikacion? Këtë e bën duke parë konfigurimin lokal në aplikacion config/app.php
. Hapeni këtë skedar dhe kërkoni për këto dy çelësa të grupit shoqërues:
/*
|--------------------------------------------------------------------------
| 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',
Përshkrimet e treguara sipër çelësave duhet të jenë vetë-shpjeguese, por me pak fjalë, çelësi locale
përmban para lokaledefiNish i aplikacionit tuaj (të paktën, nëse nuk është vendosur ndonjë vend tjetër në kod). Dhe fallback_locale
ai aktivizohet në rast se vendosim një vend jo-ekzistent në aplikacionin tonë.
Ndërsa e kemi të hapur këtë skedar, le të shtojmë një çelës të ri për lehtësinë tonë, duke renditur të gjitha vendndodhjet që do të mbështesë aplikacioni ynë. Ne do ta përdorim këtë më vonë kur shtojmë një ndërrues lokal. Sidoqoftë, kjo është një detyrë opsionale pasi Laravel nuk kërkon që ne ta bëjmë atë.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Tani aplikacioni ynë mbështet tre gjuhë: anglisht, italisht dhe frëngjisht.
Tani që kemi krijuar të gjitha vendet me të cilat do të punojmë, mund të vazhdojmë dhe të vazhdojmë me përkthimin e mesazhit tonë të mirëseardhjes paraprakedefinatën.
Le të fillojmë duke shtuar skedarë të rinj lokalizimi në dosje resources/lang
. Së pari, krijoni një skedar resources/lang/it.json
dhe shtoni përkthimet përkatëse, si më poshtë:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Tjetra, krijoni një skedar resources/lang/fr.json
:
{
“Mirë se vini në faqen tonë të internetit”: “Mirëserdhe në faqen tonë”
}
Siç mund ta shihni, ne gjithmonë i referohemi mesazhit paraprakdefinito që kemi shtuar në skedar welcome.blade.php
(e cila ishte {{ __('Welcome to our website') }}
). Arsyeja pse nuk duhet të krijojmë një skedar en.json
sepse Laravel tashmë e di se cilat mesazhe kalojmë duke vendosur paraprakishtdefipërfunduar në funksion __()
ato janë për para tona lokaledefinito en.
Në këtë pikë, Laravel nuk di se si të ndryshojë lokalet, kështu që tani për tani, le të bëjmë përkthimet direkt brenda shtegut. Ndrysho rrugën e mirëseardhjes paradefipërpunuar siç tregohet më poshtë:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Tani mund të vizitojmë faqen tonë të internetit, duke specifikuar ndonjë nga gjuhët e disponueshme si segmentin e parë të rrugës: për shembull, localhost/ru
o localhost/fr
. Ju duhet të shihni përmbajtjen e lokalizuar. Në rast se specifikoni një vend të pambështetur ose nuk specifikoni fare një vend, Laravel do të përdorë en
sipas parazgjedhjesdefinita
Ndërrimi i vendndodhjes për secilën lidhje të sajtit mund të mos jetë ajo që dëshironi dhe mund të mos duket aq e pastër nga ana estetike. Kjo është arsyeja pse ne do të bëjmë cilësimin e gjuhës përmes një ndërruesi të veçantë të gjuhës dhe do të përdorim sesionin e përdoruesit për të shfaqur përmbajtjen e përkthyer. Prandaj, krijoni një ndërmjetës të ri brenda app/Http/Middleware/Localization.php
skedar ose duke ekzekutuar 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);
}
}
Ky softuer i mesëm do të udhëzojë Laravel të përdorë vendndodhjen e zgjedhur nga përdoruesi nëse kjo përzgjedhje është e pranishme në seancë.
Meqenëse kjo duhet të bëhet në çdo kërkesë, ne gjithashtu duhet ta shtojmë atë në grupin e para-midwaredefipërfunduar në app/http/Kernel.php
për web
grupi i programeve të mesme:
* 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 */
],
Më pas, duhet të shtojmë një shteg për të ndryshuar vendndodhjen. Ne po përdorim një shteg mbylljeje, por ju mund të përdorni saktësisht të njëjtin kod brenda kontrolluesit tuaj nëse dëshironi:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Gjithashtu, mos harroni të hiqni ndryshimin lokal të shtuar më parë në rrugën tonë të mirëseardhjesdefinata:
Route::get('/', function () {
return view('welcome');
});
Pasi të bëhet kjo, e vetmja mënyrë që përdoruesi të ndryshojë gjuhën e caktuar aktualisht është duke hyrë localhost/language/{locale}
. locale
përzgjedhja do të ruhet brenda sesionit dhe do t'i ridrejtojë përdoruesit nga kanë ardhur (kontrolloni Localization
programi i mesëm). Për ta provuar, shkoni te localhost/language/ru
(përderisa skedari juaj i sesionit është i pranishëm në shfletuesin tuaj) dhe do të shihni përmbajtjen e përkthyer. Mund të lëvizni lirshëm nëpër uebsajt ose të provoni të rifreskoni faqen dhe të shihni që gjuha e zgjedhur është ruajtur.
Tani duhet të krijojmë diçka që përdoruesi mund të klikojë për të ndryshuar gjuhën në vend që të fusë manualisht kodet lokale në URL. Për ta bërë këtë, ne do të shtojmë një kontrollues gjuhësor shumë të thjeshtë. Prandaj, krijoni një të re resources/views/partials/language_switcher.blade.php
skedar me kodin e mëposhtëm:
<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>
Përfshini ndërruesin e sapokrijuar në pamjen "mirëseardhje":
<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>
Hape app/Providers/AppServiceProvider.php
skedari dhe shtoni kodin për ta ndarë kur do të përpilohet ndërruesi ynë i gjuhës. Në mënyrë të veçantë, ne do të ndajmë vendndodhjen aktuale që mund të aksesohet si skedar {{ $current_locale }}
.
Ne do të punojmë kryesisht me resources/views/welcome.blade.php
, kështu që gjithçka duhet të ndodhë në këndvështrimin tonë të mirëpritur, përveç nëse specifikohet ndryshe.
Për shembull, le t'i themi përshëndetje përdoruesit tonë imagjinar (Amanda) në vend që të shfaqim vetëm një mesazh të përgjithshëm:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Vini re se emrin e kemi përdorur me shkronjën e parë me shkronjë të vogël, por mbajtësin e vendit me shkronjën e parë me shkronjë të madhe. Në këtë mënyrë, Laravel mund t'ju ndihmojë të shkruani automatikisht fjalën aktuale. Kjo do të ndodhë nëse mbajtësi i vendit fillon me një shkronjë të madhe, për shembull, :Name
prodhon "Caroline" ose një fjalë të shkruar plotësisht, :NAME
, prodhon “CAROLINE”.
Ne gjithashtu përditësojmë skedarët tanë të përkthimit resources/lang/fr.json
e resources/lang/it.json
, pasi për momentin do të shohim vetëm versionin anglisht kudo pasi çelësat e përkthimit nuk përputhen me përkthimet.
Frëngjisht:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Italisht:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Për të parë pluralizimin në veprim, le të shtojmë një paragraf të ri teksti.
Për të kryer pluralizimin, duhet të përdorni funksionin trans_choice
në vend të __()
, për shembull:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Siç mund ta shihni, format e shumësit ndahen me a |
.
Tani, çka nëse na duhen forma të shumta shumësi?
Kjo është gjithashtu e mundur:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Në këtë rast, ne lejojmë numrat 0
, 1
, dhe nga 2
a 19
, dhe në fund nga 20 e tutje. Sigurisht, mund të shtoni sa më shumë rregulla që ju nevojiten.
Po sikur të duam mbajtësit e vendeve në format tona të shumësit?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Ne gjithashtu mund të përdorim numërimin e kaluar në "trans_choice" nëse është e nevojshme duke përdorur një vendmbajtes :count
special:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Së fundi, mos harroni të përditësoni skedarët tuaj të përkthimit me çdo ndryshim që keni bërë në përkthimin bazë.
Italisht:
{
"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"
}
Frëngjisht:
{
"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"
}
Për të gjetur datat, ne do të shfrytëzojmë fuqinë e Karbon , i cili vjen me Laravel si parazgjedhjedefinita. Shikoni Dokumentacioni i karbonit ; ju mund të bëni shumë gjëra interesante. Për shembull, ne mund të vendosim vendndodhjen tonë me rregullat e datës dhe orës.
Për shembullin tonë të thjeshtë, ne do të tregojmë datën aktuale të lokalizuar për gjuhën e zgjedhur. Në tonë routes/web.php
, ne përditësojmë shtegun e faqes së mirëseardhjes dhe ia kalojmë mesazhin tonë të lokalizuar të datës view
mirëseardhje:
<?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
]);
});
Le të përditësojmë resources/views/welcome.blade.php
duke shtuar shfaqjen e datës, si kjo:
{{ __('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 }}
Përpjekja për të ndryshuar gjuhën në faqen kryesore të localhost
, do të shohim që datat tani janë të lokalizuara, për shembull:
Në vende të ndryshme, njerëzit përdorin formate të ndryshme për të paraqitur numrat, për shembull:
Prandaj, për të pasqyruar këto dallime në aplikacionin tuaj Laravel, mund të përdorni NumberFormatter në mënyrën e mëposhtme:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Ju gjithashtu mund ta shkruani numrin në një gjuhë të caktuar dhe të shfaqni diçka si "njëqind e njëzet e tre mijë e njëqind e njëzet e tre pikë një dy":
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Për më tepër, NumberFormatter ju lejon të gjeni lehtësisht monedhat, për shembull:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Pra për fr
ju do të shihni euro, ndërsa për en_US
monedha do të jetë në dollarë amerikanë.
Ercole Palmeri
Zhvillimi i aftësive të shkëlqyera motorike përmes ngjyrosjes i përgatit fëmijët për aftësi më komplekse si shkrimi. Për të ngjyrosur…
Sektori detar është një fuqi e vërtetë ekonomike globale, e cila ka lundruar drejt një tregu prej 150 miliardë...
Të hënën e kaluar, Financial Times njoftoi një marrëveshje me OpenAI. FT licencon gazetarinë e saj të klasit botëror…
Miliona njerëz paguajnë për shërbimet e transmetimit, duke paguar tarifat mujore të abonimit. Është e zakonshme që ju…