没有前缀的Laravel多语言路由

时间:2019-04-30 12:31:41

标签: php laravel

当前,我的系统使用2种语言,分别是英语和德语。我的目标是通过在提到的语言之间进行切换来浏览以下路线-

base-url/contact - for english
base-url/kontakte - for german

当前,我需要在资源文件夹中放置路由文件,并在其中放置了必要的翻译词。

resources/lang/en/routes.php
resources/lang/de/routes.php

目前在web.php中-

Route::get(r('contact'), 'TestController@index')->name('contact');

通过r()辅助函数,我得到了活动的翻译单词。

在用户表上,当我从用户个人资料中更新语言时,我有一个区域设置列,用于存储活动语言-

\Session::put('locale', $request->input('locale'));

我已经创建了一个中间件本地化版本-

public function handle($request, Closure $next)
    {
        if ( \Session::has('locale')) {
            \App::setLocale(\Session::get('locale'));
            Carbon::setLocale(\Session::get('locale'));
        }

        return $next($request);
    }

当前,该代码对于刀片翻译的单词运行正常。但翻译的路线无效。每当我切换并访问任何路线时,都会出现404错误。但是,如果我通过PHP artisan serve重新启动服务器,则可以使用更改的语言。

那么如何解决该问题?

1 个答案:

答案 0 :(得分:0)

:)尝试将\App::setLocale(\Session::get('locale')放在路由文件(routes.php或web.php / api.php)的开头