Антон!

Задача сделать сайт многоязычным довольно объёмная. Сперва сайт надо подготовить к многоязычности, интернационализировать:

  • решить как определять текущий язык: из урла, настроек пользователя, заголовка 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. P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы