рельсы стратегии для интернационализации больших объемов текста (и некоторых HTML) - PullRequest
20 голосов
/ 07 февраля 2012

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

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

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

1 Ответ

43 голосов
/ 07 февраля 2012

Если вы хотите локализовать большие куски кода и контента, вы можете просто использовать партиалы. Частично соблюдаются соглашения 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 / файлы локали.

ОБНОВЛЕНИЕ:

Если локализуемый контент содержит код форматирования, вы также можете использовать 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 %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...