Laravel5: Mehrsprachige App

Letzte Woche wollte ich meine entwickelte Anwendung internationalisieren und bin dann auf das Problem der non persistent APP Setlocale gestossen. Hier werde ich dir erklären, wie ich diese Aufgabe gelöst habe.

 

Erstelle einen neuen Controller  „LanguageController“

<?php
  namespace App\Http\Controllers;
  use App\Http\Controllers\Controller;
  use Config;
  use Illuminate\Support\Facades\Redirect;
  use Illuminate\Support\Facades\Session;
  use Request;
  use Input;

  class LanguageController extends Controller {

    public function switchLang($lang) {

      if (array_key_exists($lang, Config::get('languages'))) {
          Session::put('applocale', $lang);
      }
    }
  }

Wie du hier sehen kannst, verwende ich ein benutzerdefiniertes Konfigurations-Array, um die verfügbaren Sprachen der App abzurufen.

 

Erstelle eine „language.php“ im „config /“ Ordner.

<?php
 
   return [
    'en' => 'English',
    'de' => 'Deutsch'    
   ];

 

Jetzt brauchst du eine Route, um den Controller zu verwenden

Route::get('lang/{lang}', ['as'=>'lang.switch', 'uses'=>'LanguageController@switchLang']);

 

Der folgende Code kannst du entsprechend deiner Wünsche für deine Seite anpassen.

@foreach (Config::get('languages') as $lang => $language)

   @if ($lang != App::getLocale())

        <li>
           <a style="color:black;" href="{{   
            route('lang.switch', $lang) }}"> 

         <?php if(strcmp($language,"Deutsch")==0) {?>

            <img style="border:none; width:10px;height:10px;" 
                 src=<?php echo $baseurl."/resources/images
                           /german.png"?> />

         <?php } else { ?>

             <img style="border:none; width:10px;height:15px;" 
                  src=<?php echo $baseurl."/resources/images
                            /englisch.jpg"?> /> 

         <?php } ?>

             {{$language}}

           </a> 

       </li> 

   @endif 

 @endforeach

 

Danach sollst du einen neuen Middleware erstellen

<?php

 namespace App\Http\Middleware;
 use Closure;
 use Illuminate\Support\Facades\App;
 use Illuminate\Support\Facades\Config;
 use Illuminate\Support\Facades\Session;
 use Redirect;

 class Language {

       public function handle($request, Closure $next) {

           if (Session::has('applocale') AND    
               array_key_exists(Session::get('applocale'), 
               Config::get('languages'))) {

                App::setLocale(Session::get('applocale'));
           } else {
            App::setLocale(Config::get('app.fallback_locale'));
            }
        
          return $next($request);
       }

}

 

Zum Schluss muss der „Kernel.php“ mit dem neuen Middelware aktualisiert werden.

protected $middlewareGroups = [
 'web'=>[
          \App\Http\Middleware\Language::class,
        ]
]

 

Hinterlasse einen Kommentar

Benachrichtige mich zu:
avatar
wpDiscuz