Skip to main content

로컬라이제이션이란

Laravel의 로컬라이제이션 기능은 여러 언어로 번역 문자열을 취득하는 편리한 구조를 제공합니다. 애플리케이션 내에서 여러 언어를 지원하기 위해 사용합니다. 번역 문자열의 관리 방법은 2종류가 있습니다.
기본 Laravel 애플리케이션에는 lang 디렉터리가 포함되어 있지 않습니다. 커스터마이즈하려면 lang:publish Artisan 명령어로 공개합니다.

로케일의 설정

기본 로케일

애플리케이션의 기본 언어는 config/app.phplocale로 설정합니다. 일반적으로는 .env 파일의 APP_LOCALE 환경 변수를 사용합니다.
fallback_locale은 지정한 언어에 번역 문자열이 존재하지 않는 경우의 폴백 언어입니다.

실행 시의 로케일 변경

App 파사드의 setLocale() 메서드로 요청 단위로 로케일을 변경할 수 있습니다.

현재의 로케일 확인

언어 파일의 작성

PHP 파일 형식

lang/{언어 코드}/ 디렉터리에 PHP 파일을 작성합니다. 키·값 형식의 배열을 반환합니다.
지역 차이가 있는 언어는 ISO 15897에 따라 디렉터리 이름을 붙입니다. 예를 들어 영국 영어는 en-gb가 아닌 en_GB입니다.

JSON 형식

번역할 문자열이 많은 경우 JSON 형식이 권장됩니다. lang/ 디렉터리에 언어 코드 이름의 JSON 파일을 작성합니다.
기본 번역 문자열(영어)을 키로 정의합니다.
JSON 형식에서는 영어 문장 그 자체가 키가 되기 때문에 영어의 기본 표시가 자동으로 기능합니다. 번역 파일이 없는 언어에서는 키(영어 원문)가 그대로 표시됩니다.

PHP 파일 형식과 JSON 형식의 사용 구분

  • 밸리데이션 에러 메시지 등 기능별로 정리하고 싶은 경우
  • Laravel의 내장 번역(validation.php, auth.php 등)을 덮어쓰는 경우
  • 계층적인 키 관리가 필요한 경우
  • UI의 문구가 많고 키를 생각하는 것이 번거로운 경우
  • 템플릿에 영어를 그대로 써 두고, 다른 언어는 번역 파일로 대응하는 경우
  • 국제화 대응이 나중에 추가된 애플리케이션

번역 문자열의 취득

__() 헬퍼

가장 자주 사용하는 방법입니다. PHP 파일 형식에서는 “파일명.키” 형식으로 지정합니다.
번역 문자열이 존재하지 않는 경우, 지정한 키가 그대로 반환됩니다.

Blade 템플릿에서의 사용

Blade 템플릿에서는 {{ __() }}를 사용합니다.
@lang 디렉티브는 비권장입니다. 현재는 {{ __() }}를 사용하는 것이 권장됩니다.

플레이스홀더

번역 문자열에 :이름 형식의 플레이스홀더를 매입할 수 있습니다.
__()의 두 번째 인수에 치환값의 배열을 전달합니다.
Blade 템플릿에서도 동일하게 사용할 수 있습니다.

복수형

언어에 따라 복수형의 룰이 다릅니다. Laravel은 | 기호로 단수형과 복수형을 전환할 수 있습니다.

기본적인 복수형

JSON 형식에서도 동일하게 정의할 수 있습니다.
trans_choice() 함수에 수량을 전달해 취득합니다.

범위를 지정한 복수형

보다 상세한 범위 지정이 가능합니다.

복수형에서의 플레이스홀더

:count로 수량을 표시할 수 있습니다. 세 번째 인수로 추가의 치환값을 전달할 수 있습니다.

패키지의 언어 파일을 오버라이드

서드파티 패키지가 독자적인 언어 파일을 가지고 있는 경우, lang/vendor/{패키지명}/{언어 코드}/에 같은 이름의 파일을 놓음으로써 덮어쓸 수 있습니다. 예를 들어 skyrim/hearthfire 패키지의 영어 메시지를 커스터마이즈하려면.

실전 예시: 한영 전환 미들웨어

URL 경로나 세션, 사용자 설정에 기반해 로케일을 자동 전환하는 미들웨어의 구현 예시입니다.
1

미들웨어 작성

2

미들웨어 구현

3

미들웨어 등록

bootstrap/app.php에서 미들웨어를 등록합니다.
4

로케일 전환 라우트 추가

5

Blade 템플릿에 전환 버튼 추가

번역 파일의 구성 예시

정리

마지막 수정일 2026년 7월 13일