경로에서 현지화를 무시하는 Livewire를 수정하는 방법
en-gb
(영국/국제) en-au
(호주) en-us
(미국) 프로젝트는 구성 파일
sites.php
을 사용하여 번역 파일에서 관리할 수 없는 각 사이트의 데이터를 관리합니다. 이 데이터는 사용자 정의 파사드를 통해 액세스할 수 있습니다.LocaleSettings::get('default_currency');
후드 아래에서 이것은 다음을 수행합니다.
return config('sites')[app()->getLocale()][$key];
이러한 각 로케일에는 서로 다른 통화가 있습니다.
노선
통화
기본
en-gb
GBP, USD, ZAR, 유로
GBP
en-au
호주 달러
호주달러
en-us
미국 달러, 영국 파운드
미화
통화 또는 로캘이 변경되면 해당 통화에 대한 올바른 가격을 표시하도록 페이지의 카트 및 제품 구성 요소가 새로 고쳐집니다.
이것은 Livewire를 통해 통화를 변경할 때 잘 작동합니다.
그러나 로케일을 전환할 때 통화를 초기 로드 시 잘 작동하는 기본 통화로 설정하지만 Livewire가 구성 요소가 업데이트될 때 POST 요청을 수행할 때(예: 장바구니에 추가할 때) GBP의 대체 통화로 다시 재설정됩니다. .
이것은 경로의 로케일이 변경되고 있기 때문입니다. 이는 Livewire가 서버에 POST 요청을 할 때 지역화된 경로를 사용하지 않기 때문에 발생합니다.
이를 위해 다음 코드를 사용하여
LocalizationLivewire
라는 새 미들웨어를 만들었습니다.<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class LocalizationLivewire
{
public function handle(Request $request, Closure $next)
{
if ($request->route()->getName() === 'livewire.message') {
app()->setLocale($request->request->get('fingerprint')['locale']);
return $next($request);
}
return $next($request);
}
}
그리고 이것을
Localization
의 내 Kernel.php
미들웨어 위에 추가했습니다.이 미들웨어는 구성 요소가 업데이트될 때 Livewire POST 요청에 대한 경로 이름인 경로 이름이
livewire.message
인지 확인합니다.그런 다음 앱 로케일을 요청의 지문에 있는 로케일 값으로 설정합니다. 지문이 무엇인지 확실하지 않은 경우 다음은 Caleb Porzio의 블로그How Livewire Works (a deep dive)의 스니펫입니다.
This is data associated with a component that makes it unique and provides essential non-changing information about it.
"fingerprint": {
"id": "44Njb4Yue0jBTzpzRlUf",
"name": "counter",
"locale": "en",
"path": "",
"method": "GET"
},
그리고 그것은 기본적으로 거기에서 예상대로 작동했습니다. 내 머리를 벽에 부딪힌 몇 시간 후 (그리고 나는 몇 시간을 의미합니다) 그런 쉬운 수정.
Reference
이 문제에 관하여(경로에서 현지화를 무시하는 Livewire를 수정하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/markmead/how-to-fix-livewire-ignoring-localization-in-routes-6i3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)