[Rails] 언어 전환 기능

6141 단어 초보자Rails
PF에 언어 전환 기능을 구현했을 때의 메모.
※일본어화 대응은 이미 실장되고 있는 것을 상정하고 있습니다.

완성 이미지





구현 및 설명



언어 전환은 URL에 매개변수를 추가하여 전환합니다.
예를 들어 일본어라면 exapmle.com/?locale=ja 영어라면 exapmle.com/?locale=en 같은 느낌입니다.

① application_controller



app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :set_locale

  def default_url_options
    { locale: I18n.locale }
  end

  private

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end
end

해설



app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :set_locale

  private

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end
end
set_locale는 URL에 매개 변수를 추가하는 프로세스를 작성합니다.
구체적으로는 exapmle.com/?locale=ja 와 같이 URL에 파라미터가 붙어 있으면 그것을 사용해, 없으면 디폴트의 파라미터 없음의 URL를 사용한다고 하는 처리입니다.
application_controller.rbbefore_actionset_locale 를 지정하고 있는가 하면,application_controller.rb는 모든 컨트롤러에 상속되었습니다. 즉 모든 controller를 실행하기 전에 set_locale가 실행된다는 구조입니다.

app/controllers/application_controller.rb
  def default_url_options
    { locale: I18n.locale }
  end
default_url_options는 기본적으로 항상 실행되는 메소드 인 것처럼,
여기서 쓰고 있는 것은 exapmle.com/?locale=ja 와 같은 파라미터를 디폴트 상태, 즉 최초로 사이트에 액세스했을 때부터 붙인다고 하는 처리입니다.

② 언어 .yml 파일 만들기



이번에는 일본어와 영어로 언어를 전환하므로 config/locales에 ja.yml과 en.yml 파일을 작성하여 각 언어를 기술해 나갑니다.
※이번은 완성 이미지와 같이 검색 페이지의 타이틀 부분을 변경하는 것을 상정하고 있습니다.

config/locales/events.ja.yml
ja:
  events:
    search-title: "イベントを探す"

config/locales/events.en.yml
en:
  events:
    search-title: "Search Event"

③ 해당 부분의 HTML을 재작성



이번에 언어 전환이 하고 싶은 이벤트를 찾는 부분을 다시 써 갑니다.

(변경 전)

app/views
.title
  %h2 イベントを探す

(변경 후)

app/views
.title
  %h2= I18n.t('events.search-title')

해설


I18n.t('events.search-title')

여기서 방금 만든 locales 파일에 있는 events의 search-title 부분을 지정하고 있습니다.

언어 전환 버튼 만들기



그리고는 언어 전환을 위한 버튼을 만들어 완성입니다.
버튼은 모든 페이지에 설치하고 싶기 때문에 app/views/layouts/aplication.html 의 부분에 기술합니다.

app/views/layouts/aplication.html.haml
%lang.lang-container
  - if I18n.locale == :en
    = link_to '日本語', url_for(locale: :ja)
  - else
    = link_to 'English', url_for(locale: :en)
link_tourl_for 를 사용하면 파라미터만 변경할 수 있습니다.

이것으로 완성.

좋은 웹페이지 즐겨찾기