Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
718 views
in Technique[技术] by (71.8m points)

php - Lumen fails to change locale

I have an almost fresh installation of Lumen.

I have a POST route which leads to one Controller. In the request I send lang parameter with a string value.

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

I have one folder more in my /resources/lang/ folder called bg. In this folder I have simple file which has an array just like in resources/lang/en/validation.php - called static.php.

In the view I'm displaying I have few lines that say:

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

The text I've set in those lang files in resources/lang/... are properly displayed, but I cannot change the locale before displaying the form.

For example, if in my dotenv file I set:

APP_LOCALE=en

And load the view the strings in resources/lang/en/static.php are loaded. If I change the APP_LOCALE to bg and load the view again, I get the strings from resources/lang/bg/static.php.

All I want is to set the locale before rendering the view, which doesn't seem to work with the code (in my controller) I provided above.

Also I couldn't find any information about localization in Lumen on the official site, but I suppose it supports such, since trans() is working.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You are changing the config after it is loaded, which has no effect. To change the locale at runtime use the setLocale() method on the app instance:

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

Edit

The first answer seem to only work on Laravel. To change the locale at runtime with Lumen use this:

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...