Непрерывная локализация: каждый язык при каждом слиянии.
Непрерывная локализация переводит новые и изменённые строки по мере изменения кода, а не в отдельной фазе перед каждым релизом. Каждый язык всегда готов к выпуску вместе с кодом, для которого он нужен.
Что такое непрерывная локализация?
Непрерывная локализация — это подход, при котором новые и изменённые строки автоматически отправляются на перевод сразу после изменения, а переведённый текст возвращается в продукт без чьего-либо ручного планирования.
Нет отдельной фазы перевода, потому что перевод никогда не останавливается. Разработчик сливает строку, переводы следуют за ней в том же потоке, что и код, и релиз не зависит от чьих-то файлов.
Это часть непрерывной доставки (continuous delivery). Команда, которая сливает код каждый день, но передаёт строки на перевод раз в несколько недель, большую часть месяца отстаёт по языкам от кода. Непрерывная локализация сокращает этот разрыв до длительности одного прогона.
Это не значит, что машинный перевод публикуется без проверки. Вы решаете, какие строки требуют участия человека, и в релиз попадает только то, что прошло ревью.
Разница в том, когда происходит перевод, а не в том, кто его делает.
| Что меняется | Пакетная передача | Непрерывный процесс |
|---|---|---|
| Рядом | ||
| Когда происходит перевод | На этапе перед каждым релизом | При каждом изменении строки |
| Что запускает процесс | Кто-то экспортирует файл | Пуш, слияние или изменение контента |
| Размер каждой части | Недели накопленных строк за раз | Строки из одного изменения |
| Чего ожидает релиз | Возврата файла | Рецензии только для строк, отмеченных для неё |
| Изменение копии на позднем этапе | Ещё один цикл обмена данными | Повторный прогон только этого ключа |
| С чем работает переводчик | Таблица со строками | Строка с терминами глоссария, совпадениями из памяти и скриншотами |
| Языки на момент запуска | Поэтапно, волна за волной | Одновременно с функцией |
- Когда происходит перевод
- На этапе перед каждым релизом
- Что запускает процесс
- Кто-то экспортирует файл
- Размер каждой части
- Недели накопленных строк за раз
- Чего ожидает релиз
- Возврата файла
- Изменение копии на позднем этапе
- Ещё один цикл обмена данными
- С чем работает переводчик
- Таблица со строками
- Языки на момент запуска
- Поэтапно, волна за волной
- Когда происходит перевод
- При каждом изменении строки
- Что запускает процесс
- Пуш, слияние или изменение контента
- Размер каждой части
- Строки из одного изменения
- Чего ожидает релиз
- Рецензии только для строк, отмеченных для неё
- Изменение копии на позднем этапе
- Повторный прогон только этого ключа
- С чем работает переводчик
- Строка с терминами глоссария, совпадениями из памяти и скриншотами
- Языки на момент запуска
- Одновременно с функцией
Как работает непрерывная локализация
Проследите путь одной новой строки по циклу. На каждом этапе показано то, что вы действительно увидите.
Изменение попадает в Transglot через CLI, действие GitHub или приложение на вашем Git-хосте. Исходные файлы разбираются в одном из 20 нативных форматов, и каждая строка сравнивается с тем, что уже есть в проекте. Далее идут только новые и изменённые строки.
Точное совпадение из памяти переводов заполняет строку и не требует оплаты слов. Всё остальное отправляется в Glossa с вашим глоссарием, руководством по стилю и контекстом этого ключа.
Заполнители, формы множественного числа, термины глоссария и длина проверяются в каждой строке каждого запуска. Неверный заполнитель, отсутствующая форма множественного числа или запрещённый термин глоссария исправляются один раз и проверяются снова; если проверка не проходит во второй раз, перевод отклоняется и не публикуется. Строка, превышающая только ограничение по длине, записывается, а начиная с плана Team она автоматически одобряется или помечается для проверки в ходе QA-запуска.
Запуск никогда не перезаписывает строку, которую человек отредактировал или проверил. Если исходный текст позже изменится, перевод останется прежним, система учтёт эту строку и сообщит вам об этом, а начиная с плана Team предложенное обновление будет ждать рядом, пока кто-нибудь его не примет.
Приложения Git фиксируют файлы локалей в одной ветке синхронизации и поддерживают один pull request в актуальном состоянии. В GitHub оставьте комментарий /translate в pull request, и файлы попадут в отдельную ветку этого запроса. Или опубликуйте их в CDN, тогда работающий продукт получит изменения без нового релиза.
Шесть способов, как непрерывная локализация даёт сбой, и что предотвращает каждый из них
Запуск перезаписывает работу человека
Каждый модуль сначала проверяет состояние строки: запуск, совпадение в памяти и push. Строка, отредактированная или проверенная человеком, сохраняется, а система сообщает о ней.
→fr, проверено, источник только что изменён
✓сохранено, учтено, отправлен отчёт
Повреждённая строка попадает в продакшн
Каждый добавленный токен должен быть возвращён. В проекте с ICU сообщение, которое вызвало бы ошибку при рендеринге, не попадает в пул-реквест, коннектор и бандл CDN, а запуск присваивает ему имя.
→{count, plural, one {# article}
✓исключено из файла, названо в запуске
Репозиторий заполняется пул-реквестами от бота
Одна ветка синхронизации и один пул-реквест на репозиторий. Два быстрых пуша объединяются в ней вместо создания второго пул-реквеста.
→#812 #815 #819 #823 обновление локализации
✓#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. | Проверка уровня «Ошибка» блокирует сохранение в редакторе Каждая проверка настраивается как «Отключено», «Предупреждение» или «Ошибка». | Проверка уровня «Ошибка» блокирует сохранение Каждая проверка настраивается как «Предупреждение» или «Ошибка». |
| Строка уже отредактирована человеком | Запуск отказывается её записывать То же самое происходит при совпадении с памятью переводов и отправке. Если исходный текст изменится позже, запуск сообщит об этой строке. | Автоматизация по умолчанию заполняет пустые значения Опция принудительной замены и действие очистки перезаписывают уже заполненные значения. | Опции сохраняют строки, отредактированные или одобренные человеком Также доступна опция полной замены. |
| Pull-запросы в активном репозитории | Одна ветка, один pull-запрос Обновляется на месте при каждой отправке. | Новая ветка для каждого pull-запроса Имя содержит метку времени. | Служебная ветка, синхронизируется каждый час По умолчанию синхронизация выполняется каждый час, интервал можно изменить. |
| Что учитывает тарифный план | Количество переведённых слов, один раз для каждого языка Точные совпадения из памяти переводов бесплатны. Хранение строк бесплатно. | Обработанные слова Учитываются как базовый язык, так и целевой. | Размещённые слова Слова для перевода, умноженные на количество целевых языков. |
| Что оплачивает ИИ | Слова по тарифу Не тарифицируется отдельно. | Квоты слов ИИ по тарифам Стандартные и Pro-слова ИИ — отдельные строки тарифа. | Отдельный баланс или ваш собственный ключ Управляемый ИИ 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 и охватывают облачные версии.
- Новая строка сливается
- Переводится после настройкиАвтоматизация по умолчанию отключена при создании ключей и импорте файлов. Рабочий процесс с шагом ИИ выполняется по расписанию.
- Перевод не проходит проверку
- Проверка уровня «Ошибка» блокирует сохранение в редактореКаждая проверка настраивается как «Отключено», «Предупреждение» или «Ошибка».
- Строка уже отредактирована человеком
- Автоматизация по умолчанию заполняет пустые значенияОпция принудительной замены и действие очистки перезаписывают уже заполненные значения.
- Pull-запросы в активном репозитории
- Новая ветка для каждого pull-запросаИмя содержит метку времени.
- Что учитывает тарифный план
- Обработанные словаУчитываются как базовый язык, так и целевой.
- Что оплачивает ИИ
- Квоты слов ИИ по тарифамСтандартные и Pro-слова ИИ — отдельные строки тарифа.
- Та же задача: 5,000 строк в 10 языках
- $1,049 в месяцAdvanced (billed yearly)
- GitHub, GitLab, Bitbucket, Azure Repos, CLI и сервер MCP
- ВсеИнтеграции доступны на всех тарифах.
- Новая строка сливается
- Переводится после включенияВ разделе «Настройки» → «Автоперевод» он запускается при каждой загрузке. Синхронизация Git по умолчанию выполняется каждый час.
- Перевод не проходит проверку
- Проверка уровня «Ошибка» блокирует сохранениеКаждая проверка настраивается как «Предупреждение» или «Ошибка».
- Строка уже отредактирована человеком
- Опции сохраняют строки, отредактированные или одобренные человекомТакже доступна опция полной замены.
- 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, вызывайте 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 начинаются с тарифа Starter, а приложения для GitHub, GitLab, Bitbucket и Azure Repos — с тарифа Team.
Три задачи, которые непрерывная локализация не решает
Строки всё ещё застряли в коде
Конвейер может перевести только то, что способен прочитать. Жёстко закодированные строки и предложения, собранные из частей, нужно сначала исправить — именно они обычно становятся причиной задержек при внедрении.
Отсутствие ответственного за терминологию
Автоматизация перемещает строки, но не решает, как ваш продукт называет те или иные элементы. Кто-то должен отвечать за глоссарий, иначе язык, который никто не читает, начнёт искажаться незамеченным.
Тексты, требующие экспертной оценки
Юридические тексты, ценообразование и фирменные формулировки заслуживают внимания человека. Отправляйте их на проверку и исключайте из файлов релиза до получения официального одобрения.
Часто задаваемые вопросы о непрерывной локализации
Вопросы, которые команды задают перед включением функции.
Что такое непрерывная локализация?
Чем непрерывная локализация отличается от традиционной?
Является ли непрерывная локализация тем же самым, что и CI/CD?
Нужен ли мне конвейер CI/CD для непрерывной локализации?
Означает ли непрерывная локализация отсутствие человеческой проверки?
Может ли автоматический запуск перезаписать правки переводчика?
Стоит ли непрерывная локализация усилий небольшой команды?
Как предотвратить превышение ожидаемых затрат на запуск?
Работает ли это с GitLab, Bitbucket и Azure DevOps?
Можно ли использовать непрерывную локализацию без Git?
Могут ли переводы обновляться без нового релиза?
Как перенести существующий проект?
41 коннекторов уже готово.
Подключите репозиторий. Следующее слияние сделает остальное.
Одна команда находит файлы локализации, выполняет вход через браузер и запускает первый перевод.