지역화 (다국어)

시작하기

라라벨의 다국어 기능은 애플리케이션이 다국어에 대응 할 수 있도록 다양한 언어로 번역된 문자열을 검색하는 편리한 방법을 제공합니다.

언어 문자열은 resources/lang 디렉토리에 저장되어 있습니다. 이 디렉토리 안에서 애플리케이션이 지원하는 언어의 디렉토리가 지정되어야 합니다.

/resources
    /lang
        /en
            messages.php
        /es
            messages.php

모든 언어 파일은 문자열 키에 대한 간단한 배열을 반환합니다. 다음은 예제입니다:

<?php

return [
    'welcome' => 'Welcome to our application'
];

로케일 설정하기

애플리케이션의 기본 언어는 config/app.php 설정 파일에 지정되어 있습니다. 물론 여러분은 이 값들을 애플리케이션에 맞게 수정할 수 있습니다. 또한 App 파사드의 setLocale 메소드를 사용하여 런타임에 활성화될 언어를 변경할 수도 있습니다.

Route::get('welcome/{locale}', function ($locale) {
    App::setLocale($locale);

    //
});

지정된 언어로 설정된 문자열이 존재하지 않는 경우에 사용할 수 있는 "대체 언어"를 설정 할 수 있습니다. 기본언어와 마찬가지로 대체 언어는 config/app.php 설정 파일에서 지정할 수 있습니다.

'fallback_locale' => 'en',

App 파사드isLocale 메소드를 호출 하여 지정된 로케일이 현재 사용되고 있는지 확인할 수 있습니다:

if (App::isLocale('en')) {
    //
}

App 파사드getLocale 메소드를 호출 하여 현재 애플리케이션의 로케일을 조회 할 수 있습니다:

return App::getLocale();

기본적인 사용법

여러분은 trans 헬퍼 함수를 사용하여 다국어파일을 찾을 수 있습니다. trans 메소드는 다국 메세지를 찾기 위해서 파일과 키로 구성된 인자를 전달받습니다. 예를 들어 resources/lang/messages.php 파일에서 welcome 에 해당하는 다국어 값을 찾으려면 다음과 같이 하면 됩니다:

echo trans('messages.welcome');

당연하게도, 블레이드 템플릿 엔진을 사용한다면 {{ }} 구문 안에서 또는 @lang 지시어를 통해서 다국어를 사용할 수 있습니다.

{{ trans('messages.welcome') }}

@lang('messages.welcome')

지정된 언어에 대한 다국어 메세지를 찾을 수 없는 경우 trans 함수는 다국어 키를 반환할 것입니다. 따라서, 위의 예제에서 다국어 메세지가 없을 경우에 trans 함수는 message.welcome 라는 값을 반환할 것입니다.

다국어 메세지의 일부 교체하기

여러분은 다국어 메세지에서 일부분을 특정하게 표현하기를(place-holder) 원할 수도 있습니다. 이런 모든 플레이스홀더 들은 : 으로 시작합니다. 예를들어 환영 메세지에 이름을 특정하게 표현하기를 원한다면 다음과 같이 하면 됩니다:

'welcome' => 'Welcome, :name',

다국어 메세지에서 플레이스 홀더를 교체하려면 trans 함수의 두번째 인자로 교체할 값의 배열을 전달하면 됩니다:

echo trans('messages.welcome', ['name' => 'dayle']);

플레이스 홀더가 모두 대문자이거나, 첫번째 문자가 대문자라면, 변환된 값또한 이에 따라 대문자로 표기될것 입니다:

'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle

복수 표기

각기 다른 언어에서 단수와 복수의 표기는 복잡하고 다양한 것처럼, 복수 표기는 아주 복잡한 문제입니다. "파이프" 문자를 사용하여 여러분은 단수 문자열과 복수형의 문자열을 나눌 수 있습니다:

'apples' => 'There is one apple|There are many apples',

그다음에 여러분은 trans_choice 함수를 사용하여 주어진 "갯수"에 맞는 다국어 메세지를 표시할 수 있습니다. 예를 들어 하나 이상인 경우에는 다음처럼 표시하면 됩니다:

echo trans_choice('messages.apples', 10);

라라벨 Translator는 Symfony Translation 컴포넌트를 사용하고 있기 때문에, 보다 복잡한 복수 표기라도 편리하게 규칙을 만들 수 있습니다.

'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',

벤더의 언어 파일 재정의하기

몇몇 패키지들은 고유한 언어 파일들을 제공합니다. 출력되는 문구를 수정하기 위해 패키지의 소스를 수정하는 대신 여러분 프로젝트의 resources/lang/vendor/{locale}/{package} 디렉토리에 파일을 추가하여 다국어를 재정의 할 수 있습니다.

예를 들어, skyrim/hearthfire 패키지의 영어 다국어 메세지들을 대체 할 필요가 있다면, resources/lang/vendor/en/hearthfire/en/messages.php에 언어 파일을 추가 하면 됩니다. 이 파일에서 여러분이 재정의하고자 하는 언어 라인을 지정해야 합니다. 재정의하지 않은 다국어 메세지들은 패키지의 언어 파일의 정의를 그대로 따릅니다.