thinkphp8.0.2 多国语言 自动侦测 会跳回默认设置语言
因为使用了多应用模式 MultiApp.php多使用了一次默认语言 但是并没有多执行一次中间件\think\middleware\LoadLangPack
所以会跳回默认语言。导致无法设置不同语言。
\tp8\tp\vendor\topthink\framework\src\think\App.php
第一次使用默认语言
\tp8\tp\vendor\topthink\think-multi-app\src\MultiApp.php
多应用模式第二次使用默认语言
当前的解决方案是先注释掉MultiApp.php中的
//
t
h
i
s
−
>
a
p
p
−
>
l
o
a
d
L
a
n
g
P
a
c
k
(
this->app->loadLangPack(
this−>app−>loadLangPack(this->app->lang->defaultLangSet());
TP6多应用也同样的多加载了一次默认语言但是可以正常使用。
```php
protected function loadApp(string $appName, string $appPath): void
{
if (is_file($appPath . 'common.php')) {
include_once $appPath . 'common.php';
}
$files = [];
$files = array_merge($files, glob($appPath . 'config' . DIRECTORY_SEPARATOR . '*' . $this->app->getConfigExt()));
foreach ($files as $file) {
$this->app->config->load($file, pathinfo($file, PATHINFO_FILENAME));
}
if (is_file($appPath . 'event.php')) {
$this->app->loadEvent(include $appPath . 'event.php');
}
if (is_file($appPath . 'middleware.php')) {
$this->app->middleware->import(include $appPath . 'middleware.php', 'app');
}
if (is_file($appPath . 'provider.php')) {
$this->app->bind(include $appPath . 'provider.php');
}
// 加载应用默认语言包
//$this->app->loadLangPack($this->app->lang->defaultLangSet());
}