"php": ">=7.2",
"workerman/webman-framework": "^1.4.3",
"illuminate/validation": "^9.52",
"symfony/translation": "^6.0"
采用APIPOST接口請(qǐng)求軟件,通過(guò)傳header參數(shù)accept-language
實(shí)時(shí)更換語(yǔ)言
采用locale()設(shè)置語(yǔ)言中間件,本地語(yǔ)言包完全可以切換,但是illuminate/validation
插件無(wú)法實(shí)時(shí)切換語(yǔ)言,只能重啟項(xiàng)目后生效,想大佬幫忙看看怎么回事
方式一和方式二都試過(guò)都是同樣的效果
namespace hope\middleware;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
class Lang implements MiddlewareInterface
{
/**
* @param Request $request
* @param callable $handler
* @return Response
*/
public function process(Request $request, callable $handler): Response
{
// 方式一:通過(guò)設(shè)置session
$session = $request->session();
$session->set('lang', getAcceptLang());
// 方式二:通過(guò)實(shí)時(shí)獲取accept_language設(shè)置
locale(getAcceptLang());
var_dump(getAcceptLang());
return $handler($request);
}
}
通過(guò)手動(dòng)修改語(yǔ)言參數(shù)translationLocale是會(huì)手動(dòng)生效的(因?yàn)轫?xiàng)目會(huì)重啟),但是當(dāng)?shù)谝淮卧O(shè)置英語(yǔ)en參數(shù)進(jìn)行接口軟件APIPOST調(diào)試是可以生效的,但是第二次設(shè)置中文zh_cn參數(shù)則不生效!
public static function getInstance(string $translationLocale = 'zh_cn'): Factory
{
if (null === static::$instance) {
$translationPath = hope_path() . '/resource/translations';
$transFileLoader = new FileLoader(new Filesystem, $translationPath);
$translator = new Translator($transFileLoader, session('lang'));
static::$instance = new Factory($translator);
}
return static::$instance;
}
我想是不是代碼緩存了,還是通過(guò)上次請(qǐng)求過(guò)的參數(shù)響應(yīng)結(jié)果。希望大佬們可以幫忙看看怎么回事
你用的單例,所以這個(gè)初始化語(yǔ)言代碼只會(huì)執(zhí)行一次,第一次是初始化的時(shí)候是 zh_cn ,那么以后所有請(qǐng)求都是zh_cn 了,這個(gè)應(yīng)該很好理解。你應(yīng)該每種語(yǔ)言都初始化一個(gè)instance,然后根據(jù)語(yǔ)言選擇不同的instance
public static $instance = [];
public static function getInstance(string $translationLocale = 'zh_cn'): Factory
{
if (!isset(static::$instance[$translationLocale]) {
$translationPath = hope_path() . '/resource/translations';
$transFileLoader = new FileLoader(new Filesystem, $translationPath);
$translator = new Translator($transFileLoader, $translationLocale);
static::$instance[$translationLocale] = new Factory($translator);
}
return static::$instance[$translationLocale];
}
這樣才對(duì)
大佬 請(qǐng)問(wèn)你是如何使用illuminate/validation的?我使用的時(shí)候報(bào)錯(cuò)提示A facade root has not been set.