【问题标题】:change language of page when nav link clicked单击导航链接时更改页面语言
【发布时间】:2019-06-17 15:55:02
【问题描述】:

我想用两种语言开发我的网站,并想更改导航链接点击的语言。

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Input;
use App;
use Lang;


class LanguageController extends Controller
{
    public function setLocale($locale='en')
    {
        if (!in_array($locale, ['en', 'ja'])) {
            $locale = 'en';
        }

        Session::put('locale', $locale);
        redirect()->back();
    }
}

路线

Route::get('locale/{locale?}', array('as'=>'set-locale', 
            'uses'=>'LanguageController@setLocale'));

中间件

<?php

namespace App\Http\Middleware;
use Closure;
use Session;
use Config;
use App;

class Locale
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $locale=Session::get('locale', Config::get('app.locale'));
        App()->setLocale($locale);

        return $next($request);
    }
}

观看次数

<li class="nav-item">
    <a class="nav-link" href="{{ url('/locale/en') }}">English</a>
</li>
<li class="nav-item">
    <a class="nav-link" href="{{ url('/locale/ja') }}">Japanese</a>
</li>

这就是我使用语言键的方式

{{trans('home.Services')}}

我在 jaen 中创建了两个 home.php 并在此处设置语言

当我单击导航链接时,页面将转到 localhost/../locale/ja。我不知道我在哪里犯错。我还将内核中间件设置为 \App\Http\Middleware\Locale::class, 。提前感谢您的帮助。

【问题讨论】:

  • 你可能是 kernel.php 的错误。可以肯定的是,在$routeMiddleware 上检查您是否添加了'locale' =&gt; \App\Http\Middleware\Locale::class,
  • 是的,我已经添加了
  • 你说你在内核$middleware上添加了它。它应该在$routeMiddlewere
  • 我在中间件上有 App\Http\Middleware\Locale::class 和你所说的 routemiddleware
  • $middleware 数组中删除 App\Http\Middleware\Locale::class,。只需在$routeMiddleware 数组上添加'locale' =&gt; \App\Http\Middleware\Locale::class,

标签: laravel localization


【解决方案1】:

kernel.php &gt; routeMiddleware 添加这个。

protected $routeMiddleware = [
//... other lines of code.    
    'locale' => \App\Http\Middleware\Locale::class,
];

并将视图更改为,

<li class="nav-item">
    <a class="nav-link" href="{{ route('set-locale', 'en') }}">English</a>
</li>
<li class="nav-item">
    <a class="nav-link" href="{{ route('set-locale', 'ja') }}">Japanese</a>
</li>

我不确定,这是否是一个问题,将路由更改为,[只需添加一个'/'。]

Route::get('/locale/{locale?}', array('as'=>'set-locale', 
            'uses'=>'LanguageController@setLocale'));

【讨论】:

  • 试过同样的问题。我需要在路由中设置前缀并添加所有其他路由以在该组内查看吗?我不明白为什么我在点击日语时会被重定向到 /locale/ja
  • 在我的中间件中添加了 \Illuminate\Session\Middleware\StartSession::class 并且它有效。感谢您的帮助
  • 不知道,在我的内核中,它是否可用(默认情况下)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 2021-09-21
  • 2021-06-18
  • 2018-08-23
  • 2023-03-31
相关资源
最近更新 更多