본문으로 바로가기

[Laravel] i18n 국제화 적용하기

category Framework/Laravel 2021. 11. 19. 17:54
라라벨은 애플리케이션이 다국어에 대응할 수 있도록 다양한 언어로 번역된 문자열을 검색하는 편리한 방법을 제공합니다. 문자열은 resource/lang 디렉토리에 로케일 단위로 저장되며 최초 설치시에는 라라벨에서 기본 제공되는 영어권(en) 에 대한 문자열들이 기본 제공됩니다.
Reference : https://laravel.kr/docs/8.x/localization

사전설정

  1. 로케일 설정
    # config/app.php
    
    // 기본 로케일
    'locale' => 'ko',
    
    // 대체 로케일
    'fallback_locale' => 'en',
    
    //지정된 언어로 설정된 문자열이 존재하지 않는 경우에 사용할 수 있는 "대체 언어"를 설정 할 수 있다.
  2. 문자열 정의
    Laravel 을 최초 설치하면 resources/lang/en 경로에 auth, pagination, passwords, validation 4개 항목에 대한 기본 메시지들이 이미 정의되어있고 이 장에서는 해당 메시지를 ko 로 그대로 복사하고 필요한 메시지를 번역해 테스트 해보기로 한다.
    # resources/lang/ko/validation.php
    
    return [
    	...
        'required' => ':attribute 은(는) 필수값 입니다.',
        ...
    ];
    
    # 복사된 한국어 메시지중 'required' 라는 키의 메시지를 상기와 같이 수정했다.​

다국어 문자 조회

<?php
  echo __('messages.welcome');
  echo __('I love programming.');
  
  
# Blade Template 을 사용하는 경우 아래와 같은 형태로 사용 가능하다.
{{ __('message.welcome) }}
@lang('messages.welcome')

예제

<?php

...
	public function store(Request $request)
    {
        $data = $request->all();
        $rules = [
            'name' => 'required',
            'email' => 'required',
            'password' => 'required',
            'test' => 'required',
        ];
        
        /**
         * Translate the given message.
         *
         * @param  string|null  $key
         * @param  array  $replace
         * @param  string|null  $locale
         * @return string|array|null
         */
         // __(string $key, array $replace, string $locale)
         
        $messages = [
            'test.required' => __('validation.required', [], 'ko'),
        ];
        $validator = Validator::make($data, $rules, $messages);
        if ($validator->fails()) {
            throw new ValidateException($validator);
        }
        return response(['foo' => 'bar'], 201);
    }
...

상기와 같이 작성후 테스트 유닛 (디버깅 모드)를 통해 전달된 메시지를 아래와 같이 확인해보았다.