7.2 KiB
7.2 KiB
06. Языки и валюты на сайте
1. Языки
- Сейчас:
en(по умолчанию),ru,de,fr,es. - Позже:
pt-br(бразильский португальский) иja. Для японского понадобится запасной шрифт: Commissioner и Unbounded не содержат японских знаков. - Список языков задаётся в конфиге Payload и next-intl (код). У каждого домена в базе — включённые языки и язык по умолчанию.
- Интерфейс админки —
ruиen.
2. Два слоя переводов
| Что | Где | Кто правит |
|---|---|---|
| Интерфейс: кнопки, подписи, ошибки, сообщения форм | src/i18n/messages/{en,ru,de,fr,es}.json, next-intl |
разработка, через git |
| Контент: тарифы, локации, FAQ, страницы, шаблоны писем, тексты бота | локализованные поля Payload | админка, без деплоя |
- В коде компонентов нет строк на конкретном языке, только ключи переводов.
- Нет перевода на языке — показывается английский. Отдельная проверка выводит список непереведённых ключей.
- Множественные числа — ICU в next-intl: «12 серверов», «3 сервера», «1 сервер».
3. URL
- Английский без префикса, остальные — с префиксом:
veilix.app/pricing,veilix.app/ru/pricing,veilix.app/de/pricing. - Так же в кабинете:
my.veilix.app/keys,my.veilix.app/ru/keys. - MiniApp: адрес в BotFather один, поэтому язык берётся из профиля пользователя или из Telegram; префикс в URL необязателен.
- Пути одинаковые для всех языков (английские):
/pricing,/locations,/support,/legal/terms,/keys,/billing,/referral,/order,/login. - Язык, не включённый на домене, — 404.
4. Определение языка
- Порядок: язык из URL → выбранный ранее (cookie
NEXT_LOCALE, у вошедшего — язык профиля) → язык браузера (Accept-Language) среди включённых → страна из заголовка nginxX-Geo-Country(MaxMind) →en. - Перенаправление на версию с префиксом — только при первом заходе на адрес без префикса, без cookie, и только если выбран не английский. Поисковых ботов не перенаправляем никогда: так рекомендует Google.
- Переключатель языка ставит cookie
NEXT_LOCALE. У вошедшего пользователя язык сохраняется ещё и в профиле: на нём уходят письма и сообщения бота. - Соответствие стран языкам по умолчанию: RU, BY, KZ, KG → ru; DE, AT → de; FR → fr; ES и страны Латинской Америки → es; остальные → en.
5. SEO
hreflangна все включённые языки иx-defaultна английскую версию.canonicalна основной домен.sitemap.xmlдля каждого маркетингового домена с вариантами всех языков.- Кабинет и MiniApp не индексируются (
noindex). - Атрибут
langу<html>соответствует языку страницы.
6. Валюта
- Переключатель валюты отдельный от языка, стоит рядом с переключателем языка в шапке и подвале. В макете его нет — добавляется в стиле переключателя языка.
- Валюта не определяется по стране: из России часто заходят через VPN.
- По умолчанию — валюта домена для языка (
domains.localeCurrency: ru → RUB), иначеdomains.defaultCurrency(USD). - Выбор хранится в cookie
vx_currency. Валюта не входит в URL: маркетинговые страницы заранее собраны во всех валютах, proxy выбирает вариант по cookie. Поисковые боты видят валюту по умолчанию. - Ссылка «Купить» передаёт валюту в оформление заказа (
?currency=). У вошедшего пользователя в кабинете всегда валюта аккаунта (04-billing.md, раздел 2). - Форматирование —
Intl.NumberFormatс узким символом валюты: «4 900 ₽» в русском, «₽4,900» в английском, «$49». Неразрывные пробелы ставит Intl. Даты —Intl.DateTimeFormat: «14 октября 2026».
7. Как переводим
- Источник: русские тексты макетов и английские из словаря макета
design/handoff/project/i18n.js(около 515 строк). Они ложатся вru.jsonиen.jsonи в контент Payload. - Немецкий, французский, испанский — машинный перевод LLM с глоссарием на этапе 1h. Вычитки носителями нет, поэтому глоссарий и контекст обязательны.
- В юридических текстах пункт: «При расхождениях между версиями действует английская».
- Новая строка интерфейса: разработчик добавляет ключ в
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.