Безперервна локалізація: кожна мова при кожному злитті.
Безперервна локалізація перекладає нові та змінені рядки в міру змін у коді, а не в окремому етапі перед кожним релізом. Кожна мова завжди готова до випуску разом із кодом, який її потребував.
Що таке безперервна локалізація?
Безперервна локалізація — це підхід до роботи, за якого нові та змінені рядки автоматично надсилаються на переклад одразу після зміни, а перекладений текст повертається в продукт без необхідності планування цього процесу кимось.
Немає окремого етапу перекладу, тому що переклад ніколи не зупиняється. Розробник зливає рядок, переклади слідують у тому самому потоці, що й код, а реліз не чекає на чиїсь файли.
Це локалізаційна складова безперервної доставки (continuous delivery). Команда, яка щодня зливає зміни, але передає переклад раз на кілька тижнів, має мови, що відстають від коду, більшу частину кожного місяця. Безперервна локалізація скорочує цей розрив до часу одного запуску.
Це не означає, що машинний переклад публікується без перевірки. Ви вирішуєте, які рядки потребують людської уваги, а реліз може містити лише те, що було перевірено.
Різниця полягає в тому, коли відбувається переклад, а не в тому, хто його виконує.
| Що зміниться | Пакетна передача | Безперервно |
|---|---|---|
| Поруч | ||
| Коли відбувається переклад | На етапі перед кожним релізом | При зміні кожного рядка |
| Що запускає процес | Хтось експортує файл | Push, merge або зміна контенту |
| Розмір кожної частини | Тижневий обсяг рядків одночасно | Рядки в одній зміні |
| Чого очікує реліз | Повернення файлу | Рецензування для рядків, які ви позначили |
| Зміна копії на пізньому етапі | Ще один круговий маршрут | Повторний запуск для цього одного ключа |
| З чим працює перекладач | Електронна таблиця з рядками | Рядок із термінами глосарію, збігами з пам’яті перекладів та скріншотами |
| Мови на момент запуску | Поступово, хвиля за хвилею | Разом із функцією |
- Коли відбувається переклад
- На етапі перед кожним релізом
- Що запускає процес
- Хтось експортує файл
- Розмір кожної частини
- Тижневий обсяг рядків одночасно
- Чого очікує реліз
- Повернення файлу
- Зміна копії на пізньому етапі
- Ще один круговий маршрут
- З чим працює перекладач
- Електронна таблиця з рядками
- Мови на момент запуску
- Поступово, хвиля за хвилею
- Коли відбувається переклад
- При зміні кожного рядка
- Що запускає процес
- Push, merge або зміна контенту
- Розмір кожної частини
- Рядки в одній зміні
- Чого очікує реліз
- Рецензування для рядків, які ви позначили
- Зміна копії на пізньому етапі
- Повторний запуск для цього одного ключа
- З чим працює перекладач
- Рядок із термінами глосарію, збігами з пам’яті перекладів та скріншотами
- Мови на момент запуску
- Разом із функцією
Як працює безперервна локалізація
Простежте один новий рядок через цикл. На кожному етапі показано те, що ви побачите насправді.
Зміна надходить до Transglot через CLI, GitHub Action або додаток на вашому Git-хості. Вихідні файли аналізуються в одному з 20 нативних форматів, і кожен рядок порівнюється з тим, що вже є в проєкті. Далі йдуть лише нові та змінені рядки.
Точний збіг із пам’яті перекладів заповнює рядок і не витрачає слова. Усе інше надсилається до Glossa разом із вашим глосарієм, посібником зі стилю та контекстом цього ключа.
Заповнювачі, форми множини, терміни глосарію та довжина перевіряються в кожному рядку кожного запуску. Пошкоджений заповнювач, відсутня форма множини або заборонений термін глосарію виправляються один раз і перевіряються знову; якщо вони не проходять перевірку вдруге, їх відхиляють, а не публікують. Рядок, який лише перевищує обмеження довжини, записується, а на плані Team функція автоматичного затвердження або запуск контролю якості позначає його для перегляду.
Запуск ніколи не перезаписує рядок, який людина відредагувала або перевірила. Якщо його джерело змінюється пізніше, текст залишається, запуск рахує цей рядок і повідомляє вас, а на плані Team запропоноване оновлення чекає поруч, щоб хтось міг його прийняти.
Застосунки Git фіксують файли локалізації в одній гілці синхронізації та підтримують один pull request актуальним. На GitHub додайте коментар /translate до pull request, і файли потраплять у власну гілку цього запиту. Або опублікуйте в CDN, і працюючий продукт прочитає зміни без жодного релізу.
Шість способів, у яких безперервна локалізація дає збій, і що цьому запобігає
Запуск перезаписує роботу людини
Кожен учасник спочатку перевіряє стан рядка: запуск, збіг із пам’яттю та відправлення. Рядок, який людина відредагувала або перевірила, залишається незмінним, а запуск повідомляє про це.
→fr, перевірено, джерело щойно змінилося
✓збережено, враховано, повідомлено
Пошкоджений рядок потрапляє у продакшн
Кожен токен, який увійшов, має вийти назад. У проєкті з ICU повідомлення, яке викликало б помилку під час рендерингу, не включається до пул-реквесту, конектора та CDN-пакета, а запуск його ідентифікує.
→{count, plural, one {# article}
✓виключено з файлу, ідентифіковано в запуску
Репозиторій заповнюється пул-реквестами від ботів
Одна гілка синхронізації та один пул-реквест на репозиторій. Два швидкі push-запити сходяться в ній, замість того щоб створювати ще одну.
→#812 #815 #819 #823 оновлення l10n
✓#812 transglot/sync, оновлено на місці
Редагування джерела залишає старі переклади
Кожен цільовий рядок фіксує джерело, проти якого він був написаний, тому змінений рядок одразу визначається як застарілий у всіх мовах, і повторно обробляється лише цей ключ.
→«Зберегти» стало «Зберегти чернетку». fr, de, ja досі кажуть «Зберегти»
✓fr, de, ja повторно обробляються для цього одного ключа
Кожен запуск знову виставляє рахунок за весь проєкт
Обсяг запуску визначається змінами. Незмінений рядок не надсилається, точний збіг із пам’ятю перекладів не коштує слів, а рядок, закріплений за людиною, відхиляється до будь-яких витрат.
→файл містить 48 000 слів
✓цей запуск: 60 слів
Незавершений пул-реквест стирає файл локалі
Якщо сервер повідомляє про відсутність записів для локалі, отримання відмовляє перезаписувати файл із вмістом і завершується з кодом 1, щоб зупинити пайплайн.
→отримання: 0 записів для ja, файл містить 1 204
✓відмова перезаписувати locales/ja.json порожнім пакетом
- run 4182 fr: у чернетці відсутній плейсхолдер, виправлено при повторній спробі
- run 4182 de: 3 рядки збережено, вони закріплені за людиною
- run 4182 ja: 41 рядок із пам’яті перекладів, 0 слів
- run 4183 ar: після повторної спроби відсутня форма множини, рядок відхилено
- pull записано locales/pt-BR.json
- sync transglot/sync оновлено, пул-реквест №812
Усі три підключаються до вашого репозиторію. Різниця полягає в тому, що відбувається під час злиття.
Дані взято зі сторінок кожної компанії станом на 5 листопада 2026 року. Рядок із цінами походить із наших сторінок порівняння, посилання на які наведено нижче; там показано тарифний план і розрахунки. Ціни та плани змінюються, тому перевіряйте їх перед ухваленням рішення.
| Що відбувається | Transglot | Lokalise | Crowdin |
|---|---|---|---|
| Новий рядок об’єднано | Перекладено за замовчуванням Надсилання запускає виконання. Налаштування проєкту може вимкнути цю функцію. | Перекладається після налаштування Автоматизації вимкнені за замовчуванням під час створення ключа та імпорту файлів. Робочий процес із кроком ШІ виконується за своїм розкладом. | Перекладається після ввімкнення У розділі «Налаштування» > «Автопереклад» функція запускається під час кожного завантаження. Синхронізація з Git за замовчуванням відбувається щогодини. |
| Переклад не проходить перевірку | Виправляється один раз, потім відхиляється Для пошкодженого плейсхолдера, форми множини або забороненого терміна — у кожному рядку кожного запуску. Перевищення довжини фіксується. У проєктах із ICU пошкоджений рядок не потрапляє до pull-запиту, конекторів і CDN. | Перевірка рівня Error блокує збереження в редакторі Кожну перевірку можна налаштувати як Off, Warning або Error. | Перевірка рівня Error блокує збереження Кожну перевірку можна налаштувати як Warning або Error. |
| Рядок уже відредаговано людиною | Запуск відмовляється його записувати Те саме стосується збігу з пам’яттю перекладів і надсилання. Якщо джерело зміниться пізніше, запуск повідомить про цей рядок. | Автоматизації заповнюють порожні значення за замовчуванням Опція примусового заповнення та дія очищення перезаписують уже заповнені значення. | Опції зберігають рядки, відредаговані людьми та затверджені Також доступна опція заміни всіх значень. |
| Pull-запити в активному репозиторії | Одна гілка, один pull-запит Оновлюється на місці під час кожного надсилання. | Нова гілка для кожного pull-запиту Назва містить часову мітку. | Сервісна гілка, синхронізується щогодини Щогодинна синхронізація є налаштуванням за замовчуванням; інтервал можна змінити. |
| Що враховує тарифний план | Перекладені слова, один раз для кожної мови Точні збіги з пам’яті перекладів безкоштовні. Зберігання рядка безкоштовне. | Оброблені слова Враховуються як базова мова, так і цільова. | Розміщені слова Слова для перекладу, помножені на кількість цільових мов. |
| Що оплачує роботу ШІ | Слова за планом Не виставляється окремим рахунком. | Ліміти слів для ШІ залежно від плану Слова для стандартного та професійного ШІ — окремі позиції плану. | Окремий баланс або ваш власний ключ Керований ШІ від Crowdin оплачується кредитами, поза межами підписки. |
| Та сама робота: 5,000 рядків у 10 мовах | $39 на місяць Team, переклад включено | $1,049 на місяць Advanced (billed yearly) | $138 на місяць Pro with 560K hosted words (billed monthly), плюс ШІ |
| GitHub, GitLab, Bitbucket, Azure Repos, CLI та сервер MCP | Усі вони Git-додатки доступні від плану Team і охоплюють хмарні версії. | Усі вони Інтеграції доступні на кожному плані. | Усі вони Також підтримується Bitbucket Server. |
- Новий рядок об’єднано
- Перекладено за замовчуваннямНадсилання запускає виконання. Налаштування проєкту може вимкнути цю функцію.
- Переклад не проходить перевірку
- Виправляється один раз, потім відхиляєтьсяДля пошкодженого плейсхолдера, форми множини або забороненого терміна — у кожному рядку кожного запуску. Перевищення довжини фіксується. У проєктах із ICU пошкоджений рядок не потрапляє до pull-запиту, конекторів і CDN.
- Рядок уже відредаговано людиною
- Запуск відмовляється його записуватиТе саме стосується збігу з пам’яттю перекладів і надсилання. Якщо джерело зміниться пізніше, запуск повідомить про цей рядок.
- Pull-запити в активному репозиторії
- Одна гілка, один pull-запитОновлюється на місці під час кожного надсилання.
- Що враховує тарифний план
- Перекладені слова, один раз для кожної мовиТочні збіги з пам’яті перекладів безкоштовні. Зберігання рядка безкоштовне.
- Що оплачує роботу ШІ
- Слова за планомНе виставляється окремим рахунком.
- Та сама робота: 5,000 рядків у 10 мовах
- $39 на місяцьTeam, переклад включено
- GitHub, GitLab, Bitbucket, Azure Repos, CLI та сервер MCP
- Усі вониGit-додатки доступні від плану Team і охоплюють хмарні версії.
- Новий рядок об’єднано
- Перекладається після налаштуванняАвтоматизації вимкнені за замовчуванням під час створення ключа та імпорту файлів. Робочий процес із кроком ШІ виконується за своїм розкладом.
- Переклад не проходить перевірку
- Перевірка рівня Error блокує збереження в редакторіКожну перевірку можна налаштувати як Off, Warning або Error.
- Рядок уже відредаговано людиною
- Автоматизації заповнюють порожні значення за замовчуваннямОпція примусового заповнення та дія очищення перезаписують уже заповнені значення.
- Pull-запити в активному репозиторії
- Нова гілка для кожного pull-запитуНазва містить часову мітку.
- Що враховує тарифний план
- Оброблені словаВраховуються як базова мова, так і цільова.
- Що оплачує роботу ШІ
- Ліміти слів для ШІ залежно від плануСлова для стандартного та професійного ШІ — окремі позиції плану.
- Та сама робота: 5,000 рядків у 10 мовах
- $1,049 на місяцьAdvanced (billed yearly)
- GitHub, GitLab, Bitbucket, Azure Repos, CLI та сервер MCP
- Усі вониІнтеграції доступні на кожному плані.
- Новий рядок об’єднано
- Перекладається після ввімкненняУ розділі «Налаштування» > «Автопереклад» функція запускається під час кожного завантаження. Синхронізація з Git за замовчуванням відбувається щогодини.
- Переклад не проходить перевірку
- Перевірка рівня Error блокує збереженняКожну перевірку можна налаштувати як Warning або Error.
- Рядок уже відредаговано людиною
- Опції зберігають рядки, відредаговані людьми та затвердженіТакож доступна опція заміни всіх значень.
- Pull-запити в активному репозиторії
- Сервісна гілка, синхронізується щогодиниЩогодинна синхронізація є налаштуванням за замовчуванням; інтервал можна змінити.
- Що враховує тарифний план
- Розміщені словаСлова для перекладу, помножені на кількість цільових мов.
- Що оплачує роботу ШІ
- Окремий баланс або ваш власний ключКерований ШІ від Crowdin оплачується кредитами, поза межами підписки.
- Та сама робота: 5,000 рядків у 10 мовах
- $138 на місяцьPro with 560K hosted words (billed monthly), плюс ШІ
- GitHub, GitLab, Bitbucket, Azure Repos, CLI та сервер MCP
- Усі вониТакож підтримується Bitbucket Server.
Запускайте звідти, де живуть ваші рядки. Усі шляхи ведуть до одного конвеєра.
Як налаштувати безперервну локалізацію
- 01
Витягніть рядки з коду
Кожен рядок, видимий користувачеві, потребує стабільного ключа у файлі локалізації. Transglot підтримує 20 форматів, тож використовуйте той, який уже маєте.
jsonyamlxliffarb - 02
Підключення репозиторію
Команда init знаходить ваші файли локалізації, авторизує вас через браузер, завантажує наявні дані та запускає перший переклад.
npx transglot@latest init - 03
Запускайте при кожному злитті
Додайте GitHub Action, викликайте CLI з будь-якої іншої CI або встановіть додаток для GitHub, GitLab, Bitbucket чи Azure Repos.
transglot push --wait - 04
Визначте, що потребує участі людини
Встановіть min_state на reviewed у правилі pull, і цей файл міститиме лише рядки, перевірені людиною. Якщо не встановлювати, чернетки потраплятимуть у реліз.
min_state: reviewed
Скільки коштує запуск при кожному злитті: слова, які змінилися.
Слово — це слово мовою джерела, що враховується один раз для кожної цільової мови. Обсяг запуску визначається змінами: якщо злиття торкається дванадцяти слів у п’яти мовах, це шістдесят слів, незалежно від розміру проєкту.
Вміщується в Starter: $19/mo, 300,000 слів на місяць.
Це приблизно 9% від ліміту.
Тут враховано лише переклад. Перевірки якості, чернетки для брендового стилю та виправлення також рахуються як слова, а точні збіги з пам’яті нічого не коштують. CLI та GitHub Action доступні на плані Starter, а додатки для GitHub, GitLab, Bitbucket і Azure Repos — на плані Team.
Три речі, яких безперервна локалізація не вирішує
Рядки все ще застрягли в коді
Пайплайн може перекладати лише те, що здатний прочитати. Спочатку потрібно виправити жорстко закодовані рядки та речення, зібрані з частин, і саме вони зазвичай стають причиною затримки розгортання.
Ніхто не відповідає за текст
Автоматизація переміщує рядки. Вона не вирішує, як ваш продукт називає речі. Хтось має відповідати за глосарій, інакше мова, яку ніхто не читає, буде дрейфувати без чиєїсь уваги.
Копірайтинг, що потребує оцінки
Юридичні тексти, ціноутворення та брендові слогани потребують людської участі. Надсилайте їх на перевірку та тримайте подалі від файлів, що постачаються, доки хтось не затвердить їх.
FAQ про безперервну локалізацію
Запитання, які команди ставлять перед тим, як увімкнути її.
Що таке безперервна локалізація?
Чим безперервна локалізація відрізняється від традиційної?
Чи є безперервна локалізація тим самим, що й CI/CD?
Чи потрібен мені пайплайн CI/CD для безперервної локалізації?
Чи означає безперервна локалізація відсутність людської перевірки?
Чи може автоматизований запуск перезаписати правки перекладача?
Чи варта безперервна локалізація того для невеликої команди?
Як запобігти перевищенню очікуваних витрат на запуск?
Чи працює це з GitLab, Bitbucket та Azure DevOps?
Чи можна здійснювати безперервну локалізацію без Git?
Чи можуть переклади оновлюватися без релізу?
Як перенести наявний проєкт?
41 конекторів уже готово.
Підключіть репозиторій. Наступне злиття зробить решту.
Одна команда знаходить ваші файли локалей, авторизує вас через браузер і запускає перший переклад.