【问题标题】:Localization Laravel don't work "setLocale::"本地化 Laravel 不起作用“setLocale::”
【发布时间】:2017-02-28 20:50:00
【问题描述】:

我使用 laravel 5.3 和 setLocale 不工作

如果我在路线中使用setLocate -> 不起作用,例如:

Route::get('loc/{locale?}', function($locale) {
App::setLocale($locale);
return redirect()->back();});

但是,如果我在文件路径的其他地方使用它,它就可以工作! 我在代码中提到的表示:

$locale = 'en';
App::setLocale($locale);

我使用家庭控制器:

Route::get('loc/{locale}', 'HomeController@language');

在文件主控制器中:

public function language($locale)
{
    App::setLocale($locale);
    return redirect()->back();
}

这个方法也不行

【问题讨论】:

  • 您有错误吗?如果没有,你可以在你的控制器中设置区域设置后显示dd(app()->getLocale()) 吗?
  • 不,我没有错误。如果我在setLocate 之后使用dd(app()->getLocale()),我会看到-“en”或“ru”这就是我选择的,但我的语言不会在网站上改变。如果我在文件app.php 中更改语言 -> 好,我的语言变化

标签: laravel localization routes


【解决方案1】:

事实上,App::setLocale($locale) 并没有保留您的更改。因此,如果您想要一种动态更改语言环境的方式,您有 2 个选项:

  1. 在 URI 中添加语言环境:ru.example.comexample.com/ru

然后您可以从请求中捕获语言环境。

  1. 将用户或应用程序的区域设置保留在数据库中。

当您点击example.com/ru 时,会发生以下情况:

// HomeController.php
public function language($locale)
{
    // Validate locale if needed

    // Update or create the locale in settings table
    App\Setting::updateOrCreate(['name' => 'locale'], ['value' => $locale]);

    // Redirect back
    return redirect()->back();
}

然后在你的App\Providers\AppServiceProvider

// App/Providers/AppServiceProvider.php
public function boot()
{
    // Get the locale stored in the settings table
    $locale = App\Setting::where('name', 'locale')->first();

    // Setup the app locale
    app()->setLocale($locale ? $locale->value : config('app.locale'));
}

所以你的settings 表看起来像这样:

id | name      | value
-- | --------- | ---------------
1  | locale    | ru
2  | timezone  | Europe/Brussels
3  | copyright | @2016 ACME Inc

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2016-05-11
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多