【问题标题】:Localization without route prefix doesn't work没有路由前缀的本地化不起作用
【发布时间】:2016-03-31 01:30:20
【问题描述】:

我正在使用 Laravel 文档来实现本地化(网址中没有前缀)。

基本上我想要两个链接“EN”和“NL”。根据我单击的链接,区域设置应更改为该特定语言。

我使用这个链接:

<a href="/language/benl">NL</a>
<a href="/language/en">EN</a>

这条路线:

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

这是我的HomeController:

class HomeController extends Controller
{

    public function setLang($locale){
        App::setLocale($locale);
        return back();
    }
}

我将我的文件设置在 resources/lang 中,就像文档中解释的那样。 但是,输出 ({{ trans('messages.welcome') }}) 没有翻译。

我做错了什么? :)

更新

<a href="/auth/register">{{ trans('header.register') }}</a>

路线

Route::group(['middleware' => ['language']], function () {
    //
    Route::get('language/{locale}', 'HomeController@setLang');

});

语言文件:

return [
    'register' => 'REGISTREER',
];

我的内核.php

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'language' => \App\Http\Middleware\Language::class,
    ];

【问题讨论】:

    标签: laravel localization laravel-5.1


    【解决方案1】:

    如果您不想为网址添加前缀,可以将session 与middleware 结合使用。

    您只需要一个controller 和一个middleware。

    App\Http\Controllers\HomeController 方法:

    class HomeController extends Controller
    {
        public function setLang($locale)
        {
            // 1. store selected locale
            Session::put('my_project.locale', $locale);
    
            return back();
        }
    }
    

    App\Http\LocaleMiddleware 方法:

    class LocaleMiddleware
    {
        public function handle($request, Closure $next)
        {
            $default = config('app.locale');
    
            // 2. retrieve selected locale if exist (otherwise return the default)
            $locale = Session::get('my_project.locale', $default);
    
            // 3. set the locale
            App::setLocale($locale);
    
            return $next($request);
        }
    }
    

    不要忘记register the middleware 全球。

    【讨论】:

    • 这是key 的假名,可以是任何名称。
    • 您能否提供更多有关您的解决方案的信息?我假设我需要在我的 /language/{locale} 路由上添加一个中间件组?
    • 我做了你建议的一切。在 $locale 传递给 App::setLocale($locale); 之前我死了并丢弃了它,它返回了正确的语言,仍然没有任何变化.. :/
    • 您没有在resources/lang 中正确设置文件然后:\
    • 正如我上面所说的,您应该全局注册middleware。 laravel.com/docs/5.1/middleware#registering-middleware
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    相关资源
    最近更新 更多