티스토리 뷰

해당 글은 https://blog.naver.com/kbs4674/221041391645 로 부터 게시글이 이전되었습니다.

 

 참고 

1. Gem : Devise를 이미 사용하고 있다는 가정하에 이 글을 작성합니다!

devise Gem 설치법 [클릭]


Devise Gem을 설치하신 분들은, 다른건 만족스러운데 중간에 저렇게 영어로 나오는 오류메세지가 많이 걸리적거릴겁니다.

처음에 저도 저 오류메세지 부분을 수정할려고 devise 관련 모든 파일을 찾아보는데... 어디에도 안나오더라고요..

 

중간에 보이는  영어 메세지가 걸리적거린다..

좀 알아보니, 이런 오류메세지에 대해 쉽게 수정하면서도 devise에 대해 번역을 시켜주는 gem이 있다는 것을 알게됩니다.

오늘은 devise 번역 gem 적용법에 대해 알아보겠습니다.

 

 

  • devise-i18n 사용

1.  Gemfile  에 다음 Gem을 추가시켜줍니다.

gem 'devise-i18n'

그리고 Gem을 설치해줍니다.

bundle install

 

2 config/application.rb  파일을 열람 후, 다음 문구들을 추가합니다.

config.i18n.default_locale = :ko
config.time_zone = 'Seoul'

적용 예시

## config/application.yml

... 내용 생략 ...
class Application < Rails::Application
    config.load_defaults 5.2
	  
	config.i18n.default_locale = :ko
	config.time_zone = 'Seoul'
end

 

3. 터미널에 다음 내용을 입력합니다.

rails g devise:i18n:locale ko

그러면  config/locals  폴더에  devise.views.ko.yml  파일이 생성된게 확인됩니다.

해당 파일에 Devise의 각종 메세지 내용이 한글로 번역되어 있습니다.

 

5. 

 주의  5번과정은 view html 파일 내 코드를 바꾸는겁니다.

만약 사전에 Devise View 파일에 대해 코드를 수정작업 하신분은 조심하세요.

 

이어서 명령어 입력창(터미널)에 다음 명령어도 입력해주세요.

rails g devise:i18n:views

번역에 특화된 View 파일이 생성되는게 확인될겁니다.

 참고  만약 이미 Devise View파일이 있다보니, Conflict 에러가 생겼으나, 덮어씌어도 된다면 y+엔터 로 덮어씌어서 생성해주세요.

 

6. 서버를 껏다 켜주세요.

 

7. 이제 한글화 적용이 되었습니다!

Devise 번역 적용 전 / 적용 후

 

 

 
  • Time-Ago 번역 적용

일반적인 시간과, Ago 방식(한글번역됨)

'x일 전' 과 같은 방식의 시간 표기에 있어 Ago 방식은 Rails에서 기본 함수를 지원해줍니다.

 

1. ago 방식이 나타나길 원하는 '시간영역'에서 다음 함수를 사용해주면 됩니다.

# <%= "#{time_ago_in_words(게시글_작성시간_정보를_가져오는_함수명.created_at)} 전" %>
<%= "#{time_ago_in_words(post.created_at)} 전" %>

 

2. Ago 방식이 우선 우선 기본적으로 영어 혹은 에러가 표시될겁니다.

처음엔 에러 혹은 영어로 보여질겁니다.

 

3. 혹시 오류메세지가 아닌 영어로 보이시는 분은  config/application.rb  파일을 열람 후, 다음 문구들을 추가합니다.

config.i18n.default_locale = :ko
config.time_zone = 'Seoul'

적용 예시

## config/application.yml

... 내용 생략 ...
class Application < Rails::Application
    config.load_defaults 5.2
	  
	config.i18n.default_locale = :ko
	config.time_zone = 'Seoul'
end

 

4.  config/locals/  에서  time.ko.yml  파일을 생성 후, 다음 내용을 입력해주세요.

ko:
  activerecord:
    errors:
      messages:
        record_invalid: 데이터 검증에 실패하였습니다. %{errors}
  date:
    abbr_day_names:
    - 일
    - 월
    - 화
    - 수
    - 목
    - 금
    - 토
    abbr_month_names:
    -
    - 1월
    - 2월
    - 3월
    - 4월
    - 5월
    - 6월
    - 7월
    - 8월
    - 9월
    - 10월
    - 11월
    - 12월
    day_names:
    - 일요일
    - 월요일
    - 화요일
    - 수요일
    - 목요일
    - 금요일
    - 토요일
    formats:
      default: "%Y/%m/%d"
      long: "%Y년 %m월 %d일 (%a)"
      short: "%m/%d"
    month_names:
    -
    - 1월
    - 2월
    - 3월
    - 4월
    - 5월
    - 6월
    - 7월
    - 8월
    - 9월
    - 10월
    - 11월
    - 12월
    order:
    - :year
    - :month
    - :day
  datetime:
    distance_in_words:
      about_x_hours:
        one: 약 한 시간
        other: 약 %{count}시간
      about_x_months:
        one: 약 한 달
        other: 약 %{count}달
      about_x_years:
        one: 약 일 년
        other: 약 %{count}년
      almost_x_years:
        one: 일 년 이하
        other: "%{count}년 이하"
      half_a_minute: 30초
      less_than_x_minutes:
        one: 방금
        other: "%{count}분 이하"
      less_than_x_seconds:
        one: 일 초 이하
        other: "%{count}초 이하"
      over_x_years:
        one: 일 년 이상
        other: "%{count}년 이상"
      x_days:
        one: 하루
        other: "%{count}일"
      x_minutes:
        one: 일 분
        other: "%{count}분"
      x_months:
        one: 한 달
        other: "%{count}달"
      x_seconds:
        one: 일 초
        other: "%{count}초"
    prompts:
      day: 일
      hour: 시
      minute: 분
      month: 월
      second: 초
      year: 년
  errors:
    format: "%{message}"
    messages:
      accepted: "%{attribute}을(를) 반드시 확인해야 합니다"
      blank: "%{attribute}에 내용을 입력해 주세요"
      confirmation: "%{attribute}은(는) 서로 일치해야 합니다"
      empty: "%{attribute}에 내용을 입력해 주세요"
      equal_to: "%{attribute}은(는) %{count}과 같아야 합니다"
      even: "%{attribute}에 짝수를 입력해 주세요"
      exclusion: "%{attribute}은(는) 이미 예약되어 있는 값입니다"
      greater_than: "%{attribute}은(는) %{count}보다 커야 합니다"
      greater_than_or_equal_to: "%{attribute}은(는) %{count}보다 크거야 같아야 합니다"
      inclusion: "%{attribute}은(는) 목록에 포함되어 있는 값이 아닙니다"
      invalid: "%{attribute}은(는) 올바르지 않은 값입니다"
      less_than: "%{attribute}은(는) %{count}보다 작아야 합니다"
      less_than_or_equal_to: "%{attribute}은(는) %{count}과 작거나 같아야 합니다"
      not_a_number: "%{attribute}에 숫자를 입력해 주세요"
      not_an_integer: "%{attribute}에 정수를 입력해 주세요"
      odd: "%{attribute}에 홀수를 입력해 주세요"
      taken: "%{attribute}은(는) 이미 존재합니다"
      too_long: "%{attribute}은(는) %{count}자를 넘을 수 없습니다"
      too_short: "%{attribute}은(는) 적어도 %{count}자를 넘어야 합니다"
      wrong_length: "%{attribute}은(는) %{count}자여야 합니다"
    template:
      body: '아래 문제를 확인해 주세요.'
      header:
        one: 한 개의 오류로 인해 %{model}을(를) 저장할 수 없습니다
        other: "%{count}개의 오류로 인해 %{model}을(를) 저장할 수 없습니다"
  helpers:
    select:
      prompt: 선택해주세요
    submit:
      create: 등록
      submit: 제출
      update: 수정
  number:
    currency:
      format:
        delimiter: ","
        format: "%n%u"
        precision: 0
        separator: "."
        significant: false
        strip_insignificant_zeros: false
        unit: 원
    format:
      delimiter: ","
      precision: 3
      separator: "."
      significant: false
      strip_insignificant_zeros: false
    human:
      decimal_units:
        format: "%n%u"
        units:
          billion: 십억
          million: 백만
          quadrillion: 경
          thousand: 천
          trillion: 조
          unit: ''
      format:
        delimiter: ''
        precision: 3
        significant: true
        strip_insignificant_zeros: true
      storage_units:
        format: "%n%u"
        units:
          byte: 바이트
          gb: 기가바이트
          kb: 킬로바이트
          mb: 메가바이트
          tb: 테라바이트
    percentage:
      format:
        delimiter: ''
    precision:
      format:
        delimiter: ''
  support:
    array:
      last_word_connector: ", "
      two_words_connector: '와(과) '
      words_connector: ", "
  time:
    am: 오전
    formats:
      default: "%Y/%m/%d %H:%M:%S"
      long: "%Y년 %m월 %d일, %H시 %M분 %S초 %Z"
      short: "%y/%m/%d %H:%M"
    pm: 오후

5. 완료입니다!

 

 

  • config/locals 파일 정리

1) locals 파일 개념

 config/locals  파일은  config/application.rb  에 설정된 국가에 따라 번역이 되어서 보여지는 역할로서 쓰인다고 볼 수 있습니다.

 

예를들어, i18n이 적용된 Devise View 파일에서

## app/views/devise/sessions/new.html.erb

<h2><%= t(".sign_in") %></h2>

... 코드 생략 ...

  <div class="form-actions">
    <%= f.button :submit, t(".sign_in") %>
  </div>
<% end %>

위 파일을 보면 중간에

t.(".sign_in")

이 코드가 보입니다.

해당 코드의 자리에  config/locals  에서 번역된 문장이 들어가는 자리라고 보면 됩니다.

 

2) locals 파일 이름 및 문법

locals 파일 이름은 아무렇게나 지어도 상관이 없습니다.

하지만 내부 코드에 있어 명칭 및 탭(Tap)처리에 대해선 규칙이 엄격하므로, 사용에 있어 참고바랍니다.

 

3) i18n 국가 설정

i18n 번역에 있어, 국가설정을 하는 곳은  config/application.rb  입니다.

config.i18n.default_locale = :ko

위 코드에서 확인했다 싶이 대한한국 코드명은 ko입니다.

 

 

  • 자료 참고

1. Github - devise-i18n [클릭]

2. Github - devise-i18n 한글번역 [클릭]

3. Github - devise-i18n 위키 [클릭]

4. 팀원의 조언 : L.G.S, K.S.H 형..

 

루비온 레일즈 Ruby on Rails ROR

댓글
댓글쓰기 폼
공지사항
Total
141,931
Today
184
Yesterday
299
링크
«   2021/09   »
      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 28 29 30    
글 보관함