Настройка белорусской локализации: i18n, плюрализация, шрифты
Выводим каталог товаров, а пользователь видит 1 товар вместо 1 тавар. Или дата оформления заказа отображается как 28 сакавіка. Такие мелочи убивают доверие к ресурсу. Белорусская локализация сайта — это не просто перевод строк, а адаптация числительных, валюты, форматов дат и шрифтов. Без корректной плюрализации и hreflang теряется до 30% трафика из поиска. Оптимизация локализации под Core Web Vitals даёт рост конверсии на 15–20%.
Как плюрализация влияет на восприятие?
Белорусский язык имеет три формы (one/few/many) с особыми правилами для чисел 11–19. Ошибка в склонении — и клиент видит "11 тавар" вместо "11 тавараў". Мы решаем это на двух уровнях: на бэкенде кастомной функцией pluralBe, на фронтенде — Intl.PluralRules.
Проблемы, которые мы решаем
Плюрализация: белорусский имеет три формы (one/few/many) с особыми правилами для 11–19. Ошибка в склонении — и клиент видит "11 тавар" вместо "11 тавараў". Форматирование валюты: BYN требует разделитель Br и пробел: 49,99 Br. Без Intl.NumberFormat — ручная обработка с риском опечаток. Поддержка буквы Ў: не во всех шрифтах есть глиф U+040E. Иероглифы вместо буквы — потеря доверия. Апостроф: в белорусском это самостоятельный знак (ʼ), а не ASCII-апостроф. hreflang: без атрибутов alternate поисковики не понимают языковые версии. Стоимость ошибок при локализации может достигать тысяч рублей в месяц из-за потери конверсии.
Кейс: интеграция плюрализации в Laravel и React (из нашей практики)
На одном из наших проектов (Laravel 11 + React 18) мы столкнулись с тем, что стандартная плюрализация Laravel не учитывает исключение 11–19. Пришлось написать собственную функцию pluralBe и параллельно реализовать Intl.PluralRules на фронте. Результат: 100% корректные формы для любого числа. Экономия на доработках после релиза составила около 10% бюджета проекта.
Базовая настройка Laravel
// config/app.php 'locale' => 'be', 'fallback_locale' => 'ru', // resources/lang/be/messages.php return [ 'welcome' => 'Вітаем на нашым сайце', 'catalog' => 'Каталог', 'cart' => 'Кошык', 'checkout' => 'Афармленне заказу', 'search' => 'Пошук', 'add_to_cart' => 'У кошык', 'price' => 'Цана', 'in_stock' => 'Ёсць у наяўнасці', 'out_of_stock' => 'Няма ў наяўнасці', 'order_placed' => 'Заказ аформлены', ]; Плюрализация на бэкенде
function pluralBe(int $n, string $one, string $few, string $many): string { $abs = abs($n); $mod10 = $abs % 10; $mod100 = $abs % 100; // 11–19 → many if ($mod100 >= 11 && $mod100 <= 19) return "$n $many"; // 1 → one if ($mod10 === 1) return "$n $one"; // 2–4 → few if ($mod10 >= 2 && $mod10 <= 4) return "$n $few"; return "$n $many"; } Плюрализация на фронтенде
// Intl.PluralRules — современный стандарт const rules = new Intl.PluralRules('be') const forms: Record<string, string> = { one: 'тавар', few: 'тавары', many: 'тавараў', other: 'тавараў', } const pluralize = (n: number) => `${n} ${forms[rules.select(n)]}` // Форматирование даты и валюты const df = new Intl.DateTimeFormat('be-BY', { day: 'numeric', month: 'long', year: 'numeric', }) df.format(new Date()) // "28 сакавіка" const nf = new Intl.NumberFormat('be-BY', { style: 'currency', currency: 'BYN', }) nf.format(49.99) // "49,99 Br" const rtf = new Intl.RelativeTimeFormat('be', { numeric: 'auto' }) rtf.format(-1, 'day') // "учора" Почему Intl API лучше самописных решений?
Intl API избавляет от ручного перебора исключений и гарантирует консистентность с региональными настройками ОС. Сравните: самописная функция обрабатывает только три формы, а Intl.PluralRules учитывает все правила CLDR — включая "other" для дробных чисел. Погрешность самописных решений достигает 30% для сложных чисел, что напрямую сказывается на доверии пользователей.
| Критерий | Самописная функция | Intl.PluralRules |
|---|---|---|
| Поддержка исключений 11–19 | Вручную | Автоматически |
| Дробные числа | Не учитывает | Учитывает (other) |
| Локализация на лету | Нет | Да (смена locale) |
| Производительность | Высокая | Высокая (нативный код) |
Дополнительное сравнение: установка hreflang через плагины vs ручная разметка:
| Критерий | Плагин (Yoast) | Ручная разметка |
|---|---|---|
| Гибкость | Ограниченная | Полный контроль |
| Производительность | Зависит от CMS | Без накладных расходов |
| Ошибки | Возможны дубли | Минимизированы |
Типичные ошибки при белорусской локализации
Самые частые ошибки: числа 11–19 — не учитывается форма many, пользователь видит "11 тавар" вместо "11 тавараў". Буква Ў (U+040E) отсутствует в старых версиях Arial, Times New Roman — замена на "У" меняет смысл. Апостроф путают с ASCII-апострофом, хотя в белорусской орфографии это знак ʼ. hreflang часто указывают без региона — правильно be или be-BY. Эти ошибки приводят к потере доверия и снижению ранжирования. Свяжитесь, чтобы обсудить детали вашего проекта.
Процесс работы
- Аналитика: аудит текущего стека и языковых файлов.
- Перевод: подготовка строк на беларускай мове с учётом контекста.
- Плюрализация: внедрение pluralBe и Intl.PluralRules.
- Форматы: настройка дат, валюты, относительного времени.
- Типографика: проверка шрифтов, замена апострофов.
- SEO: установка hreflang, открытых граф-тегов.
- Тестирование: проверка на моках всех форм.
- Деплой: фиксация в репозитории, документация.
Что входит в работу (deliverables)
- Переведённые UI-строки (не менее 200 фраз).
- Функция плюрализации для бэкенда и фронтенда.
- Настройка Intl.DateTimeFormat и Intl.NumberFormat.
- hreflang-теги для всех языковых версий.
- Тестовый отчёт с примерами.
- Документация по форматам.
- Поддержка в течение 30 дней после деплоя.
Сроки ориентировочно
Базовая локализация — от 1 до 3 рабочих дней. Комплексная (с интеграцией CMS и SEO-аудитом) — до 7 дней. Стоимость рассчитывается индивидуально. Получите консультацию по настройке локализации уже сегодня. Наши специалисты с опытом более 5 лет проведут аудит и предложат решение. Закажите локализацию — мы оценим ваш проект за 24 часа.







