Rails에서 i18n을 사용할 경우 공식 환경 설정도 주의해야 합니다.

3690 단어 RubyRails
Rails에서 i18n화할 때 개발 환경과 공식 환경에 따라 번역문도 차이가 났기 때문에 이 해소 방법 노트를 써야 한다.

컨디션

  • Ruby 2.4.1
  • Rails 5.1.4
  • 개요


    Rails 설명서2.3 언어 환경의 설정과 연결에 따라 i18n을 적용하고 로컬 개발 환경에서 설치 방법에 따라 영어 태그를 실행합니다.
    그러나 정식 촬영 환경에서 헤로쿠가 디자인을 한 후, 예를 들어 블로그 일람화면에서 왠지 아래와 같은 불완전한 영어 쓰기 방식이 되었다.
    로컬 뷰
    공식 환경(Heroku)의 표현


    View 기술


    블로그 일람index.html.erb을 표시하는 기술은 다음과 같다.
    t방법으로 문장과 관련된 부분을 기술하고ja.yml 또는en.yml로 구체적인 문장을 정의한다.
    <h1 class="title"><%=t :blog_list %></h1>
    <div class="container">
      <div class="row">
        <% @blogs.each do |blog| %>
          <div class="col-xs-12 col-md-6 blog-panel">
            <h2><%= blog.title %></h2>
            <p><%= blog.content %></p>
            <p><%=t :author %>:<%= blog.user.name %></p>
            <p><%=t :created_at %>:<%= blog.created_at %></p>
            <div class="blog-link">
              <%= link_to t(:detail), blog_path(blog.id), class: "btn btn-default" %>
              <% if blog.user == current_user %>
                <%= link_to t(:edit), edit_blog_path(blog.id), class: "btn btn-info" %>
                <%= link_to t(:delete), blog_path(blog.id), method: :delete, data: { confirm: "削除しますか?" }, class: "btn btn-danger" %>
              <% else %>
                <%= link_to t(:edit), '', class: "btn btn-info", disabled: "disabled" %>
                <%= link_to t(:delete), '', class: "btn btn-danger", disabled: "disabled" %>
              <% end %>
            </div>
          </div>
        <% end %>
      </div>
    </div>
    
    
    I18n.load_path 결과 되돌아오는 배열 요소에 다음과 같은 내용이 포함되어 있기 때문에 로컬에서 설정한yml 파일을 정확하게 읽는 경우.
    "/app/config/locales/en.yml", "/app/config/locales/ja.yml", "/app/config/locales/model.en.yml", "/ap p/config/locales/model.ja.yml"
    

    결실

    config/environments/production.rb의 값config.i18n.fallbackstrue에서 false로 변경함으로써 해결되었다.
    # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
    # the I18n.default_locale when a translation cannot be found). |
    config.i18n.fallbacks = false
    
    기본 메모의 위 두 행에 프롬프트가 숨겨져 있는 경우fallbacks = trueen.yml에서 번역문을 찾을 수 없는 경우 검색 대상을 기본 언어 환경으로 되돌려줍니다. (이 경우 ja입니다.)
    나의 경우 en.yml 최소한의 번역문만 쓴다. 예를 들어'블로그 일람'과 같은 제목의 영역을 찾지 못하면 기본적인 일본어 제목이 표시된다.fallbacks = falseen.yml 지정이 없으면 t 메서드의 매개변수를 (snake case)->(Camel Case)로 변환한 후 문자열이 표시되므로 표시되는 내용이 대상과 일치합니다.
    상술한 방법en.yml을 습득했다면 불필요한 번역문을 쓸 필요가 없었을 것이다. 그러나 잘 이해하지 못하면 성실하게en.yml 번역문을 정확하게 쓰는 것이 좋다.

    좋은 웹페이지 즐겨찾기