Подтвердить что ты не робот

Rails стратегии для интернационализации большого количества текста (и некоторых html)

Я создаю веб-сайт, который будет на английском, китайском и корейском языках. На некоторых страницах есть большая часть макета и текста, например страница "О программе". На этой странице будет много заголовков, много абзацев текста и какой-то макет.

Какой рекомендуемый способ интернационализации моего сайта? Все примеры, которые я видел, предназначены для коротких бит текста или текста для кнопок/ссылок и т.п.

Я единственный вариант иметь тонну пар ключ/значение в моих файлах yaml local local? Или есть лучший способ сделать это? В настоящее время у меня есть ключ/значение в моем yaml с ключом, заканчивающимся на _html, поэтому я могу иметь html в ключе, но все это должно быть на ONE, поэтому оно довольно уродливо, трудно поддерживать и подвержено ошибкам.

4b9b3361

Ответ 1

Если вы хотите локализовать большие куски кода и контента, вы можете просто использовать частичные. Частицы уважают соглашения I18n, как и представления и шаблоны.

# app/views/about.html.erb
<%= render :partial => 'about_contents' %>

# app/views/_about_contents.en.html.erb
<h1>About us</h1>
<p>Some large content...</p>

# app/views/_about_contents.fr.html.erb
<h1>A propos</h1>
<p>Un contenu quelconque...</p>

Для ярлыков, небольших текстов, форматов дат и т.д. вы можете продолжать использовать файлы I18n.t/locale.

ОБНОВЛЕНИЕ:

Если содержимое, которое должно быть локализовано, содержит код форматирования, вы также можете использовать content_for, чтобы получить текстовое содержимое из частичного и избежать дублирования кода для макетов и разделяемых разметок.

# app/views/about.html.erb
<%= render :partial => 'about_contents' %>
<div class="whatever">
  <p><%= yield :content_one %></p>
</div>
</div class="whatever_two">
  <p><%= yield :content_two %></p>
</div>

# app/views/_about_contents.en.html.erb
<% content_for :content_one do %>
Some large content...
<% end %>
<% content_for :content_two do %>
Some other large content...
<% end %>

# app/views/_about_contents.fr.html.erb
<% content_for :content_one do %>
Un contenu quelconque...
<% end %>
<% content_for :content_two do %>
Un autre contenu quelconque...
<% end %>