Як налаштувати локалізацію сайту на російську мову?
Локалізація під російськомовну аудиторію — не лише переклад тексту. Без правильної обробки відмінків, числівників, дат і кодування користувач бачить кракозябри або некоректні дані. Наприклад, форми замовлення ламаються через відмінювання: «1 товаров» замість «1 товар». Клієнти скаржаться на дивні закінчення в кошику, а менеджери втрачають ліди через невірний формат телефону. На одному проекті інтернет-магазину через відсутність локалізації конверсія впала на 15% — користувачі кидали кошик, бачачи «1 товаров». Після налаштування plural-правил конверсія відновилася. Ми вирішуємо ці проблеми під ключ, економлячи бізнесу до $1.8k–2.6kів на кожному етапі перекладу.
Що включає локалізація під російську аудиторію?
Відмінювання числівників — російська вимагає трьох форм для одного числа. Без цього в кошику побачиш «2 товаров» або «11 товар». Форматування дат — користувачі чекають «28 марта 2026 г.», а не «2026-03-28». Телефонні номери — єдиний формат +7 (XXX) XXX-XX-XX при вводі. Кодування бази даних — невірна collation породжує иероглифы. SEO — мета-теги з lang="ru", Open Graph для ВК, картки товарів з правильними hreflang. Багатомовність сайту вимагає узгоджених перекладів інтерфейсу та підтримки кирилиці. Неправильна локалізація коштує бізнесу до $2.7k–3.9kів на місяць через втрату лідів.
Як ми це робимо
Налаштування локалі в Laravel
// config/app.php
'locale' => 'ru',
'fallback_locale' => 'en',
'faker_locale' => 'ru_RU',
// resources/lang/ru/validation.php
return [
'required' => 'Поле «:attribute» обязательно.',
'email' => 'Введите корректный email.',
'min' => [
'string' => 'Поле «:attribute» должно содержать не менее :min символов.',
],
'unique' => 'Такое значение поля «:attribute» уже существует.',
'attributes' => [
'email' => 'email',
'password' => 'пароль',
'name' => 'имя',
'phone' => 'телефон',
],
];
Відмінювання числівників
Російські plural rules: 1 — одна форма, 2–4 — інша, 5–20 — третя, 21+ — повтор. На сервері використовуємо хелпер:
function plural(int $n, string $one, string $few, string $many): string {
$abs = abs($n);
$mod10 = $abs % 10;
$mod100 = $abs % 100;
if ($mod100 >= 11 && $mod100 <= 19) return "$n $many";
if ($mod10 === 1) return "$n $one";
if ($mod10 >= 2 && $mod10 <= 4) return "$n $few";
return "$n $many";
}
echo plural(1, 'товар', 'товара', 'товаров'); // 1 товар
echo plural(3, 'товар', 'товара', 'товаров'); // 3 товара
echo plural(11, 'товар', 'товара', 'товаров'); // 11 товаров
На фронтенді — Intl.PluralRules з MDN:
const rules = new Intl.PluralRules('ru')
const forms: Record<string, string> = {
one: 'товар',
few: 'товара',
many: 'товаров',
other: 'товаров',
}
function pluralize(n: number): string {
return `${n} ${forms[rules.select(n)]}`
}
pluralize(1) // "1 товар"
pluralize(22) // "22 товара"
pluralize(100) // "100 товаров"Intl.PluralRules автоматично підхоплює локаль браузера, не потрібно прописувати винятки для 11–19. На сервері ж хелпер дає повний контроль. Ми використовуємо обидва підходи.
Порівняння підходів:
| Аспект | PHP-хелпер | Intl.PluralRules |
|---|---|---|
| Залежність від локалі | Ручне налаштування | Автоматична, бере з браузера |
| Підтримка винятків (11–19) | Так, у коді | Так, вбудована |
| Продуктивність | Дуже швидко | Легковагово |
| Гнучкість | Повний контроль | Стандарт ECMAScript |
Intl.PluralRules краще для клієнта (єдине джерело), хелпер — для сервера, де ECMAScript недоступний.
Форматування дат і чисел
const dateFormatter = new Intl.DateTimeFormat('ru-RU', {
day: 'numeric',
month: 'long',
year: 'numeric',
})
dateFormatter.format(new Date()) // "28 марта 2026 г."
new Intl.DateTimeFormat('ru-RU').format(new Date()) // "28.03.2026"
const rtf = new Intl.RelativeTimeFormat('ru', { numeric: 'auto' })
rtf.format(-2, 'day') // "позавчера"
rtf.format(-5, 'day') // "5 дней назад"
new Intl.NumberFormat('ru-RU', {
style: 'currency',
currency: 'USD',
maximumFractionDigits: 0,
}).format(14990) // "$130–190" Телефонні номери
Неправильний формат — втрачені ліди. Користувачі очікують +7 (XXX) XXX-XX-XX. Якщо номер вводиться через дефіс, маска його виправить.
function formatRuPhone(value: string): string {
const digits = value.replace(/\D/g, '')
const normalized = digits.startsWith('8') ? '7' + digits.slice(1) : digits
if (normalized.length !== 11 || !normalized.startsWith('7')) return value
return `+7 (${normalized.slice(1, 4)}) ${normalized.slice(4, 7)}-${normalized.slice(7, 9)}-${normalized.slice(9)}`
}
formatRuPhone('89161234567') // "+7 (916) 123-45-67" База даних: кодування
Перевірте, що база даних використовує UTF-8. Для MySQL: SHOW VARIABLES LIKE 'character_set%' — character_set_database и character_set_server мають бути utf8mb4. У Laravel .env додаємо:
DB_CHARSET=utf8mb4 DB_COLLATION=utf8mb4_unicode_ci Для PostgreSQL: SHOW server_encoding — має бути UTF8.
Типові помилки під час локалізації
| Помилка | Наслідки | Рішення |
|---|---|---|
| Забувають про три форми числівників | «1 товарів», «2 товар» | Реалізувати plural-хелпер |
| Дату з роком пишуть з малої літери | «28 березня 2026 р.» виглядає неграмотно | Використовувати Intl.DateTimeFormat |
| Телефон не маскується під час введення | Користувач вводить 8-916-123-45-67, втрачається єдиний формат | Маска +7 (XXX) XXX-XX-XX |
| Кодування БД — latin1 замість UTF-8 | Крякозябри в тексті | Переключити на utf8mb4 |
| на російській версії | SEO-проблеми, неправильний hreflang | Встановити lang="ru" |
Що входить у роботу
- Налаштування locale у конфізі додатка.
- Переклад усіх validation messages російською.
- Реалізація plural-хелпера на сервері та клієнті.
- Форматування дат, чисел, валют через Intl.
- Маска телефонного номера +7 (XXX) XXX-XX-XX.
- Перевірка кодування БД (UTF-8).
- SEO-метатеги: , Open Graph.
- Тестування на реальних даних.
- Документація з доналаштування.
Процес роботи
- Аналітика — рев'ю поточної локалізації, виявлення помилок.
- Проєктування — вибір підходу (Intl vs хелпери), узгодження стилю перекладів.
- Реалізація — код за пунктами вище.
- Тестування — перевірка на 10+ сценаріях (різні числа, дати, телефони).
- Деплой — розгортання з CI/CD, моніторинг.
Терміни
Базове налаштування — від 1 до 3 робочих днів. Складні проєкти (багато мов, кастомні plural rules) — до 5 днів. Вартість розраховується індивідуально після аудиту.
Спираємося на досвід понад 100 проєктів, 5+ років на ринку. Даємо гарантію на коректну роботу всіх локальних форматів. Якщо щось пішло не так — виправимо в межах підтримки.
Замовте російську локалізацію — зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію.







