기본 개념
- 영어 및 유사 언어에 대한 기본 지원 ko, en, jp, zh…etc
- 다른 언어를 위한 쉬운 커스터마이징과 확장
- Rails 프레임워크의 모든 정적 문자열이 국제화되어 있음
핵심 메서드:
translate
(별칭: t) - 텍스트 번역 조회localize
(별칭: l) - 날짜와 시간 객체의 지화- 각국에 따른 URL 변경기능
Translate (t) 사용 예시
1
2
3
4
5
6
7
8
9
10
11
12
| # config/locales/ko.yml
ko:
hello: "안녕하세요"
welcome_message: "환영합니다 %{name}님!"
nav:
home: "홈"
about: "소개"
# 컨트롤러나 뷰에서 사용
I18n.t('hello') # => "안녕하세요"
t('nav.home') # => "홈"
t('welcome_message', name: '홍길동') # => "환영합니다 홍길동님!"
|
Localize (l) 사용 예시
1
2
3
4
5
6
| # 현재 시간 로컬라이즈
I18n.l(Time.now) # => "2024년 11월 15일 22:00"
# 다양한 포맷 사용
I18n.l(Date.today, format: :short) # => "11월 15일"
I18n.l(Date.today, format: :long) # => "2024년 11월 15일 금요일"
|
커스텀 날짜 포맷 정의
1
2
3
4
5
6
| # config/locales/ko.yml
ko:
time:
formats:
custom: "%Y년 %m월 %d일 %H시 %M분"
# I18n.l(Time.now, format: :custom) # => "2024년 11월 15일 22시 00분"
|
설정
1
2
3
| # config/application.rb
config.i18n.{언어설정} += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}')]
config.i18n.default_locale = :ko # 한글을 고정하겠다
|
번역은 YAML 또는 Ruby 파일에 저장되며, 기본적으로 config/locales
디렉토리에 위치한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| # config/locales/en.yml
en:
hello_world:
- Hello
- world
# config/locales/ko.yml
ko:
hello_world:
- 세상아
- 안녕
# 리턴값은 배열의 형태이다.
# 단수 복수 설정가능
I18n.backend.store_translations :en, inbox: {
zero: 'no messages',
one: 'one message',
other: '%{count} messages'
}
# I18n.t('inbox', count: 0) # => "no messages"
# I18n.t('inbox', count: 1) # => "one message"
# I18n.t('inbox', count: 2) # => "2 messages"
# I18n.t('inbox', count: 23) # => "23 messages"
# 예시 호출함 I18n.t('common.welcome_html', username: '주인장')
common:
welcome_html: "<b>Welcome %{username}!</b>"
|
View Helper 메서드
시간 관련:
1
2
3
4
5
6
7
8
9
10
11
12
| # 시간 간격을 문자열로 표현
distance_of_time_in_words(Time.now, Time.now + 15.minutes)
# => "15분" (한국어)
# => "15 minutes" (영어)
# 날짜 선택 필드 생성
datetime_select("post", "published_at")
# => 번역된 월 이름으로 select 태그가 생성됨
# 월 선택 필드
select_month(Date.today)
# => 번역된 월 이름으로 select 태그가 생성됨
|
숫자 관련:
1
2
3
4
5
6
7
8
9
10
11
12
| # 통화 형식
number_to_currency(1234.56)
# => "₩1,234.56" (한국어)
# => "$1,234.56" (영어)
# 정밀도가 있는 숫자
number_with_precision(1234.567, precision: 2)
# => "1,234.57"
# 퍼센트
number_to_percentage(65.43)
# => "65.43%"
|
Active Model 메서드
모델 및 속성 이름 번역:
1
2
3
4
5
6
7
8
9
10
11
12
13
| # config/locales/ko.yml
ko:
activerecord:
models:
user: "사용자"
attributes:
user:
name: "이름"
email: "이메일"
# 사용
User.model_name.human # => "사용자"
User.human_attribute_name('email') # => "이메일"
|
에러 메시지:
1
2
3
4
5
6
7
| # 에러 메시지 생성
user.errors.generate_message(:email, :blank)
# => "이메일을 입력해주세요"
# 전체 에러 메시지
user.errors.full_messages
# => ["이메일을 입력해주세요"]
|
Active Support 메서드
배열을 문장으로:
1
2
3
4
5
6
7
8
9
10
| # config/locales/ko.yml
ko:
support:
array:
words_connector: ", "
two_words_connector: "와(과) "
last_word_connector: ", 그리고 "
['첫번째', '두번째', '세번째'].to_sentence
# => "첫번째, 두번째, 그리고 세번째"
|
이러한 헬퍼 메서드들은 Rails 애플리케이션에서 일관된 다국어 지원을 제공된다고하는데…가독성은 좋을지 몰라도 유지보수에는 좋은지는 모르겠다.
참고 레일즈 가이드 문서 6.0