php - การแปล Laravel ทำให้เกิดข้อผิดพลาด htmlspecialchars ()
เมื่อฉันพยายามใช้การแปลเป็นภาษาท้องถิ่นและดึงสตริงการแปล Laravel จะส่ง: .
จากตัวควบคุมไปยังมุมมอง (ดัชนีผลิตภัณฑ์ หน้า) ฉันส่งตัวแปร $products
ในหน้านั้น ฉันใช้สตริงการแปล {{ __(\'Products\') }}
และได้รับข้อผิดพลาด htmlspecialchars()
ตามที่ฉันเข้าใจ สตริงการแปลด้วยเหตุผลบางอย่างคิดว่าฉันส่งตัวแปร $products
ไปยังสตริงการแปล {{ __(\'Products\') }}
เพราะถ้าฉันเปลี่ยนการแปล สตริง (เช่น) {{ __(\'Products page\') }}
ฉันไม่ได้รับข้อผิดพลาดนี้อีกต่อไป ใครช่วยอธิบายหน่อยได้ไหมว่าทำไมข้อผิดพลาดนี้จึงเกิดขึ้น
ตัวควบคุม
รหัสเมื่อเกิดข้อผิดพลาด
รหัส เมื่อไม่มีข้อผิดพลาดเกิดขึ้นอีก
อัปเดต
แก้ไขปัญหาเมื่อเพิ่มไฟล์ en.json ในโฟลเดอร์ lang
Answer
วิธีแก้ปัญหา:
protected $middlewareGroups = [
\'web\' => [
\\App\\Http\\Middleware\\Localization::class,
],
คุณเพิ่มมิดเดิลแวร์ที่สร้างขึ้นนี้ลงในรายการ จากนั้นคุณไปที่ ไฟล์เส้นทาง web.php และเพิ่ม
Route::get(\'/locale/{locale}\', function ($locale){
\\Session::put(\'locale\', $locale);
return redirect()->back();
})->name(\'traduction\');
et ensuite vous pouvez récupérer la session de cette facon
<a href="{{route(\'traduction\',[\'locale\'=>\'en\'])}}" class="menu-link d-flex px-5 active">
<a href="{{route(\'traduction\',[\'locale\'=>\'fr\'])}}" class="menu-link d-flex px-5 active">
ในกรณีที่ต้องการแสดงรูปภาพตามเซสชั่น
\ n<a href="#" class="menu-link px-5">
<span class="menu-title position-relative">Langue {{ Session::get(\'locale\') }}
@if (Session::get(\'locale\') == "fr")
<span class="fs-8 rounded bg-light px-3 py-2 position-absolute translate-middle-y top-50 end-0">Francais
<img class="w-15px h-15px rounded-1 ms-2" src="assets/media/flags/france.svg" alt="" /></span></span>
@else
<span class="fs-8 rounded bg-light px-3 py-2 position-absolute translate-middle-y top-50 end-0">English
<img class="w-15px h-15px rounded-1 ms-2" src="assets/media/flags/united-states.svg" alt="" /></span></span>
@endif
</a>
ขออภัย คุณต้องใช้ทั้งสองคำตอบเนื่องจากเป็นส่วนเสริม
Answer
วิธีแก้ไข:
ตามจริงแล้ว ฉันไม่ทำอย่างนั้น อันที่จริงฉันสร้างตัวกลางและสร้างเส้นทางที่ยุติธรรม มาดูกรณีของภาษาฝรั่งเศสและภาษาอังกฤษกัน มาสร้างมิดเดิลแวร์กันเถอะ
php artisan make:middleware Localisation
จากนั้นเติมมิดเดิลแวร์
<?php
namespace App\\Http\\Middleware;
use Closure;
use Illuminate\\Http\\Request;
class Localization
{
public function handle(Request $request, Closure $next)
{
if(\\Session::has(\'locale\'))
{
\\App::setlocale(\\Session::get(\'locale\'));
}
return $next($request);
}
}
Source