본문으로 바로가기




 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 값을 변경하실수 있습니다.


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








저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요

튜토리얼북
블로그 이미지 눈싹 님의 블로그
VISITOR 오늘450 / 전체536,600