首页 > 解决方案 > 在多语言 laravel 上找不到页面错误

问题描述

我在我的网站上使用本地化。本地化在一页上正常工作。当我们重定向到其他页面时,该页面正在使用我们在上一页中选择的语言加载。我们正在更改当前页面上的语言我收到错误“找不到页面”。为什么加载此错误。

这里的 url 更改为http://127.0.0.1:8000/localisation/lang/mal。我需要http://127.0.0.1:8000/localisation/create

layout.mainaster.blade.php

  <!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>{{ config('app.name', 'Laravel') }}</title>
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
<div id="app">
    <div style="background-color: #f8f9fa;">
        <nav class="navbar navbar-expand-lg navbar-light bg-light container">
            <a href="https://www.mynotepaper.com/" target="_blank"><img src="https://i.imgur.com/hHZjfUq.png"
                                                                        width="140px;"></a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02"
                    aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>

            <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
                <!-- Right Side Of Navbar -->
                <ul class="navbar-nav ml-auto">
                    <!-- Authentication Links -->
                    @php $locale = session()->get('locale'); @endphp
                    <li class="nav-item dropdown">
                        <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button"
                           data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
                            @switch($locale)
                                @case('us')
                                <img src="{{asset('img/us.png')}}"> English
                                @break
                                @case('mal')
                                 Mlayalam
                                @break
                                @case('in')
                                 Hindi
                                @break
                                @default
                                 English
                            @endswitch
                            <span class="caret"></span>
                        </a>
                        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
                            <a class="dropdown-item" href="lang/en"> English</a>
                            <a class="dropdown-item" href="lang/mal"> Mlayalam</a>
                            <a class="dropdown-item" href="lang/in"> Hindi</a>
                        </div>
                    </li>
                </ul>
            </div>
        </nav>
    </div>

    <main class="py-4">
        @yield('content')
    </main>
</div>

<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
</body>
</html>

控制器

  <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App;
use App\Localization;

class LocalizationController extends Controller
{
    //
    public function index1($locale)
    {
        App::setLocale($locale);
        // store the locale in session so that the middleware can register it
        session()->put('locale', $locale);
        return redirect()->back();
    }

    public function index()
    {
        $data=Localization::get();
        return view('localisation.index',[
            'localizationdata' =>$data
        ]);
    }

    public function create()
    {
        return view('localisation.create');
    }
}
?>

模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Localization extends Model
{
    //
    use SoftDeletes;

     protected $table = 'demo';
     protected $primaryKey = 'id';

     public $timestamps = true;

     protected $dates = ['deleted_at'];
}

创建.blade.php

@extends('layouts.mainmaster')
@section('content')


           <div class="row">
               <div class="col-lg-12">
                   
                  <form role="form" action="{{action('LocalizationController@store')}}" method="post" enctype="multipart/form-data">
                      {{ csrf_field() }}      
                     <!-- START card-->
                     <div class="card card-default">
                        <div class="card-header">
                           <div class="card-title">Create</div>
                        </div>
                        
                        <div class="card-body">
                           <fieldset>
                               <div class="form-group row">
                            <label class="col-md-2 col-form-label">{{ __('create.name')}}</label>
                            <div class="col-md-6">
                               <input type="text" class="form-control" required="required" name="name" placeholder="{{ __('create.name')}}">
          
                            </div>
                            @if ($errors->has('name'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('name') }}</strong>
                                    </span>
                                @endif 
                            </div>
                           </fieldset>
                           <fieldset>
                            <div class="form-group row">
                            <label class="col-md-2 col-form-label">{{ __('create.ph')}}</label>
                            <div class="col-md-6">
                               <input type="text" class="form-control" required="required" name="ph" placeholder="{{ __('create.ph')}}">
          
                            </div>
                            @if ($errors->has('ph'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('ph') }}</strong>
                                    </span>
                                @endif 
                            </div>
                           </fieldset>
                           <fieldset>
                            <div class="form-group row">
                            <label class="col-md-2 col-form-label">{{ __('create.address')}}</label>
                            <div class="col-md-6">
                                <input type="text" class="form-control" required="required" name="address" placeholder="{{ __('create.address')}}">
                            </div>
                            @if ($errors->has('address'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('address') }}</strong>
                                    </span>
                                @endif 
                            </div>
                           </fieldset>
                           <fieldset>
                            <div class="form-group row">
                            <label class="col-md-2 col-form-label">{{ __('create.email')}}</label>
                            <div class="col-md-6">
                                <input type="text" class="form-control" required="required" name="email" placeholder="{{ __('create.email')}}">
                            </div>
                            @if ($errors->has('email'))
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif 
                            </div>
                           </fieldset>
                        </div>
                        <div class="card-footer text-center"><button class="btn btn-info" type="submit" value="submit">Create</button>
                        </div>
                     </div><!-- END card-->
                  </form>
               </div>
            </div><!-- END row-->


@endsection

中间件:

<?php

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

class Localization
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (session()->has('locale')) {
            App::setLocale(session()->get('locale'));
        }
        return $next($request);
    }
}

路线:

Route::get('lang/{locale}', 'LocalizationController@index1');
Route::resource('localisation','LocalizationController');

标签: laravel

解决方案


这个回复有点晚了,但可能会帮助别人。只需要更改您的路线并更新您的视图。

在您的路线中,将您的路线更新为:

Route::get('lang/{locale}', ['as' => 'lang.locale', 'uses' => 'LocalizationController@index1']);

在您看来,您需要更改以更新路线以实际参与控制器。

因此,鉴于将其更新为;

<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
    <a class="dropdown-item" href="{{ route ('lang.locale', 'en') }}"> English</a>
    <a class="dropdown-item" href="{{ route ('lang.locale', 'mal') }}"> Mlayalam</a>
    <a class="dropdown-item" href="{{ route ('lang.locale', 'in') }}"> Hindi</a>
</div>

推荐阅读