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