Laravel serîlêdanek e ku ji bo herêmî be, ku bi ziman û çandên cihêreng veguhezîne hatî çêkirin. Herêmîkirin bi wergerandinê serîlêdanên navneteweyîkirî li zimanek taybetî diguncîne.
localhost
. Heke ne, veguherînin localhost
bi navê domaina xwe an navnîşana IP-ya xwe (li gorî sazkirina we ve girêdayî ye).Di Laravel de, mîna gelek çarçoveyên din, em dikarin wergerên ji bo zimanên cihê di pelên cihê de hilînin. Du awayên organîzekirina pelên wergera Laravel hene:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Ji bo zimanên ku li gorî herêmê ji hev cihê dibin, divê hûn wan nav bikin directory/file
ji zimên li gor ISO 15897. Bo nimûne, ji bo UK English hûn dê bi kar tînin en_GB
di şona en-gb
. Di vê gotarê de, em ê bala xwe bidin ser nêzîkatiya duyemîn, lê heman tişt ji bo ya yekem jî derbas dibe (ji xeynî ku bilêtên werger çawa têne binavkirin û wergirtin).
Niha, em herin ser resources/views/welcome.blade.php
pelê bikin û li şûna naverokê body
bi ya me etîket bikin, bi vî rengî:
<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>
Em ê dest bi amadekirina peyama xweya xêrhatina herêmîbûnê bikin, ku di Laravel de bi rastî hêsan e. Tiştê ku hûn bikin ev e ku nivîsa "Bi xêr hatî malpera me" koda jêrîn biguhezînin: {{ __('Welcome to our website') }}
. Ev ê talîmat bide Laravel ku ji hêla xwerû ve "Bi xêr hatî malpera me" nîşan bidedefinita û li wergerên vê rêzê bigerin ger zimanek ji bilî Englishngilîzî were danîn (em ê paşê bigihîjin wê). Îngilîzî dê wekî zimanê bingehîn were destnîşan kirindefinite ya sepana me, ji ber vê yekê bi xwerûdefinita em ê bi tenê nivîsa "Bi xêr hatî malpera me" nîşan bidin. Ger cihek cihêreng be, em ê hewl bidin ku li wergera têkildar a ku dê di kêliyekê de were afirandin bigerin.
Lê Laravel çawa dizane ku kîjan zimanê heyî ye an kîjan ziman di serîlêdanê de hene? Ew vê yekê bi dîtina veavakirina herêmî ya di sepanê de dike config/app.php
. Vê pelê vekin û li van her du bişkojkên array hevgirtî bigerin:
/*
|--------------------------------------------------------------------------
| 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',
Danasînên ku li jor kilîtan têne xuyang kirin divê bixwe raveker bin, lê bi kurtî, kilît locale
jûreya pêşîn heyedefinite ya serîlêdana we (kêm nebe, heke cîhek din di kodê de nehatiye danîn). Û ya fallback_locale
heke em di serîlêdana xwe de cîhek neheyî destnîşan bikin ew tê çalak kirin.
Dema ku me ev pel vekirî ye, bila ji bo rehetiya xwe mifteyek nû lê zêde bike ku hemî deverên ku serlêdana me dê piştgirî bike navnîş bike. Em ê paşê dema ku veguherînerek herêmî lê zêde bikin vê yekê bikar bînin. Lêbelê, ev karekî vebijarkî ye ji ber ku Laravel ne hewce ye ku em wiya bikin.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Naha serlêdana me sê zimanan piştgirî dike: Îngilîzî, Îtalî û Frensî.
Naha ku me hemî deverên ku em ê bi wan re bixebitin ava kirine, em dikarin pêş de biçin û berbi wergerandina peyama xweya pêşwaziyê bigerin.definite.
Ka em bi lê zêdekirina pelên herêmîbûnê yên nû li peldankê dest pê bikin resources/lang
. Pêşîn, pelek çêbikin resources/lang/it.json
û wergerên têkildar lê zêde bike, wekî jêrîn:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Piştre, pelek çêbikin resources/lang/fr.json
:
{
"Bi xêr hatî malpera me": "Bi xêr hatî malpera me"
}
Wekî ku hûn dibînin, em her gav behsa peyama pêşîn dikindefinite ku me li pelê zêde kir welcome.blade.php
(Kîjan bu {{ __('Welcome to our website') }}
). Sedema ku em neçar in ku pelek çêbikin en.json
Ji ber ku Laravel jixwe dizane kîjan peyaman em bi pêş-sazkirinê re derbas dikindefibi fonksiyonê qediya __()
ew ji bo pêşiyê me yên herêmî nedefinito en.
Di vê nuqteyê de, Laravel nizane ku meriv çawa herêmî biguhezîne, ji ber vê yekê heya niha em wergeran rasterast di nav rê de dikin. Rêya pêşwaziyê biguherînedefiqedandin wek ku li jêr tê nîşandan:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Naha em dikarin serdana malpera xwe bikin, yek ji zimanên berdest wekî beşa riya yekem diyar bikin: mînak, localhost/ru
o localhost/fr
. Divê hûn naveroka herêmî bibînin. Ger hûn herêmek nepiştgirî diyar bikin an bi tevahî herêmek diyar nekin, Laravel dê bikar bîne en
bi mîhengê xwerûdefinita.
Guhertina herêmî ya ji bo her girêdana malperê dibe ku ne ya ku hûn dixwazin be, û dibe ku ew ji hêla estetîk ve ew qas paqij xuya neke. Ji ber vê yekê em ê mîhenga ziman bi navgînek veguhezkarek zimanî ya taybetî bikin û rûniştina bikarhêner bikar bînin da ku naveroka werger nîşan bidin. Ji ber vê yekê, navgînek nû di hundurê de biafirînin app/Http/Middleware/Localization.php
pelê an bi xebitandinê 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);
}
}
Vê navgîniyê dê Laravel talîmat bide ku ger ev hilbijartî di danişînê de hebe, herêmîya hilbijartî ya bikarhêner bikar bîne.
Ji ber ku em hewce ne ku ev operasyon li ser her daxwazê were kirin, em jî hewce ne ku wê li stûna pêş-navgînê zêde bikindefide niştecih kirin app/http/Kernel.php
per il web
koma navîn:
* 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 */
],
Dûv re, pêdivî ye ku em rêyek zêde bikin da ku deverê biguhezînin. Em rêyek girtinê bikar tînin, lê heke hûn bixwazin hûn dikarin tam heman kodê di hundurê kontrola xwe de bikar bînin:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Di heman demê de, ji bîr nekin ku veguheztina herêmî ya ku berê di rêça meya pêşwaziyê de hatî zêdekirin jêbirindefinite:
Route::get('/', function () {
return view('welcome');
});
Piştî ku ev yek hat kirin, yekane awayê ku bikarhêner zimanê ku niha hatî saz kirin biguhezîne bi têketinê ye localhost/language/{locale}
. Ew locale
Hilbijartin dê di nav danişînê de were hilanîn û dê bikarhêneran beralî bike cihê ku ew jê hatine (kontrol bikin Localization
navgîn). Ji bo ku wê biceribînin, biçin localhost/language/ru
(heta ku cookie ya danişîna we di geroka we de hebe) û hûn ê naveroka wergerandinê bibînin. Hûn dikarin bi serbestî li dora malperê bigerin an jî hewl bidin ku rûpelê nûve bikin û bibînin ku zimanê hilbijartî tê parastin.
Naha pêdivî ye ku em tiştek biafirînin ku bikarhêner bikaribe bikirtîne da ku ziman biguhezîne li şûna ku bi destan kodên herêmî têxe nav URL-ê. Ji bo vê yekê, em ê kontrolkerek zimanek pir hêsan lê zêde bikin. Ji ber vê yekê, nû çêbikin resources/views/partials/language_switcher.blade.php
pelê bi koda jêrîn:
<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>
Guhestina ku nû hatî afirandin di dîtina "bi xêrhatiniyê" de têxe:
<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>
Vekin app/Providers/AppServiceProvider.php
pelê bikin û kodê lê zêde bikin ku dema ku guhêrbara zimanê me were çêkirin parve bikin. Bi taybetî, em ê devera heyî ya ku wekî pelek tê gihîştin parve bikin {{ $current_locale }}
.
Em ê bi giranî bi hev re bixebitin resources/views/welcome.blade.php
, ji ber vê yekê divê her tişt di dîtina meya xêrxwaziyê de biqewime heya ku wekî din neyê destnîşankirin.
Mînakî, bila em ji bikarhênerê xwe yê xeyalî (Amanda) re silav bikin li şûna ku tenê peyamek gelemperî nîşan bidin:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Bala xwe bidinê ku me nav bi tîpa yekem bi tîpên piçûk, lê cîhgira bi tîpa yekem bi tîpên mezin bikar anî. Bi vî rengî, Laravel dikare ji we re bibe alîkar ku hûn bixweber peyva rastîn sermaye bikin. Ev ê bibe heke cîhgir bi tîpek mezin dest pê bike, mînakî, :Name
"Caroline" an peyvek bi tevahî sermayeyî çêdike, :NAME
, "CAROLINE" hilberîne.
Em dosyayên xwe yên wergerê jî nûjen dikin resources/lang/fr.json
e resources/lang/it.json
, ji ber ku niha em ê tenê guhertoya îngilîzî li her derê bibînin ji ber ku bişkojkên wergerê bi wergeran re hev nagirin.
Fransî:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Îtalî:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
Ji bo dîtina pirjimariyê di çalakiyê de, bila paragrafek nû ya nivîsê lê zêde bike.
Ji bo pêkanîna pirjimariyê, divê hûn fonksiyonê bikar bînin trans_choice
di şona __()
, bo nimûne:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Wekî ku hûn dibînin, formên pirjimar bi a-yê têne veqetandin |
.
Naha, heke ji me re pir formên pirjimar hewce ne?
Ev jî gengaz e:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Di vê rewşê de, em destûr didin hejmaran 0
, 1
, û ji 2
a 19
, û di dawiyê de ji 20 û pê ve. Bê guman, hûn dikarin qaîdeyên ku hûn hewce ne zêde bikin.
Ji ber vê yekê heke em cîhgiran di formên xwe yên pirjimar de bixwazin?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Ger hewce be bi karanîna cîhgirek em dikarin jimareya ku di `trans_hilbijartina` de derbas bûye jî bikar bînin :count
taybetî:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Di dawiyê de, ji bîr nekin ku hûn pelên wergera xwe bi her guhertinên ku we di wergera bingehîn de kirine nûve bikin.
Îtalî:
{
"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"
}
Ji bo peydakirina tarîxan, em ê hêza xwe bi kar bînin Karbonat , ku bi xwerû bi Laravel re têdefinita. Binêre Belgekirina karbonê ; hûn dikarin gelek tiştên balkêş bikin. Mînakî, em dikarin cîhê xwe bi qaîdeyên tarîx û demjimêrê saz bikin.
Ji bo nimûneya meya hêsan, em ê dîroka heyî ya ku ji bo zimanê hilbijartî hatî herêmî destnîşan bikin. Di me de routes/web.php
, em riya rûpela xêrxwaziyê nûve dikin û peyama tarîxa herêmî digihînin ya xwe view
Bi xêr hatî:
<?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
]);
});
Werin em nûve bikin resources/views/welcome.blade.php
lê zêdekirina nîşana tarîxê, mîna:
{{ __('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 }}
Hewl didin ku zimanê li ser rûpela malê ya biguherînin localhost
, em ê bibînin ku tarîx nuha herêmî bûne, mînakî:
Li welatên cihê, mirov formên cihêreng bikar tînin da ku hejmaran temsîl bikin, mînak:
Ji ber vê yekê, ji bo ku hûn van cûdahiyan di sepana xweya Laravel de nîşan bidin, hûn dikarin bikar bînin NumberFormatter bi awayê jêrîn:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Her weha hûn dikarin hejmarê bi zimanek taybetî binivîsin û tiştek wekî "sed bîst û sê hezar û sed û bîst û sê xal yek du" nîşan bidin:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Digel vê yekê, NumberFormatter dihêle hûn bi hêsanî diravan bibînin, mînakî:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Ji ber vê yekê ji bo fr
hûn ê Euro bibînin, dema ku ji bo en_US
pereyê wê bi dolarê Amerîkî be.
Ercole Palmeri
Google DeepMind guhertoyek çêtir a modela xweya îstîxbarata sûnî destnîşan dike. Modela nû ya pêşkeftî ne tenê peyda dike…
Laravel, bi hevoksaziya xweşik û taybetmendiyên xwe yên hêzdar navdar e, di heman demê de bingehek zexm ji bo mîmariya modular peyda dike. Va…
Cisco û Splunk ji xerîdaran re dibin alîkar ku rêwîtiya xwe berbi Navenda Operasyonên Ewlekariyê (SOC) ya pêşerojê bi…
Ransomware di van du salên dawî de li ser nûçeyan serdest e. Pir kes baş dizanin ku êrîş…
Operasyonek ophthalmoplasty bi karanîna temaşekera bazirganî ya Apple Vision Pro li Polyclinic Catania hate kirin…
Pêşxistina jêhatîbûnên motorê yên xweş bi rêya rengînkirinê zarokan ji hunerên tevlihevtir ên mîna nivîsandinê re amade dike. Reng kirin…
Sektora deryayî hêzek aborî ya cîhanî ya rastîn e, ku ber bi bazarek 150 mîlyar ve çûye…
Duşemiya borî, Financial Times peymanek bi OpenAI re ragihand. FT destûr dide rojnamegeriya xwe ya cîhanî…