Антон!
Задача сделать сайт многоязычным довольно объёмная. Сперва сайт надо подготовить к многоязычности, интернационализировать:
решить как определять текущий язык: из урла, настроек пользователя, заголовка Accept‑Language или по геолокации;
заменить текст на абстрактные ключи («Новости» → nav.news, «Подписаться» → form.subscribe);
подготовить к локализации даты, время, денежные единицы и фразы с числительными (Нет писем, 5 писем, 2 письма).
После этого надо локализовать сайт, добавив переводы и форматы для требуемых языков.
Что для этого использовать — зависит от вашей задачи и используемых технологий. Советую использовать что‑то готовое: штатный i18n в Рельсовых проектах, i18n.js или i18next в проектах на Яваскрипте и Ноде. Они хорошо документированы, поддерживают плюрализацию и локализацию дат, чисел и денежных единиц.
Выбранный бэкенд интернационализации и определит хранилище переводов. Как правило, используют YAML, JSON или какой‑то нативный формат.
Например, в книгах бюро переводы хранятся в объектах Яваскрипта, а нужный перевод выбирается по языку, на котором написана книга:
I18n.translations.ru.test = {
intro: 'Ответьте на все вопросы теста, <br>чтобы узнать результат.',
rerun: '↺ Пересдать',
scored: { // плюрализация
one: 'Вы ответили правильно на %{count} вопрос из %{total}',
few: 'Вы ответили правильно на %{count} вопроса из %{total}',
many: 'Вы ответили правильно на %{count} вопросов из %{total}',
other: 'Вы ответили правильно на %{count} вопросов из %{total}',
},
};
I18n.translations.en.test = {
intro: 'Answer all questions of the test<br>to know the result.',
rerun: '↺ Retake',
scored: {
one: "You've correctly answered %{count} question out of %{total}",
other: "You've correctly answered %{count} questions out of %{total}",
},
};
В проектах на Рельсах переводы, как правило, хранятся в YAML, а язык определяется по урлу (?locale=es), настройкам пользователя или заголовку Accept‑Language.
# config/locales/en.yml
en:
date:
formats:
short_date: "%b %e, %Y" # Apr 22, 2017
form:
import: Import
caution: Caution
# config/locales/de.yml
de:
date:
formats:
short_date: "%e. %b %Y" # 22. Apr 2017
form:
import: Importiern
caution: Achtung
Советую сразу обозначить текущий язык в разметке: <body class="en_locale">
. Так будет проще исправлять вёрстку для языков, в которых слова в 2–3 раза длиннее или короче, чем в русском: немецкий, японский, китайский.
Ещё по теме
P. S. Мы ищем фронтендера в издательство.
P. P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.