티스토리 뷰




 Laravel 5 는 기본적으로 다국어화 기능이 있습니다. 하지만 이 기능의 경우 app::setLocale() 을 이용하여 언어를변경해 주거나 사용자 언어를 직접 지정해주셔야 하는대요.


 여기서는 Session 에 Locale 이 지정되지 않았을 경우 사용자의 언어를 감지하여 Locale 을 지정하는 Middleware 를 만들어 보겠습니다.





 우선 Middleware 를 만들어보겠습니다. App/Http/Middleware 로 이동하여 Localization.php 파일을 만들고 아래의 코드를 입력해주도록 합니다.


<?php namespace App\Http\Middleware;

use Closure, Session, Auth;

class Localization {

    /**
     * 언어 목록
     *
     * @array $languages
     */
    protected $languages = ['en','ko','ja','zh'];

    public function handle($request, Closure $next)
    {
        if(!Session::has('locale'))
        {
            Session::put('locale', $request->getPreferredLanguage($this->languages));
        }

        app()->setLocale(Session::get('locale'));

        if(!Session::has('statut')) 
        {
            Session::put('statut', Auth::check() ?  Auth::user()->role->slug : 'visitor');
        }
		
        return $next($request);
    }

}

 이제 위에서 만든 파일을 Middleware 에 등록시켜 주도록 합니다. 등록 방법은 App/Http/Kernel.php 에서 $middleware 에 아래와 같이 추가해주시면 됩니다.


    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,

       /* Customize MiddleWare */
       \App\Http\Middleware\Localization::class,
    ];


 테스트 방법은 페이지로 이동하는 Controller 에서 echo Session::get('locale'); 을 이용하여 현재 Locale 이 지정하지 않더라도 자동으로 지정되는지 확인해보시면 됩니다. 만약 자동 지정을 변경하고 싶으시다면 App::setLocale($edition); 을 통해서 현재 Locale 값을 변경하실수 있습니다.


즐거운 개발 되시기 바랍니다.








공유하기 링크
댓글