2015-04-25 9 views
5

Sto cercando di implementare la localizzazione nel mio progetto Laravel 5 e sto riscontrando un problema. Il middleware che ho messo in per prendere il linguaggio è la seguente:Laravel 5 localization: exclude/public/directory

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Routing\Redirector; 
use Illuminate\Http\Request; 
use Illuminate\Foundation\Application; 
use Illuminate\Contracts\Routing\Middleware; 

class Language implements Middleware { 

    public function __construct(Application $app, Redirector $redirector, Request $request) { 
     $this->app = $app; 
     $this->redirector = $redirector; 
     $this->request = $request; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     // Make sure current locale exists. 
     $locale = $request->segment(1); 


     if (! array_key_exists($locale, $this->app->config->get('app.locales'))) { 
      $segments = $request->segments(); 
      $segments[0] = $this->app->config->get('app.fallback_locale'); 

      return $this->redirector->to(implode('/', $segments)); 
     } 

     $this->app->setLocale($locale); 

     return $next($request); 
    } 

} 

kernel.php:

protected $middleware = [ 
     'App\Http\Middleware\Language', 
     'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 
     'Illuminate\Cookie\Middleware\EncryptCookies', 
     'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 
     'Illuminate\Session\Middleware\StartSession', 
     'Illuminate\View\Middleware\ShareErrorsFromSession', 
     'App\Http\Middleware\VerifyCsrfToken', 
    ]; 

routeserviceprovider.php:

public function map(Router $router, Request $request) 
    { 
     $locale = $request->segment(1); 

     $this->app->setLocale($locale); 

     $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) { 
      require app_path('Http/routes.php'); 
     }); 
    } 

E 'perfettamente funzionante, ad eccezione di un cosa. Quando provo ad andare a http://0.0.0.0/public/css/images/myimage.png sostituisce public con en e se vado a /en/public mi sta dicendo che il percorso non esiste.

Qualsiasi aiuto per escludere la directory pubblica da questo o implementare la localizzazione in un modo migliore che non implichi il middleware?

+1

Si prega di consultare questo: http://stackoverflow.com/q/29723344/2772319 – Digitlimit

+4

Il proprio server web dovrebbe servire la directory 'public' direttamente come root del sito, non passandola di nuovo a PHP. Questo è il modo corretto per risolvere questo problema. Quale server web stai usando? Puoi condividere il file di configurazione con noi? –

risposta

1

L'immagine deve essere nella cartella pubblica e la cartella pubblica deve essere la cartella pubblica e configurata come in Apache.

si deve risolvere la configurazione in modo da poter accedere all'immagine utilizzando il seguente URL: http://0.0.0.0/css/images/myimage.png

E questo succede se pubblica è la cartella pubblica configurato.