流明无法更改语言环境

Lumen fails to change locale

我几乎全新安装了 Lumen。

我有一条通往一个控制器的 POST 路线。在请求中,我发送带有字符串值的 lang 参数。

public function form(Request $request)
{
    if ($request->has('lang')) {
        app('config')->set('app.locale', $request->input('lang'));
    }
    return view('form');
}

我的 /resources/lang/ 文件夹中还有一个名为 bg 的文件夹。在这个文件夹中,我有一个简单的文件,它有一个数组,就像 resources/lang/en/validation.php - 叫做 static.php.

在我显示的视图中,有几行内容是:

<input type="text" name="email" value="" class="input-default" placeholder="{{trans('static.enter_email')}}"/>

我在 resources/lang/... 中的那些 lang 文件中设置的文本可以正确显示,但是 我无法在显示表单之前更改语言环境。

例如,如果在我的 dotenv 文件中设置:

APP_LOCALE=en

并加载 resources/lang/en/static.php 中的字符串的视图。 如果我将 APP_LOCALE 更改为 bg 并再次加载视图,我会从 resources/lang/bg/static.php.

获取字符串

我只想在渲染视图之前设置语言环境,这似乎不适用于我上面提供的代码(在我的控制器中)。

我在官方网站上也找不到任何关于 Lumen 本地化的信息,但我想它支持这样,因为 trans() 正在工作。

您在加载后更改配置,这没有任何效果。要在运行时更改语言环境,请在应用程序实例上使用 setLocale() 方法:

app()->setLocale($request->input('lang'));

编辑

第一个答案似乎只适用于 Laravel。要在运行时使用 Lumen 更改区域设置,请使用:

app('translator')->setLocale($request->input('lang'));

在运行时更改区域设置因框架而异。 您可以使用外观或辅助函数:

对于流明:

Lang::setLocale('lang');

app('translator')->setLocale('lang');

对于Laravel:

App::setLocale('lang');

app()->setLocale('lang');