Files
veilix.app/docs/06-i18n.md
T
andreypr207andClaude Opus 5.5 515acfb69d Документация: этапы по фазам, решения D-026…D-033
- Новый порядок этапов (D-026): фаза 1 — концепт на dev без внешних
  сервисов (1b сайт, 1c вход, 1d ключи, 1e счёт и демо-оплата,
  1f демо-выдача, 1g продления, 1h рефералы); фаза 2 — Telegram;
  фаза 3 — ALTCHA, ЮKassa, почта, Twenty, Chatwoot, Umami, выдача
  через API и публичный запуск; фаза 4 — звёзды и эквайринги.
- Решения: демо-оплата по списку IP (D-027), выдача ключей через
  адаптер manual/demo/api (D-028), страницы сайта из блоков Payload
  (D-029), пересборка через revalidatePath (D-030), RU-адрес у mass
  (D-031), счётчик свободных серверов (D-032), переводы на 5 языков
  в каждом этапе (D-033).
- Тексты описывают работающий продукт; Вейликс — выделенный IP на
  общем сервере; Telegram поддержки — @veilix_support; сроки ответа
  не обещаем; VPN-серверы не ведут журналов.
- Ссылки на этапы во всех документах, Q-12 решён (ЮKassa для RUB),
  R-19 (библиотеки для headless Chromium) сделано.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 03:48:10 +02:00

8.0 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. Точнее, без префикса открывается язык домена по умолчанию (domains.defaultLocale, сейчас везде en), а адрес с его префиксом (/en/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. Перенаправление на версию с префиксом — с адреса без префикса и только если выбран не язык домена по умолчанию (D-024). Есть cookie NEXT_LOCALE — ведём на язык из cookie; cookie нет — определяем по языку браузера и стране. Перенаправляются только GET и HEAD. Поисковых ботов не перенаправляем никогда: так рекомендует Google.
  3. Переключатель языка ставит cookie NEXT_LOCALE. У вошедшего пользователя язык сохраняется ещё и в профиле: на нём уходят письма и сообщения бота.
  4. Соответствие стран языкам по умолчанию: RU, BY, KZ, KG → ru; DE, AT → de; FR → fr; ES и испаноязычные страны Латинской Америки → es (Бразилия — en, пока нет pt-br); остальные → en. Таблица — src/core/routing/locale.ts.

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 строк). Интерфейс ложится в messages/*.json, тексты страниц и остальной контент — в Payload (D-029).
  2. Немецкий, французский, испанский переводит Claude с глоссарием в каждом этапе, вместе с RU и EN (D-033). Вычитки носителями нет, поэтому глоссарий и контекст обязательны. Финальная проверка — на публичном запуске (этап 3h).
  3. В юридических текстах пункт: «При расхождениях между версиями действует английская».
  4. Новая строка интерфейса или контента сразу появляется на 5 языках.

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 добавляются на этапе 1b.