Files
veilix.app/docs/06-i18n.md
T
2026-10-21 03:30:38 +02:00

7.2 KiB
Raw Blame History

06. Языки и валюты на сайте

1. Языки

  1. Сейчас: en (по умолчанию), ru, de, fr, es.
  2. Позже: pt-br (бразильский португальский) и ja. Для японского понадобится запасной шрифт: Commissioner и Unbounded не содержат японских знаков.
  3. Список языков задаётся в конфиге Payload и next-intl (код). У каждого домена в базе — включённые языки и язык по умолчанию.
  4. Интерфейс админки — ru и en.

2. Два слоя переводов

Что Где Кто правит
Интерфейс: кнопки, подписи, ошибки, сообщения форм src/i18n/messages/{en,ru,de,fr,es}.json, next-intl разработка, через git
Контент: тарифы, локации, FAQ, страницы, шаблоны писем, тексты бота локализованные поля Payload админка, без деплоя
  1. В коде компонентов нет строк на конкретном языке, только ключи переводов.
  2. Нет перевода на языке — показывается английский. Отдельная проверка выводит список непереведённых ключей.
  3. Множественные числа — ICU в next-intl: «12 серверов», «3 сервера», «1 сервер».

3. URL

  1. Английский без префикса, остальные — с префиксом: veilix.app/pricing, veilix.app/ru/pricing, veilix.app/de/pricing.
  2. Так же в кабинете: my.veilix.app/keys, my.veilix.app/ru/keys.
  3. MiniApp: адрес в BotFather один, поэтому язык берётся из профиля пользователя или из Telegram; префикс в URL необязателен.
  4. Пути одинаковые для всех языков (английские): /pricing, /locations, /support, /legal/terms, /keys, /billing, /referral, /order, /login.
  5. Язык, не включённый на домене, — 404.

4. Определение языка

  1. Порядок: язык из URL → выбранный ранее (cookie NEXT_LOCALE, у вошедшего — язык профиля) → язык браузера (Accept-Language) среди включённых → страна из заголовка nginx X-Geo-Country (MaxMind) → en.
  2. Перенаправление на версию с префиксом — только при первом заходе на адрес без префикса, без cookie, и только если выбран не английский. Поисковых ботов не перенаправляем никогда: так рекомендует Google.
  3. Переключатель языка ставит cookie NEXT_LOCALE. У вошедшего пользователя язык сохраняется ещё и в профиле: на нём уходят письма и сообщения бота.
  4. Соответствие стран языкам по умолчанию: RU, BY, KZ, KG → ru; DE, AT → de; FR → fr; ES и страны Латинской Америки → es; остальные → en.

5. SEO

  1. hreflang на все включённые языки и x-default на английскую версию.
  2. canonical на основной домен.
  3. sitemap.xml для каждого маркетингового домена с вариантами всех языков.
  4. Кабинет и MiniApp не индексируются (noindex).
  5. Атрибут lang у <html> соответствует языку страницы.

6. Валюта

  1. Переключатель валюты отдельный от языка, стоит рядом с переключателем языка в шапке и подвале. В макете его нет — добавляется в стиле переключателя языка.
  2. Валюта не определяется по стране: из России часто заходят через VPN.
  3. По умолчанию — валюта домена для языка (domains.localeCurrency: ru → RUB), иначе domains.defaultCurrency (USD).
  4. Выбор хранится в cookie vx_currency. Валюта не входит в URL: маркетинговые страницы заранее собраны во всех валютах, proxy выбирает вариант по cookie. Поисковые боты видят валюту по умолчанию.
  5. Ссылка «Купить» передаёт валюту в оформление заказа (?currency=). У вошедшего пользователя в кабинете всегда валюта аккаунта (04-billing.md, раздел 2).
  6. Форматирование — Intl.NumberFormat с узким символом валюты: «4 900 ₽» в русском, «₽4,900» в английском, «$49». Неразрывные пробелы ставит Intl. Даты — Intl.DateTimeFormat: «14 октября 2026».

7. Как переводим

  1. Источник: русские тексты макетов и английские из словаря макета design/handoff/project/i18n.js (около 515 строк). Они ложатся в ru.json и en.json и в контент Payload.
  2. Немецкий, французский, испанский — машинный перевод LLM с глоссарием на этапе 1h. Вычитки носителями нет, поэтому глоссарий и контекст обязательны.
  3. В юридических текстах пункт: «При расхождениях между версиями действует английская».
  4. Новая строка интерфейса: разработчик добавляет ключ в en.json и ru.json; de, fr, es переводятся пакетно перед выкладкой.

8. Глоссарий

RU EN Примечание
Вейликс / ВейликсВПН Veilix / VeilixVPN не переводится
ключ key купленная единица доступа
локация location
тариф plan
подключение connection
устройство device
индивидуальный IP dedicated IP
RU-адрес RU address
баланс, счёт balance
пополнить top up
продление, автопродление renewal, auto-renewal
льготный период grace period
реферальная программа referral program
установим за 24 часа ready within 24 hours статус локации dedicated

Колонки для de, fr, es добавляются на этапе 1h.