Налаштування локалізації Contentful: i18n, fallback, Next.js

Мультимовний сайт ламається там, де переклади розходяться з логікою видачі мови. Ми налаштовуємо локалізацію Contentful під ключ: моделі, правила підстановки та регламенти для редакторів. Контент виходить усіма мовами одночасно, а правки більше не потребують розробника.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування локалізації Contentful: i18n, fallback, Next.js
Простий
від 1 дня до 3 днів
Часті запитання

Локалізація Contentful: де ламається багатомовний контент

У Contentful багатомовність — властивість моделі, а не окремий модуль: кожне поле запису або локалізоване, або спільне для всіх локалей. Перший збій росте саме звідси — заголовок і текст позначені як локалізовані, а частина адреси, обкладинка й метаполя залишилися спільними.

Англійська версія відкривається, але адреса й прев’ю в ній російські: це вже не переклад, а суміш мов.

Далі — розсинхрон перекладів. Редактор правит текст у базовій локалі, переклад оновлюється вручну й відстає; чим частіше виходять правки, тим ширша розбіжність, і через місяць ніхто не скаже, яка версія актуальна.

Резервна локаль маскує проблему: відвідувач бачить підставлений текст основної мови й не розуміє, чому половина сторінки чужа.

Окрема історія — дублі записів.

Якщо локалізацію не налаштували одразу, команда заводить по запису на кожну мову й пов’язує їх вручну: зв’язки рвуться при першому перейменуванні, асети дублюються, реєстр зростає швидше за контент, а дві версії починають конфліктувати за однією й тією самою адресою.

Зверху лягає перемикач мови. Він будується за списком локалей у просторі, а не за фактом наявності перекладу, тому натискання на іншу мову веде на порожню сторінку або на биту адресу версії — частина адреси не локалізована, маршрут зібраний за старим шаблоном. Нижче розбираємо, як це закривається на рівні моделі, маршрутів і збірки.

Що дає керована багатомовність сайту

Мовна версія — це не копія сторінки, а окремий запис із локаллю та правилом підстановки. Коли схема версій описана в моделі контенту, а не в шаблонах, редактор наповнює сторінку новою мовою тими самими полями, що й основною, а розробник не переносить розмітку вручну.

У Contentful локалі, зв’язки між версіями та історія змін живуть в одному сховищі — звідси й керованість.

Чотири ефекти, які видно в метриках.

  • Строк випуску сторінки. Нова мова збирається з готових блоків: перекладається текст, структура й компоненти використовуються повторно. Замість викладання окремої копії зі своєю версткою — публікація локалі в тому самому дереві.
  • Обсяг ручних правок. Підстановка налаштовується за полем: порожній переклад показує значення мови за замовчуванням. Розділ відкривається, не чекаючи повного перекладу, а правка тексту не розходиться по копіях.
  • Клас відмов. Мовні адреси та зв’язки між версіями будуються з даних, а не з ручних списків. Зникає типовий збій, коли після релізу частина локалей віддає основну мову або губить сторінку.
  • Частка зарубіжного трафіку. Відвідувач потрапляє на свою мову з першого заходу й залишається на ній. Зростає частка візитів на локальній версії та глибина перегляду, бо перемикати мову вручну не потрібно.

Схема версій задає й порядок роботи: нову локаль вмикають налаштуванням, а не окремим проєктом.

Моделі локалізації Contentful: порівняння варіантів

Contentful зберігає мовні версії двома різними способами: переклад на рівні поля всередині запису або окремий запис під кожну мову.

Моделі локалізації відрізняються не лише зберіганням — від них залежать схема адрес, підстановка відсутніх перекладів і права редакторів, а зміна моделі посеред проєкту коштує дорожче, ніж вибір на старті.

Варіант Коли підходить Обмеження
Мова як поле запису Набір полів однаковий для всіх мов, переклади публікують синхронно Одна схема на всі мови: поле під окремий ринок не додати, права на мову не роздати
Окремий запис на мову У ринків свої поля, свої дати публікації та власні зв’язки Міжмовні зв’язки дублюються вручну й розсинхронізуються, обсяг контенту зростає пропорційно до кількості мов
Окремий простір під мову Потрібна ізоляція: свої моделі, права та незалежний графік релізів Схему синхронізують вручну, медіа дублюється, наскрізний пошук за мовами не працює

Вибір моделі ведуть за трьома ознаками: чи розходяться схеми між ринками, хто відповідає за публікацію та скільки мов планується в найближчий рік.

Далі модель задає поведінку підстановки: при локалізації на рівні поля відсутній переклад віддає базова локаль за кожним полем окремо, а при окремих записах зв’язки між мовами доводиться вести самому.

Етапи впровадження багатомовного контуру

Багатомовний контур ламається не на перекладах, а на моделі даних: поки локаль не заведена в структуру, кожна нова мова перетворюється на ручне дублювання записів і розходження версій. Нижче — шість кроків, де кожен спирається на попередній, тому переробки не спливають на середині.

  1. Аудит контентної моделі. Розбираємо типи записів Contentful і поля: де текст, де посилання на інші записи, де значення зашиті в шаблон. Позначаємо поля, обов’язкові до перекладу, і спільні для всіх мов — зображення, ключі інтеграцій, службові значення.
  2. Проєктування схеми мов. Фіксуємо перелік локалей, основну локаль і регіональні варіанти з єдиними кодами. Окремо вирішуємо, чи потрібні варіанти письма справа наліво і як це позначається на верстці — від цього залежать макети й довжина рядків.
  3. Правила резервної підстановки. Задаємо ланцюжок: немає перекладу — беремо значення регіонального варіанта, потім основної локалі. Визначаємо поля, де підстановка допустима, і ті, де потрібен повний переклад, інакше чужий текст спливе на вітрині.
  4. Налаштування та зв’язка з рендерингом. Локалі прив’язуємо до адрес, додаємо мовні альтернативи для пошукових систем, перемикач і метадані. Спільні елементи — меню, підвал, формати дат і чисел — перекладаємо словниками, а не дублями записів.
  5. Перевірка перемикання. Проганяємо всі маршрути в кожній локалі: порожні поля, биті посилання, обрізані кнопки, поведінка кешу та індексація. Дивимося не лише головну, а й картки, форми та сторінки помилок.
  6. Приймання та передача. Віддаємо чек-ліст додавання локалі, регламент для редакторів і список полів, обов’язкових до заповнення. Далі нова мова заводиться за інструкцією, без правок у коді.

Що передаємо після впровадження: конфігурації та регламенти

Передаємо не набір розрізнених налаштувань, а робочу модель багатомовного контенту: у кожного артефакту є власник у вашій команді та зрозумілий порядок змін. Нижче — що саме залишається у вас після запуску і за якими точками інженер приймає роботу.

  • Конфігурація мов. Список локалей, мова за замовчуванням і ланцюжок підстановки «мова-регіон → мова → основна»: незаповнене поле показує осмислений текст, а не порожній блок у верстці.
  • Схеми зв’язків записів. Карта типів контенту та посилань між ними: що перекладається окремим записом, а що залишається спільним (зображення, довідники, характеристики). Окремо — як зв’язки не розпадаються при додаванні нової мови.
  • Політики доступу до чернеток. Ролі перекладача, редактора й розробника, права на попередній перегляд неопублікованого контенту та заборона публікації в основний канал для позаштатних авторів.
  • Регламент випуску перекладів. Порядок «чернетка → вичитка → публікація», відповідальний за затвердження та правило для частково перекладених матеріалів.
  • Правила маршрутизації. Формування адрес за мовами, редиректи зі старих адрес, визначення мови відвідувача — на рівні маршрутизатора застосунку.
  • Автоперевірки повноти. Задача на етапі збірки повідомляє про локаль із незаповненими обов’язковими полями: пропущений переклад не доїжджає до користувача.
  • Документація. Карта контентних моделей, інструкція для редакторів, схема ролей і токенів доступу.
  • Передача та супровід. Запис обговорення спірних місць, журнал публікацій і канал для запитань після запуску.

Опишіть задачу — повернемося з оцінкою та планом, включно з переліком артефактів під ваш контур.

Кейс: 12 мов і зростання частки зарубіжного трафіку

Що було до

Контент для кожної мови лежав в окремій таблиці, а рядки інтерфейсу — прямо в компонентах. Нова локаль означала правки в чотирьох десятках файлів, і жоден не був пов’язаний з рештою: переклад приходив пізніше за верстку, і ми вручну звіряли, що не залишилося порожніх блоків.

Відсутній ключ віддавався як порожній рядок — користувач бачив діру в розмітці замість англійського тексту.

Строк випуску мовної версії — близько трьох тижнів: половина на правки, половина на перевірку регресій.

Що змінили

Контент переїхав у Contentful, локалізовані поля описані на рівні моделі: у сутності один набір полів і значення за локалями, а не паралельні копії записів. Ланцюжок підстановки заданий явно — якщо польського тексту немає, віддається англійський.

Збірка формує статичну сторінку для кожної локалі, вказівники мови та карта сайту генеруються з того самого списку локалей. Перевірка повноти словника вбудована в збірку: неповний переклад блокує злиття й не доходить до користувачів.

Що стало

Строк випуску нової локалі — два дні: перекладач працює в інтерфейсі редактора, розробник підключає маршрут і підстановку. Обсяг ручних правок при випуску мови впав приблизно у вісім разів — звірка ключів пішла з процесу.

Клас помилок «порожній блок замість перекладу» закритий конструктивно. Частка зарубіжних відвідувачів зросла з 4% до 19% після перших шести мов і до 27% до дванадцяти.

Що робити, якщо контент уже перекладено, а схема мов змінюється

Частково налаштована багатомовність у Contentful — найчастіший випадок: дві-три локалі заведені, частина полів локалізована, частина тягнеться з базової через підстановку, а код мови зашитий у маршрут.

Зміна схеми мов тут не «перемикання налаштування», а міграція даних: у кожного запису змінюється набір локалізованих полів і зв’язків.

Починаємо з інвентаризації: які типи контенту справді перекладені, де переклад лежить у нелокалізованому полі, які локалі ввімкнені, але порожні, і за яким ланцюжком зараз іде підстановка.

Окремо дивимося поля-зв’язки та посилання на медіа — при зміні схеми рвуться саме вони, а не тексти.

Міграцію контенту виконуємо скриптом через API керування: вивантажуємо записи з усіма локалями, зіставляємо старі коди мов з новими, пишемо назад.

Працюємо на копії середовища, скрипт ідемпотентний і перезапускається: спочатку переносимо довідники, потім контент, який на них посилається. Перед прогоном фіксуємо знімок — він же служить точкою відкату.

Адреси зберігаємо через таблицю відповідності локалей маршрутам, а не через код мови в шляху. Старі шляхи продовжують відповідати постійним перенаправленням, нові додаються поруч — зовнішні посилання та пошукова видача не губляться.

Головний ризик переходу — тихі порожні поля: після зміни ланцюжка підстановки запис збирається, але віддає пустоту. Тому ланцюжок вибудовуємо явно, проганяємо збірку та інвалідацію кешу до перемикання, а саму схему змінюємо за один прохід, щоб не залишитися в стані напівпереходу.

Технічні сумніви щодо багатомовної схеми

На погодженні обсягу робіт із локалізації Contentful повторюються ті самі п’ять розвилок. Відповідаємо на них до старту — щоб спірні місця не спливли в середині впровадження, коли змінювати рішення вже пізно.

Що показувати мовою, де перекладу ще немає?

Для кожного поля задаємо мову-джерело. Порожнє значення не залишає діру у верстці: відвідувач бачить осмислений текст, а резервна підстановка працює на рівні поля — частково перекладена сторінка залишається цілою.

Що з адресами сторінок для кожної мови?

Адреси будуємо з локалізованого заголовка або залишаємо стабільну нейтральну адресу з префіксом мови. Другий варіант дешевший у підтримці: посилання не рвуться при правці тексту, а перенаправлення потрібні лише при зміні структури.

Обов’язково перекладати всі поля одразу?

Ні. Ділимо поля на обов’язкові до перекладу та допоміжні — службові підписи, технічні описи, значення за замовчуванням. Частковий переклад скорочує перший етап, а повнота наповнення видна у звіті за мовами.

Чи не сповільнить багатомовність збірку?

Збірка йде лише за зміненими мовами та полями, решта береться з кешу. Додавання мови додає секунди, а не хвилини — якщо схему контенту заклали заздалегідь, а не доклеювали поверх готових сторінок.

Хто відповідає за якість перекладів?

Ми відповідаємо за схему, підстановку, адреси та збірку. Тексти — на боці замовника або його перекладача; зі свого боку даємо глосарій, перелік обов’язкових полів і звіт про прогалини, щоб пропуски були видні до публікації.

Обговоримо задачу: схема мов, строки та порядок робіт

Щоб повернутися з оцінкою строків і планом впровадження, а не із загальними словами, потрібні вхідні дані: перелік локалей та їхній пріоритет, хто перекладає і хто публікує контент, поточна схема типів і полів, а також як влаштована маршрутизація мов у застосунку. Із цього складається склад робіт, і вже за ним рахуємо строки за етапами.

Порядок робіт вибудовуємо так, щоб кожен крок спирався на перевірений попередній:

  • фіксуємо схему локалей і ланцюжки фолбеку: яка мова підставляється, коли перекладу немає, і що при цьому бачить користувач;
  • правимо контент-модель: де поле локалізоване, де спільне, які зв’язки не можна дублювати за мовами;
  • налаштовуємо перемикання мови та адреси сторінок, включно з коректними метаданими для пошукових систем;
  • описуємо ролі редакторів і порядок публікації: хто перекладає, хто перевіряє, у якій черговості виходить локаль;
  • ловимо неповні переклади, змішані мови всередині одного документа та поведінку кешу при оновленні локалі;
  • передаємо документацію: схему локалей, домовленості щодо полів та інструкцію для редакторів.

Кожен пункт отримує окрему оцінку, тому частину обсягу можна закривати поетапно — наприклад, спочатку дві локалі, потім решту. Опишіть задачу та поточний стан контенту — повернемося з планом впровадження, складом робіт і строками.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1141
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060