다양한 언어의 사용자들을 대상으로 웹 애플리케이션을 개발할 경우 국제화(Internationalization, i18n) 를 고려한 설계와 개발이 필요합니다.

 

국제화시 중요한 부분중에 하나는 사용하는 언어와 환경에 맞게 다양한 언어로 서비스를 제공하는 것입니다.

라라벨은 이를 위해 locale 환경 변수를 설정하고 번역된 메시지 파일을 만들어 주면 설정된 언어에 맞는 메시지 파일을 로딩하여 다개국어 애플리케이션을 제공할 수 있도록 지원하고 있습니다.

 

개발자는 다음과 같이 언어별 메시지 파일(기본 설정 - resources/lang/en/) 을 언어명(한글의 경우 ko) 폴더에 복사한 후에 해당 파일을 수정하면 되며 언어별 메시지 파일은 전 세계의 다양한 공헌자들에 의해 번역되어 있습니다.

/resources
 /lang
    /en
      messages.php 
    /ko 
      messages.php

 

예를 들어 프랑스어로도 서비스를 제공할 경우 검증 실패시 표시할 메시지 파일을 resources/lang/fr/messages.php 에 만들고 번역한 내용을 key/value 형식의 배열로 기술해 주면 되며 해당 메시지는 Lang::get($key) 메소드, 또는 이를 간략화된 trans($key) 메소드를 사용하여 로딩할 수 있습니다.

 

다음은 정해진 사이즈보다 큰 데이타가 입력되었을 경우 에러 메시지를 로딩하는 예제입니다.

public function getMaxFailedMessage()
{
    return Lang::get('messages.max.numeric', ['max'=>50, 'attribute' => 'username']);
}
CODE

실제 에러 메시지는 resources/lang/fr/messages.php 파일에 다음과 같이 배열로 기술되어 있으므로 언어별로 손쉽게 관리할 수 있으며 신규 언어가 필요할 경우 해당 메시지 파일만 번역하면 됩니다.

<?php
    
return [
	'max'                  => [
        'numeric' => 'The :attribute may not be greater than :max.',
	],
];
CODE

메시지 파일중 런타임에 변경되어야 하는 부분이 있으므로 이는 위치 표시기(place-holders) 를 통해 지원하고 있으며 표시기는 :뒤에 속성 이름을 넣어주면 되며 위에서는 :max :attribute 가 런타임에 동적으로 변경될 파라미터가 되며 최종 에러 메시지는 다음과 같이 변환됩니다.

The username may not be greater than 50.