การแปลเป็นภาษาท้องถิ่นอย่างง่ายด้วย i18n สำหรับ Laravel ซึ่งเป็นเครื่องมือที่มีประโยชน์ในการรวมกับคลาสการแปลเป็นภาษาท้องถิ่นของ Laravel
แพ็คเกจมีดังต่อไปนี้:
ลาราเวล | laravel-รองรับหลายภาษา |
---|---|
4.0.x | 0.13.x |
4.1.x | 0.13.x |
4.2.x | 0.15.x |
5.0.x/5.1.x | 1.0.x |
5.2.x-5.4.x (ไม่จำเป็นต้องใช้ PHP 7) | 1.2. |
5.2.0-6.x (ต้องใช้เวอร์ชัน PHP >= 7) | 1.4.x |
6.x-10.x (ต้องใช้เวอร์ชัน PHP >= 7) | 1.8.x |
10.x-11.x (ต้องใช้เวอร์ชัน PHP >= 8.2) | 2.0.x |
ติดตั้งแพ็คเกจผ่านทางผู้แต่ง: composer require mcamara/laravel-localization
สำหรับ Laravel 5.4 และต่ำกว่า จำเป็นต้องลงทะเบียนผู้ให้บริการ
เพื่อแก้ไขการกำหนดค่าเริ่มต้น คุณสามารถดำเนินการ:
php artisan vendor:publish --provider="McamaraLaravelLocalizationLaravelLocalizationServiceProvider"
หลังจากนั้น config/laravellocalization.php
จะถูกสร้างขึ้น
ตัวเลือกการกำหนดค่าคือ:
คุณสามารถลงทะเบียนมิดเดิลแวร์แพ็คเกจได้ในไฟล์ app/Http/Kernel.php
:
<?php namespace App Http ;
use Illuminate Foundation Http Kernel as HttpKernel ;
class Kernel extends HttpKernel {
/**
* The application's route middleware.
*
* @var array
*/
protected $ middlewareAliases = [
/**** OTHER MIDDLEWARE ****/
' localize ' => Mcamara LaravelLocalization Middleware LaravelLocalizationRoutes::class,
' localizationRedirect ' => Mcamara LaravelLocalization Middleware LaravelLocalizationRedirectFilter::class,
' localeSessionRedirect ' => Mcamara LaravelLocalization Middleware LocaleSessionRedirect::class,
' localeCookieRedirect ' => Mcamara LaravelLocalization Middleware LocaleCookieRedirect::class,
' localeViewPath ' => Mcamara LaravelLocalization Middleware LaravelLocalizationViewPath::class
];
}
หากคุณใช้ Laravel 11 คุณสามารถลงทะเบียนในไฟล์ bootstrap/app.php
โดยปิด withMiddleware
:
return Application:: configure (basePath: dirname ( __DIR__ ))
// Other application configurations
-> withMiddleware ( function ( Middleware $ middleware ) {
$ middleware -> alias ([
/**** OTHER MIDDLEWARE ALIASES ****/
' localize ' => Mcamara LaravelLocalization Middleware LaravelLocalizationRoutes::class,
' localizationRedirect ' => Mcamara LaravelLocalization Middleware LaravelLocalizationRedirectFilter::class,
' localeSessionRedirect ' => Mcamara LaravelLocalization Middleware LocaleSessionRedirect::class,
' localeCookieRedirect ' => Mcamara LaravelLocalization Middleware LocaleCookieRedirect::class,
' localeViewPath ' => Mcamara LaravelLocalization Middleware LaravelLocalizationViewPath::class,
]);
})
เพิ่มสิ่งต่อไปนี้ลงในไฟล์เส้นทางของคุณ:
// routes/web.php
Route:: group ([ ' prefix ' => LaravelLocalization:: setLocale ()], function ()
{
/** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
Route:: get ( ' / ' , function ()
{
return View:: make ( ' hello ' );
});
Route:: get ( ' test ' , function (){
return View:: make ( ' test ' );
});
});
/** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/
เมื่อเพิ่มกลุ่มเส้นทางนี้ลงในไฟล์เส้นทางแล้ว ผู้ใช้จะสามารถเข้าถึงสถานที่ทั้งหมดที่เพิ่มลงใน supportedLocales
( en
และ es
ตามค่าเริ่มต้น) ตัวอย่างเช่น ไฟล์เส้นทางด้านบนจะสร้างที่อยู่ต่อไปนี้:
// Set application language to English
http://url-to-laravel/en
http://url-to-laravel/en/test
// Set application language to Spanish
http://url-to-laravel/es
http://url-to-laravel/es/test
// Set application language to English or Spanish (depending on browsers default locales)
// if nothing found set to default locale
http://url-to-laravel
http://url-to-laravel/test
แพ็คเกจจะตั้งค่าสถานที่แอปพลิเคชันของคุณ App::getLocale()
ตาม URL ของคุณ สถานที่นั้นอาจถูกใช้สำหรับคุณสมบัติการแปลของ Laravel
คุณสามารถเพิ่มมิดเดิลแวร์ให้กับกลุ่มของคุณได้ดังนี้:
Route:: group (
[
' prefix ' => LaravelLocalization:: setLocale (),
' middleware ' => [ ' localeSessionRedirect ' , ' localizationRedirect ' , ' localeViewPath ' ]
], function (){ //...
});
1. : ขอแนะนำ อย่างยิ่ง ให้ใช้มิดเดิลแวร์เปลี่ยนเส้นทาง URL ที่ไม่มีภาษาควรใช้เพื่อระบุเบราว์เซอร์/ภาษาเริ่มต้นเท่านั้น และเพื่อเปลี่ยนเส้นทางไปยัง URL ที่แปลแล้ว มิฉะนั้น เมื่อโรบ็อตเครื่องมือค้นหารวบรวมข้อมูล เช่น http://url-to-laravel/test
พวกเขาอาจได้รับเนื้อหาภาษาที่แตกต่างกันสำหรับการเข้าชมแต่ละครั้ง นอกจากนี้การมี URL หลายรายการสำหรับเนื้อหาเดียวกันยังทำให้เกิดปัญหาเนื้อหาซ้ำกับ SEO
2. : ขอแนะนำ อย่างยิ่ง ให้แปลลิงก์ของคุณเป็นภาษาท้องถิ่น แม้ว่าคุณจะใช้มิดเดิลแวร์การเปลี่ยนเส้นทางก็ตาม มิฉะนั้น คุณจะทำให้เกิดการเปลี่ยนเส้นทางอย่างน้อยหนึ่งครั้งทุกครั้งที่ผู้ใช้คลิกลิงก์ นอกจากนี้ URL การดำเนินการใดๆ จากแบบฟอร์มการโพสต์จะต้องได้รับการแปลเป็นภาษาท้องถิ่น เพื่อป้องกันไม่ให้เปลี่ยนเส้นทางไปยังคำขอรับ
มิดเดิลแวร์การเปลี่ยนเส้นทางต่อไปนี้ขึ้นอยู่กับการตั้งค่าของ hideDefaultLocaleInURL
และ useAcceptLanguageHeader
ใน config/laravellocalization.php
:
เมื่อใดก็ตามที่มีสถานที่อยู่ใน url สถานที่นั้นจะถูกจัดเก็บไว้ในเซสชันโดยมิดเดิลแวร์นี้
หากไม่มีสถานที่ใน url มิดเดิลแวร์นี้จะตรวจสอบสิ่งต่อไปนี้
useAcceptLanguageHeader
เป็นจริง ให้คำนวณภาษาจากเบราว์เซอร์และเปลี่ยนเส้นทางไปยัง url ด้วยภาษาhideDefaultLocaleInURL
ถูกตั้งค่าเป็นจริง ตัวอย่างเช่น หากผู้ใช้ไปที่ http://url-to-laravel/test และ en
คือสถานที่ปัจจุบัน ผู้ใช้จะเปลี่ยนเส้นทางไปยัง http://url-to-laravel/en/test โดยอัตโนมัติ
คล้ายกับ LocaleSessionRedirect แต่เก็บค่าไว้ในคุกกี้แทนที่จะเป็นเซสชัน
เมื่อใดก็ตามที่มีสถานที่อยู่ใน url สถานที่นั้นจะถูกจัดเก็บไว้ในคุกกี้โดยมิดเดิลแวร์นี้
ในไม่มีสถานที่อยู่ใน url มิดเดิลแวร์นี้จะตรวจสอบสิ่งต่อไปนี้
useAcceptLanguageHeader
เป็นจริง ให้คำนวณสถานที่จากเบราว์เซอร์และเปลี่ยนเส้นทางไปยัง url ด้วยสถานที่hideDefaultLocaleInURL
ถูกตั้งค่าเป็นจริง ตัวอย่างเช่น หากผู้ใช้ไปที่ http://url-to-laravel/test และ de
คือสถานที่ปัจจุบัน ผู้ใช้จะเปลี่ยนเส้นทางไปที่ http://url-to-laravel/de/test โดยอัตโนมัติ
เมื่อตำแหน่งที่ตั้งเริ่มต้นแสดงอยู่ใน url และ hideDefaultLocaleInURL
ถูกตั้งค่าเป็นจริง มิดเดิลแวร์จะเปลี่ยนเส้นทางไปยัง url ที่ไม่มีตำแหน่งที่ตั้ง
ตัวอย่างเช่น หาก es
เป็นภาษาเริ่มต้น http://url-to-laravel/es/test จะถูกเปลี่ยนเส้นทางไปที่ http://url-to-laravel/test และ App::getLocale()
จะถูกตั้งค่า ถึง es
แพ็คเกจนี้มาพร้อมตัวช่วยมากมาย
URL ที่แปลเป็นภาษาท้องถิ่นจะคำนึงถึงการเชื่อมโยงโมเดลเส้นทางเมื่อสร้างเส้นทางที่แปลแล้ว เช่นเดียวกับการตั้งค่า hideDefaultLocaleInURL
และเส้นทางที่แปล
// If current locale is Spanish, it returns `/es/test`
<a href="{{ LaravelLocalization:: localizeUrl ( ' /test ' ) }}">@ lang ( ' Follow this link ' )</a>
รับ URL ปัจจุบันในภาษาเฉพาะ:
// Returns current url with English locale.
{{ LaravelLocalization:: getLocalizedURL ( ' en ' ) }}
ส่งคืน URL ที่สะอาดปราศจากการแปลเป็นภาษาท้องถิ่น
// Returns /about
{{ LaravelLocalization:: getNonLocalizedURL ( ' /es/about ' ) }}
ส่งคืนเส้นทางที่แปลเป็นภาษาท้องถิ่นที่ต้องการ หากไม่มีคีย์การแปลในภาษาที่กำหนด ฟังก์ชันนี้จะคืนค่าเท็จ
// Returns /es/acerca
{{ LaravelLocalization:: getURLFromRouteNameTranslated ( ' es ' , ' routes.about ' ) }}
ตัวอย่างลิงก์ที่แปลเป็นภาษาท้องถิ่นโดยใช้เส้นทางที่มีคุณลักษณะ
// An array of attributes can be provided.
// Returns /en/archive/ghosts, /fr/archive/fantômes, /pt/arquivo/fantasmas, etc.
<a href="{{ LaravelLocalization:: getURLFromRouteNameTranslated ( App:: currentLocale (), ' routes.archive ' , array ( ' category ' => ' ghosts ' )) }}">Ghost Stories</a>
ส่งคืนสถานที่ที่รองรับทั้งหมดและคุณสมบัติเป็นอาร์เรย์
{{ LaravelLocalization:: getSupportedLocales () }}
ส่งคืนโลแคลที่รองรับทั้งหมดแต่ตามลำดับที่ระบุในไฟล์คอนฟิกูเรชัน คุณสามารถใช้ฟังก์ชันนี้เพื่อพิมพ์สถานที่ในตัวเลือกภาษา
{{ LaravelLocalization:: getLocalesOrder () }}
ส่งคืนอาร์เรย์พร้อมคีย์ทั้งหมดสำหรับสถานที่ที่รองรับ
{{ LaravelLocalization:: getSupportedLanguagesKeys () }}
ส่งคืนคีย์ของสถานที่ปัจจุบัน
{{ LaravelLocalization:: getCurrentLocale () }}
ส่งกลับชื่อสถานที่ปัจจุบันเป็นสตริง (อังกฤษ/สเปน/อารบิก/ ..ฯลฯ)
{{ LaravelLocalization:: getCurrentLocaleName () }}
ส่งกลับชื่อดั้งเดิมของสถานที่ปัจจุบันเป็นสตริง (อังกฤษ/สเปน/عربى/ ..ฯลฯ)
{{ LaravelLocalization:: getCurrentLocaleNative () }}
ส่งกลับชื่อภูมิภาคของสถานที่ปัจจุบันเป็นสตริง (en_GB/en_US/fr_FR/ ..etc)
{{ LaravelLocalization:: getCurrentLocaleRegional () }}
ส่งกลับทิศทางของสถานที่ปัจจุบันเป็นสตริง (ltr/rtl)
{{ LaravelLocalization:: getCurrentLocaleDirection () }}
ส่งคืนโค้ด ISO 15924 สำหรับสคริปต์โลแคลปัจจุบันเป็นสตริง "Latn", "Cyrl", "อาหรับ" ฯลฯ
{{ LaravelLocalization:: getCurrentLocaleScript () }}
ลงทะเบียนมิดเดิลแวร์ LaravelLocalizationViewPath
เพื่อตั้งค่าโลแคลปัจจุบันเป็น view-base-path
ตอนนี้คุณสามารถรวมมุมมองของคุณในโฟลเดอร์ตามภาษา เช่น ไฟล์การแปล
resources/views/en/
, resources/views/fr
, ...
เนื่องจากคุณสามารถแก้ไข supportLocales ได้โดยการเปลี่ยนชื่อคีย์ จึงเป็นไปได้ที่จะใช้สตริง uk
แทน en-GB
เพื่อจัดเตรียมเซ็กเมนต์ URL lang ที่กำหนดเอง แน่นอน คุณต้องป้องกันการชนกันกับคีย์ที่มีอยู่แล้ว และควรยึดถือแบบแผนให้นานที่สุด แต่ถ้าคุณใช้คีย์แบบกำหนดเอง คุณจะต้องจัดเก็บการแมปของคุณไว้ในอาร์เรย์ localesMapping
จำเป็นต้องมี localesMapping
ที่นี้เพื่อเปิดใช้งาน LanguageNegotiator เพื่อกำหนดสถานที่ที่ต้องการอย่างถูกต้องตามส่วนหัวภาษาที่ยอมรับ HTTP นี่คือตัวอย่างโดยย่อวิธีการแมปส่วนหัวภาษาที่ยอมรับ HTTP 'en-GB' กับส่วน URL 'uk':
// config/laravellocalization.php
' localesMapping ' => [
' en-GB ' => ' uk '
],
หลังจากนั้นจะกลายเป็น http://url-to-laravel/ http://url-to-laravel/en-GB/a/b/c
http://url-to-laravel/uk/a/b/c
LaravelLocalization:: getLocalizedURL ( ' en-GB ' , ' a/b/c ' ); // http://url-to-laravel/uk/a/b/c
LaravelLocalization:: getLocalizedURL ( ' uk ' , ' a/b/c ' ); // http://url-to-laravel/uk/a/b/c
หากคุณสนับสนุนหลายภาษาในโครงการของคุณ คุณอาจต้องการให้ผู้ใช้มีวิธีในการเปลี่ยนภาษา ด้านล่างนี้เป็นตัวอย่างง่ายๆ ของโค้ดเทมเพลตเบลดที่คุณสามารถใช้เพื่อสร้างตัวเลือกภาษาของคุณเอง
< ul >
@foreach ( LaravelLocalization :: getSupportedLocales () as $localeCode => $properties )
< li >
< a rel = " alternate " hreflang = " {{ $localeCode } } " href = " {{ LaravelLocalization :: getLocalizedURL ( $localeCode , null , [], true ) } } " >
{{ $properties [ ' native ' ] } }
</ a >
</ li >
@endforeach
</ ul >
ภาษาเริ่มต้นที่นี่จะถูกบังคับให้อยู่ใน getLocalizedURL() เพื่อให้ปรากฏใน URL แม้กระทั่ง hideDefaultLocaleInURL = true
โปรดทราบว่ารองรับการผูกโมเดลเส้นทาง
คุณสามารถแปลเส้นทางของคุณได้ ตัวอย่างเช่น http://url/en/about และ http://url/es/acerca (acerca เป็นเรื่องเกี่ยวกับภาษาสเปน) หรือ http://url/en/article/important-article และ http://url/ es/articulo/important-article (บทความคือ articulo ในภาษาสเปน) จะถูกเปลี่ยนเส้นทางไปยังตัวควบคุม/มุมมองเดียวกันดังนี้:
จำเป็นที่อย่างน้อยที่สุด localize
มิดเดิลแวร์ที่โหลดอยู่ในมิดเดิลแวร์ Route::group
ของคุณ (ดูคำแนะนำในการติดตั้ง)
สำหรับแต่ละภาษา ให้เพิ่ม routes.php
ลงในโฟลเดอร์ resources/lang/**/routes.php
ไฟล์นี้มีอาร์เรย์พร้อมเส้นทางที่แปลได้ทั้งหมด ตัวอย่างเช่นเช่นนี้:
โปรดทราบว่า: เริ่มต้นจาก Laravel 9 ตอนนี้โฟลเดอร์
resources/lang
จะอยู่ในโฟลเดอร์โปรเจ็กต์รูท (lang
) หากโปรเจ็กต์ของคุณมีโฟลเดอร์lang
อยู่ในรูท คุณต้องเพิ่มroutes.php
ลงในโฟลเดอร์lang/**/routes.php
<?php
// resources/lang/en/routes.php
return [
" about " => " about " ,
" article " => " article/{article} " ,
];
<?php
// resources/lang/es/routes.php
return [
" about " => " acerca " ,
" article " => " articulo/{article} " ,
];
คุณสามารถเพิ่มเส้นทางใน routes/web.php
ดังนี้:
Route:: group ([ ' prefix ' => LaravelLocalization:: setLocale (),
' middleware ' => [ ' localize ' ]], function () {
Route:: get (LaravelLocalization:: transRoute ( ' routes.about ' ), function () {
return view ( ' about ' );
});
Route:: get (LaravelLocalization:: transRoute ( ' routes.article ' ), function ( App Article $ article ) {
return $ article ;
});
//,...
});
เมื่อบันทึกไฟล์แล้ว คุณจะสามารถเข้าถึง http://url/en/about , http://url/es/acerca , http://url/en/article/important-article และ http://url/es/ บทความ/บทความสำคัญโดยไม่มีปัญหาใดๆ
บางทีคุณอาจสังเกตเห็นในตัวอย่างก่อนหน้านี้ว่าทากภาษาอังกฤษใน URL ภาษาสเปน:
http://url/es/articulo/important-article
เป็นไปได้ที่จะมีทากที่แปลแล้วเช่นนี้
http://url/en/article/important-change
http://url/es/articulo/cambio-importante
อย่างไรก็ตาม ในการดำเนินการนี้ แต่ละบทความจะต้องมีตัวทากจำนวนมาก (หนึ่งตัวสำหรับแต่ละภาษา) ขึ้นอยู่กับคุณว่าคุณต้องการใช้ความสัมพันธ์นี้อย่างไร ข้อกำหนดเพียงอย่างเดียวสำหรับพารามิเตอร์เส้นทางที่แปลได้คือ โมเดลที่เกี่ยวข้องจะใช้อินเทอร์เฟซ LocalizedUrlRoutable
หากต้องการใช้งาน McamaraLaravelLocalizationInterfacesLocalizedUrlRoutable
เราต้องสร้างฟังก์ชัน getLocalizedRouteKey($locale)
ซึ่งจะต้องส่งคืนทากที่แปลแล้วสำหรับสถานที่ที่กำหนด ในตัวอย่างข้างต้น ภายในบทความโมเดล getLocalizedRouteKey('en')
ควรส่งคืน important-change
และ getLocalizedRouteKey('es')
ควรส่งคืน cambio-importante
หากต้องการใช้การผูกโมเดลเส้นทาง ควรเขียนทับฟังก์ชัน resolveRouteBinding($slug)
ในโมเดล ฟังก์ชันควรส่งคืนโมเดลที่เป็นของ $slug
slug ที่แปลแล้ว ตัวอย่างเช่น:
public function resolveRouteBinding ( $ slug )
{
return static :: findByLocalizedSlug ( $ slug )-> first () ?? abort ( 404 );
}
คุณอาจต้องการดูวิดีโอนี้ซึ่งสาธิตวิธีการตั้งค่าพารามิเตอร์เส้นทางที่แปลได้
คุณสามารถบันทึกพารามิเตอร์ URL ในระหว่างการแปลได้หากต้องการแปลด้วยเช่นกัน ในการทำเช่นนั้น เพียงสร้างตัวฟังเหตุการณ์สำหรับเหตุการณ์ routes.translation
แปลดังนี้:
Event:: listen ( ' routes.translation ' , function ( $ locale , $ attributes )
{
// Do your magic
return $ attributes ;
});
อย่าลืมส่งภาษาและแอตทริบิวต์เป็นพารามิเตอร์ไปยังการปิด คุณอาจใช้ Event Subscribers ดู: http://laravel.com/docs/events#event-subscribers
หากต้องการแคชเส้นทางของคุณ ให้ใช้:
php artisan route:trans:cache
... แทนคำสั่ง route:cache
ปกติ การใช้ artisan route:cache
จะทำงาน ไม่ ถูกต้อง!
เพื่อให้โซลูชันการแคชเส้นทางทำงานได้ จำเป็นต้องทำการปรับเปลี่ยนเล็กน้อยในการเตรียมเส้นทางแอปพลิเคชันของคุณ
ก่อน laravel 11
ใน RouteServiceProvider
ของแอปของคุณ ให้ใช้ลักษณะ LoadsTranslatedCachedRoutes
:
<?php
class RouteServiceProvider extends ServiceProvider
{
use Mcamara LaravelLocalization Traits LoadsTranslatedCachedRoutes;
หลังจาก laravel 11
ใน AppServiceProvider
ของแอปของคุณ ให้ใช้คลาส CachedTranslatedRouteLoader
ในวิธีการลงทะเบียน:
<?php
class AppServiceProvider extends ServiceProvider
{
use Mcamara LaravelLocalization Traits LoadsTranslatedCachedRoutes;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
RouteServiceProvider:: loadCachedRoutesUsing ( fn () => $ this -> loadCachedRoutes ());
. . .
}
สำหรับรายละเอียดเพิ่มเติมดูที่นี่
กรณีนี้อาจเกิดขึ้นหากคุณไม่แปลเส้นทางการดำเนินการของคุณที่อยู่ภายใน Routes::group
ของคุณ ซึ่งอาจทำให้เกิดการเปลี่ยนเส้นทาง ซึ่งจากนั้นจะเปลี่ยนคำขอโพสต์เป็นคำขอรับ เพื่อป้องกันสิ่งนั้น เพียงใช้ตัวช่วยแปล
ตัวอย่างเช่น หากคุณใช้ Auth::routes()
และใส่ไว้ใน Route::group
จากนั้น
<form action="/logout" method="POST">
<button>Logout</button>
</form>
จะไม่ทำงาน เลยต้องใช้แทน
<form action ="{{ LaravelLocalization:: localizeURL ( ' /logout ' ) }} " method= " POST ">
<button>Logout</button>
</form>
อีกวิธีในการแก้ปัญหานี้คือการใส่วิธี http เพื่อกำหนดค่าเป็น 'laravellocalization.httpMethodsIgnored' เพื่อป้องกันการประมวลผลคำขอประเภทนี้
หากคุณไม่ได้แปล URL โพสต์ของคุณเป็นภาษาท้องถิ่นและใช้มิดเดิลแวร์เปลี่ยนเส้นทาง คำขอโพสต์จะถูกเปลี่ยนเส้นทางเป็นคำขอรับ หากคุณไม่ได้กำหนดเส้นทางการรับดังกล่าว คุณจะทำให้เกิดข้อยกเว้นนี้
หากต้องการแปล URL ของโพสต์ของคุณ โปรดดูตัวอย่างใน POST ไม่ทำงาน
สิ่งนี้จะเกิดขึ้นหากคุณไม่ได้แปล URL โพสต์ของคุณเป็นภาษาท้องถิ่น หากคุณไม่แปล URL ของโพสต์เป็นภาษาท้องถิ่น ระบบจะตั้งค่าภาษาเริ่มต้นขณะตรวจสอบ และเมื่อย้อนกลับไปที่ back()
ก็จะแสดงข้อความตรวจสอบเป็นภาษาเริ่มต้น
หากต้องการแปล URL ของโพสต์ของคุณ โปรดดูตัวอย่างใน POST ไม่ทำงาน
ในระหว่างการตั้งค่าการทดสอบ ยังไม่ทราบเส้นทางที่เรียก ซึ่งหมายความว่าไม่สามารถตั้งค่าภาษาได้ เมื่อมีการร้องขอในระหว่างการทดสอบ ผลลัพธ์ที่ได้คือ 404 - หากไม่มีการตั้งค่าคำนำหน้า ดูเหมือนว่าเส้นทางที่แปลแล้วจะไม่มีอยู่
เพื่อแก้ไขปัญหานี้ คุณสามารถใช้ฟังก์ชันนี้เพื่อตั้งค่าคำนำหน้าภาษาด้วยตนเอง:
// TestCase.php
protected function refreshApplicationWithLocale ( $ locale )
{
self :: tearDown ();
putenv (LaravelLocalization:: ENV_ROUTE_KEY . ' = ' . $ locale );
self :: setUp ();
}
protected function tearDown (): void
{
putenv (LaravelLocalization:: ENV_ROUTE_KEY );
parent :: tearDown ();
}
// YourTest.php
public function testBasicTest ()
{
$ this -> refreshApplicationWithLocale ( ' en ' );
// Testing code
}
ถาม mcamara หากคุณต้องการเป็นหนึ่งในนั้น!
ดูบันทึกการเปลี่ยนแปลงที่นี่ -> บันทึกการเปลี่ยนแปลง
Laravel Localization เป็นแพ็คเกจ laravel แบบโอเพ่นซอร์สที่ได้รับอนุญาตภายใต้ใบอนุญาต MIT