Mae Laravel yn gymhwysiad sydd wedi'i gynllunio i fod yn lleol, i addasu i wahanol ieithoedd a diwylliannau. Mae lleoleiddio yn teilwra cymwysiadau rhyngwladol i iaith benodol trwy gyfieithu.
localhost
. Os na, disodli localhost
gyda'ch enw parth neu'ch cyfeiriad IP eich hun (yn dibynnu ar eich gosodiad).Yn Laravel, yn union fel mewn llawer o fframweithiau eraill, gallwn storio cyfieithiadau ar gyfer gwahanol ieithoedd mewn ffeiliau ar wahân. Mae dwy ffordd i drefnu ffeiliau cyfieithu Laravel:
resources/lang/{en,fr,ru}/{myfile.php}
;resources/lang/{fr.json, ru.json}
;Ar gyfer ieithoedd sy'n amrywio yn ôl tiriogaeth, dylech eu henwi directory/file
o'r iaith yn ôl ISO 15897. Er enghraifft, ar gyfer Saesneg y DU y byddech yn ei defnyddio en_GB
yn lle en-gb
. Yn yr erthygl hon, byddwn yn canolbwyntio ar yr ail ddull, ond mae'r un peth yn wir am y cyntaf (ac eithrio sut mae allweddi cyfieithu yn cael eu henwi a'u hadalw).
Nawr, gadewch i ni fynd i'r resources/views/welcome.blade.php
ffeil a disodli cynnwys y body
tag gyda'n un ni, felly:
<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>
Byddwn yn dechrau trwy baratoi ein neges croeso lleoleiddio, sy'n hawdd iawn yn Laravel. Y cyfan sy'n rhaid i chi ei wneud yw disodli'r testun “Croeso i'n gwefan” gyda'r cod canlynol: {{ __('Welcome to our website') }}
. Bydd hyn yn cyfarwyddo Laravel i arddangos “Croeso i'n gwefan” yn ddiofyndefinite a chwiliwch am gyfieithiadau o'r llinyn hwn os gosodir iaith heblaw Saesneg (fe gyrhaeddwn hwnnw yn nes ymlaen). Bydd Saesneg yn cael ei gosod fel yr iaith ddiofyndefinish o'n app, felly trwy osod diofyndefiAr y diwedd byddwn yn dangos y testun “Croeso i’n gwefan”. Os yw'r locale yn wahanol, byddwn yn ceisio dod o hyd i'r cyfieithiad cyfatebol a bydd yn cael ei greu mewn eiliad.
Ond sut mae Laravel yn gwybod pa iaith yw'r iaith gyfredol neu pa ieithoedd sydd ar gael yn y rhaglen? Mae'n gwneud hyn trwy edrych ar y cyfluniad lleol yn yr app config/app.php
. Agorwch y ffeil hon a chwiliwch am y ddwy allwedd arae cysylltiadol hyn:
/*
|--------------------------------------------------------------------------
| 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',
Dylai'r disgrifiadau a ddangosir uchod yr allweddi fod yn hunanesboniadol, ond yn fyr, yr allwedd locale
yn cynnwys y cyn lleoldefinish o'ch cais (o leiaf, os nad oes locale arall wedi'i osod yn y cod). Ac y fallback_locale
caiff ei weithredu rhag ofn y byddwn yn gosod locale nad yw'n bodoli yn ein cais.
Tra bod y ffeil hon ar agor, gadewch i ni ychwanegu allwedd newydd er hwylustod i ni gan restru'r holl leoliadau y bydd ein cais yn eu cefnogi. Byddwn yn defnyddio hwn yn ddiweddarach wrth ychwanegu switcher lleol. Fodd bynnag, mae hon yn dasg ddewisol gan nad yw Laravel yn ei gwneud yn ofynnol i ni ei gwneud.
/*
|--------------------------------------------------------------------------
| Available locales
|--------------------------------------------------------------------------
|
| List all locales that your application works with
|
*/
'available_locales' => [
'English' => 'en',
'Italian' => 'it',
'French' => 'fr',
],
Nawr mae ein cais yn cefnogi tair iaith: Saesneg, Eidaleg a Ffrangeg.
Nawr ein bod wedi sefydlu'r holl locales y byddwn yn gweithio gyda nhw, gallwn fynd ymlaen a symud ymlaen i gyfieithu ein neges cyn croesodefinit.
Gadewch i ni ddechrau trwy ychwanegu ffeiliau lleoleiddio newydd i'r ffolder resources/lang
. Yn gyntaf, creu ffeil resources/lang/it.json
ac ychwanegwch y cyfieithiadau cyfatebol, fel a ganlyn:
{
"Welcome to our website": "Benvenuto nel nostro sito web"
}
Nesaf, creu ffeil resources/lang/fr.json
:
{
“Croeso i’n gwefan”: “Croeso i’n gwefan”
}
Fel y gwelwch, rydym bob amser yn cyfeirio at y neges ymlaen llawdefinito a ychwanegwyd gennym yn y ffeil welcome.blade.php
(oedd {{ __('Welcome to our website') }}
). Y rheswm pam nad oes rhaid i ni greu ffeil en.json
mae hyn oherwydd bod Laravel eisoes yn gwybod pa negeseuon rydyn ni'n eu pasio trwy osod ymlaen llawdefigorffen yn y swyddogaeth __()
maent ar gyfer ein cyn lleoldefinito en.
Ar y pwynt hwn, nid yw Laravel yn gwybod sut i newid locales, felly am y tro, gadewch i ni wneud y cyfieithiadau yn uniongyrchol y tu mewn i'r llwybr. Addasu'r llwybr croeso cyndefinished fel y dangosir isod:
Route::get('/{locale?}', function ($locale = null) {
if (isset($locale) && in_array($locale, config('app.available_locales'))) {
app()->setLocale($locale);
}
return view('welcome');
});
Gallwn nawr ymweld â'n gwefan, gan nodi unrhyw un o'r ieithoedd sydd ar gael fel y segment llwybr cyntaf: er enghraifft, localhost/ru
o localhost/fr
. Dylech weld y cynnwys lleol. Rhag ofn i chi nodi locale nad yw'n cael ei gynnal neu os nad ydych chi'n nodi locale o gwbl, bydd Laravel yn defnyddio en
yn ddiofyndefinita.
Efallai nad yw newid y locale ar gyfer pob cyswllt safle yr hyn yr ydych ei eisiau, ac efallai na fydd yn edrych mor lân yn esthetig. Dyna pam y byddwn yn gwneud y gosodiad iaith trwy switsiwr iaith arbennig ac yn defnyddio'r sesiwn defnyddiwr i arddangos y cynnwys a gyfieithwyd. Felly, creu middleware newydd y tu mewn i'r app/Http/Middleware/Localization.php
ffeil neu drwy redeg 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);
}
}
Bydd y nwyddau canol hwn yn cyfarwyddo Laravel i ddefnyddio'r locale a ddewiswyd gan y defnyddiwr os yw'r dewisiad hwn yn bresennol yn y sesiwn.
Gan fod angen i ni wneud hyn ar bob cais, mae angen i ni hefyd ei ychwanegu at y pentwr cyn nwyddau canoldefigorffen yn app/http/Kernel.php
y il web
grŵp nwyddau canol:
* 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 */
],
Nesaf, mae angen i ni ychwanegu llwybr i newid y locale. Rydym yn defnyddio llwybr cau, ond gallwch ddefnyddio'r un cod yn union y tu mewn i'ch rheolydd os dymunwch:
Route::get('language/{locale}', function ($locale) {
app()->setLocale($locale);
session()->put('locale', $locale);
return redirect()->back();
});
Hefyd, peidiwch ag anghofio dileu'r togl locale a ychwanegwyd yn flaenorol yn ein llwybr croesodefineis:
Route::get('/', function () {
return view('welcome');
});
Unwaith y gwneir hyn, yr unig ffordd i'r defnyddiwr newid yr iaith a osodwyd ar hyn o bryd yw trwy fynd i mewn localhost/language/{locale}
. Mae'r locale
bydd dewis yn cael ei storio o fewn y sesiwn a bydd yn ailgyfeirio defnyddwyr i ble y daethant (gwiriwch y Localization
llestri canol). I roi cynnig arni, ewch i localhost/language/ru
(cyn belled â bod eich cwci sesiwn yn bresennol yn eich porwr) a byddwch yn gweld y cynnwys wedi'i gyfieithu. Gallwch symud o gwmpas y wefan yn rhydd neu geisio adnewyddu'r dudalen a gweld bod yr iaith a ddewiswyd yn cael ei chadw.
Nawr mae angen i ni greu rhywbeth y gall y defnyddiwr ei glicio i newid yr iaith yn lle rhoi codau lleol â llaw i'r URL. I wneud hyn, byddwn yn ychwanegu gwiriwr iaith syml iawn. Felly, creu newydd resources/views/partials/language_switcher.blade.php
ffeil gyda'r cod canlynol:
<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>
Cynhwyswch y switsiwr sydd newydd ei greu yn y golwg "croeso":
<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>
Agorwch y app/Providers/AppServiceProvider.php
ffeil ac ychwanegu'r cod i rannu pan fydd ein switcher iaith yn cael ei gyfansoddi. Yn benodol, byddwn yn rhannu'r locale cyfredol y gellir ei gyrchu fel ffeil {{ $current_locale }}
.
Byddwn yn gweithio gyda resources/views/welcome.blade.php
, felly mae'n rhaid i bopeth ddigwydd yn ein barn groeso oni nodir yn wahanol.
Er enghraifft, gadewch i ni ddweud helo wrth ein defnyddiwr dychmygol (Amanda) yn lle dim ond arddangos neges generig:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
Sylwch ein bod wedi defnyddio'r enw gyda'r llythyren gyntaf mewn llythrennau bach, ond y dalfan gyda'r llythyren gyntaf mewn priflythrennau. Fel hyn, gall Laravel eich helpu i gyfalafu'r gair go iawn yn awtomatig. Bydd hyn yn digwydd os bydd deiliad y lle yn dechrau gyda phrif lythyren, er enghraifft, :Name
yn cynhyrchu “Caroline” neu air wedi'i lythrennu'n llawn, :NAME
, yn cynhyrchu “CAROLINE”.
Rydym hefyd yn diweddaru ein ffeiliau cyfieithu resources/lang/fr.json
e resources/lang/it.json
, oherwydd ar hyn o bryd dim ond y fersiwn Saesneg y byddwn yn ei weld yn unrhyw le gan nad yw'r bysellau cyfieithu yn cyfateb i'r cyfieithiadau.
Ffrangeg:
{
"Welcome to our website, :Name": "Bienvenue sur notre site, :Name"
}
Eidaleg:
{
"Welcome to our website, :Name": "Benvenuto sul nostro sito web, :Name"
}
I weld lluosogi ar waith, gadewch i ni ychwanegu paragraff newydd o destun.
I berfformio plwraleiddio, rhaid i chi ddefnyddio'r ffwythiant trans_choice
yn lle __()
, er enghraifft:
{{ __('Welcome to our website, :Name', ['name' => 'caroline']) }}
<br>
{{ trans_choice('There is one apple|There are many apples', 2) }}
Fel y gwelwch, mae ffurfiau lluosog yn cael eu gwahanu gan a |
.
Nawr, beth os oes angen ffurfiau lluosog lluosog arnom?
Mae hyn hefyd yn bosibl:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24) }}
Yn yr achos hwn, rydym yn caniatáu niferoedd 0
, 1
, a 2
a 19
, ac yn olaf o 20 ymlaen. Wrth gwrs, gallwch chi ychwanegu cymaint o reolau ag sydd eu hangen arnoch chi.
Felly beth os ydym am gael y deiliaid lleoedd yn ein ffurfiau lluosog?
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 24, ['form' => 'is']) }}
Gallwn hefyd ddefnyddio'r cyfrif a basiwyd yn `trans_choice` os oes angen gan ddefnyddio dalfan :count
arbennig:
{{ trans_choice('{0} There :form no apples|{1} There :form just :count apple|[2,19] There :form :count apples', 1, ['form' => 'is']) }}
Yn olaf, peidiwch ag anghofio diweddaru eich ffeiliau cyfieithu gydag unrhyw newidiadau a wnaethoch i'r cyfieithiad sylfaenol.
Eidaleg:
{
"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"
}
Ffrangeg:
{
"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"
}
I leoli dyddiadau, byddwn yn harneisio pŵer Carbon , sy'n dod gyda Laravel yn ddiofyndefinita. Edrychwch ar y Dogfennaeth carbon ; gallwch chi wneud llawer o bethau diddorol. Er enghraifft, gallwn osod ein locale gyda rheolau dyddiad ac amser.
Ar gyfer ein hesiampl syml, byddwn yn dangos y dyddiad cyfredol wedi'i leoleiddio ar gyfer yr iaith a ddewiswyd. Yn ein routes/web.php
, rydym yn diweddaru llwybr y dudalen groeso ac yn trosglwyddo'r neges dyddiad lleol i'n un ni view
croeso:
<?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
]);
});
Gadewch i ni ddiweddaru resources/views/welcome.blade.php
ychwanegu arddangosiad dyddiad, fel hyn:
{{ __('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 }}
Ceisio newid yr iaith ar hafan dudalen localhost
, byddwn yn gweld bod y dyddiadau bellach yn lleol, er enghraifft:
Mewn gwahanol wledydd, mae pobl yn defnyddio fformatau gwahanol i gynrychioli rhifau, er enghraifft:
Felly, i adlewyrchu'r gwahaniaethau hyn yn eich app Laravel, gallwch chi ei ddefnyddio Fformatiwr Rhif yn y modd canlynol:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::DECIMAL);
$num2 = NumberFormatter::create('fr', NumberFormatter::DECIMAL);
Gallwch hefyd ysgrifennu’r rhif mewn iaith benodol ac arddangos rhywbeth fel “cant dau ddeg tri mil un cant dau ddeg tri pwynt un dau”:
<?php
$num = NumberFormatter::create('en_US', NumberFormatter::SPELLOUT);
$num2 = NumberFormatter::create('fr', NumberFormatter::SPELLOUT);
Yn ogystal, mae NumberFormatter yn caniatáu ichi ddod o hyd i arian cyfred yn hawdd, er enghraifft:
<?php
$currency1 = NumberFormatter::create('fr', NumberFormatter::CURRENCY);
$currency2 = NumberFormatter::create('en_US', NumberFormatter::CURRENCY);
Felly am fr
byddwch yn gweld Euros, tra am en_US
bydd yr arian cyfred mewn doler yr UD.
Ercole Palmeri
Mae datblygu sgiliau echddygol manwl trwy liwio yn paratoi plant ar gyfer sgiliau mwy cymhleth fel ysgrifennu. I liwio…
Mae'r sector llyngesol yn bŵer economaidd byd-eang gwirioneddol, sydd wedi llywio tuag at farchnad 150 biliwn...
Ddydd Llun diwethaf, cyhoeddodd y Financial Times gytundeb ag OpenAI. Mae FT yn trwyddedu ei newyddiaduraeth o safon fyd-eang…
Mae miliynau o bobl yn talu am wasanaethau ffrydio, gan dalu ffioedd tanysgrifio misol. Mae’n farn gyffredin eich bod chi…