Переклад для IT-проєктів: як працювати з файлами локалізації JSON, string, XML

Київ

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

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

Саме тут і проходить межа між звичайним перекладом і професійною локалізацією ПЗ.

Для developer-команди важливо не те, наскільки красиво виглядає таблиця з перекладом. Їй потрібен результат, який можна повернути у звичний pipeline, протестувати й використати в релізі. Якщо перед кожним оновленням доводиться вручну витягувати текст, копіювати його в Excel, а потім так само вручну збирати назад, локалізація швидко стає окремим джерелом технічного боргу.

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

Локалізація IT-продукту — це робота з мовою всередині системи

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

Наприклад:

"welcome_message": "Hello, {name}!"

Користувачеві потрібен природний переклад фрази. Системі — незмінний ключ welcome_message і коректна змінна {name}. Якщо перекладач випадково змінить ключ або пошкодить плейсхолдер, проблема вийде далеко за межі лінгвістики. У кращому разі в інтерфейсі з’явиться дивний текст. У гіршому разі — рядок не завантажиться взагалі.

Але технічна коректність — лише половина завдання.

Уявімо, що у файлі є слово:

Charge

Без контексту воно може означати «списання», «нарахування», «плату», «заряд» або навіть «обвинувачення». У фінансовому застосунку, CRM і системі для зарядних станцій правильний варіант буде різним.

Так само Plan може бути «Планом», «Тарифом» або «Підпискою», Home — «Головною» або конкретним об’єктом, а Order — «Замовленням», «Наказом» чи «Порядком».

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

Для великих систем це стає особливо важливим. Один і той самий термін може зустрічатися в UI, email-повідомленнях, help center, документації, billing-модулі, onboarding та release notes. Якщо кожен канал перекладається окремо, мовна цілісність продукту починає руйнуватися.

Чому схема «скинемо все в Excel» рано чи пізно перестає працювати

Для MVP або невеликого внутрішнього сервісу ручний підхід іноді справді достатній. Розробник копіює 100–200 рядків, додає їх у Google Sheets, а перекладач заповнює сусідню колонку. Проблема в тому, що такий workflow дуже погано масштабується.

Перша причина — версії.

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

Тоді комусь доводиться вручну порівнювати дві реальності: що було відправлено на переклад і що зараз є у продукті.

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

Є й менш очевидний ризик — контекст поступово зникає.

У вихідному файлі ключ може мати назву:

"billing_retry_button": "Retry"

У таблиці перекладач іноді бачить лише:

Retry

І тоді «Повторити», «Спробувати ще раз» і «Повторна спроба» формально всі можливі. Але лише один варіант органічно впишеться у конкретну кнопку.

Ще гірше, коли таблиця починає жити окремим життям. З’являються версії final, final_2, latest, latest_new: одна копія лежить у менеджера, інша — у перекладача, третя вже частково інтегрована. Це не проблема перекладу як такого. Це проблема процесу.

Тому для продуктів із регулярними релізами правильніше працювати або безпосередньо з локалізаційними файлами або з контрольованим експортом із TMS чи CMS.

Як працювати з JSON, XML, .strings та іншими ресурсними файлами

У сучасних продуктах локалізація може зберігатися в десятках форматів. Найпоширеніші — JSON, XML, .strings, XLIFF, PO, YAML, RESX, Properties, ARB та інші ресурсні структури.

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

У JSON це може виглядати так:

{
"login": "Sign in",
"logout": "Sign out",
"welcome_message": "Welcome, {name}!"
}

Після перекладу:

{
"login": "Увійти",
"logout": "Вийти",
"welcome_message": "Вітаємо, {name}!"
}

Ключі не змінюються. Структура не перебудовується. {name} залишається на місці.

В XML схожа логіка:

<string name="save_button">Save</string>

Перекладається лише значення:

<string name="save_button">Зберегти</string>

Для iOS .strings:

"settings_title" = "Settings";

Переклад:

"settings_title" = "Налаштування";

На практиці складність часто не в синтаксисі самого формату, а в тому, що поруч із текстом можуть зберігатися URL, системні параметри, коди, назви API, identifiers або технічні значення, які взагалі не повинні потрапляти до перекладу.

Наприклад:

{
"payment_error": "Payment failed",
"support_url": "https://example.com/help",
"api_status": "payment_pending"
}

Тут перекладу підлягає лише «Payment failed». URL і payment_pending можуть бути службовими значеннями. Якщо перекладач працює без правил, він змушений сам здогадуватися, що змінювати, а що ні.

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

Це вже набагато ближче до інженерного підходу, ніж до звичайного «відкрийте файл і перекладіть текст».

Плейсхолдери, змінні та теги — маленькі елементи з великими наслідками

Найнебезпечніші помилки в IT-локалізації іноді виглядають дуже незначними.

У рядку:

Hello, {user_name}! You have {count} new messages.

Перекладач може чудово передати зміст, але випадково написати {username} замість {user_name}. Людина різниці майже не помітить. Система помітить.

Те саме стосується %s, %d, %1$s, {{variable}}, ${value} та інших синтаксичних конструкцій, які можуть використовуватися в різних фреймворках.

Окремий рівень складності — HTML:

Click <strong>Continue</strong> to proceed.

Тут важливо не просто перекласти «Continue», а зберегти коректну структуру тегів.

У складніших продуктах можуть використовуватися ICU MessageFormat і pluralization:

{count, plural,
one {# message}
other {# messages}
}

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

Саме такі нюанси добре показують, чому локалізаційні файли варто обробляти в CAT/TMS-середовищі, а не в звичайному текстовому редакторі. Там плейсхолдери можна захищати, теги — контролювати, а невідповідності — знаходити автоматично ще до того, як файл повернеться розробникам.

Що має відбуватися між отриманням файлу і готовою локалізацією

Зріла локалізація починається не з перекладу, а з аналізу.

Спочатку потрібно зрозуміти структуру ресурсу: які поля перекладаються, які значення є службовими, які конструкції використовує продукт, чи є HTML, Markdown, ICU, placeholders, plural forms, character limits або інші обмеження.

Далі варто перевірити, чи вже є затверджені переклади. Якщо продукт уже локалізували, починати все заново — погана ідея. Попередній контент можна використати як translation memory, а ключові терміни — перенести в glossary.

Після імпорту перекладач працює з сегментами в середовищі CAT/TMS. Важливо, що він бачить не лише source text, а й доступний контекст: ключ, коментар, попередній переклад, термінологічні підказки, а за можливості — скриншот.

Після завершення перекладу починається QA. Перевіряються placeholders, tags, numbers, punctuation, untranslated segments, consistency, terminology та інші параметри. Після цього файл експортується назад у потрібний формат.

І лише потім його варто інтегрувати у test build або staging для фінальної перевірки вже в інтерфейсі.

Саме цей останній етап часто виявляє те, чого не видно у файлі.

Чому screenshots і staging іноді важливіші за сам файл

Локалізаційні файли чудово передають структуру, але дуже погано передають візуальний контекст.

Наприклад, рядок:

Apply

Може означати «Застосувати», «Подати заявку», «Використати» або «Нанести».

Якщо це кнопка у фільтрі — найімовірніше, «Застосувати».

Якщо форма вакансії — «Подати заявку».

Якщо промокод — може бути «Використати».

Без екрана перекладач бачить лише слово. Зі скріншотом ситуація стає очевидною за кілька секунд.

Схожа історія з короткими CTA:

Next, Continue, Done, Back, Skip.

У різних сценаріях вони можуть вимагати різних стилів. Наприклад, у onboarding Next часто природно перекласти як «Далі», а в складнішому wizard flow інколи краще використати конкретну дію замість абстрактної кнопки.

Staging або demo-доступ корисний ще й тим, що дозволяє побачити продукт як користувач. Перекладач може зрозуміти, що один термін використовується в кількох модулях, які елементи є назвами функцій, а які — звичайними словами.

Для B2B SaaS, ERP, CRM, fintech і професійних платформ це особливо важливо, оскільки інтерфейс часто насичений спеціалізованою термінологією, яку не можна адекватно перекласти лише за допомогою словника.

Термінологія як частина продуктового дизайну

Термінологію іноді сприймають як суто перекладацьке питання. Насправді це елемент UX-інтерфейсу.

Якщо функція називається Workspace, користувач має бачити один і той самий термін скрізь: у меню, документації, onboarding, email і help center. Якщо десь це «Робочий простір», десь «Робоча область», а десь Workspace, продукт починає виглядати менш цілісним.

Саме тому glossary варто створювати ще до масштабного перекладу.

У ньому можуть бути не лише переклади, а й notes:

Workspace — Робочий простір — не використовувати “Робоча область”

Seat — місце користувача — термін billing

Pro Plan — не перекладати

Member — Учасник — не “Член”

Це дрібні правила, але саме вони підтримують послідовність на десятках тисяч рядків.

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

У результаті локалізація накопичує історію.

Це дуже важливо для довгострокових продуктів, тому що через рік після старту ніхто вже не пам’ятає, чому певний термін переклали саме так. А в TM і glossary це рішення залишається зафіксованим.

Continuous localization: як не перетворювати кожен реліз на новий перекладацький проєкт

Якщо продукт оновлюється часто, локалізація не повинна починатися з нуля після кожного спринту.

Припустимо, у продукті 25 000 рядків. Команда додала нову функцію, яка принесла 180 нових сегментів, і змінила ще 70. Реальний обсяг роботи — 250 рядків, а не всі 25 000.

Саме на цьому побудована continuous localization.

Нові й змінені сегменти регулярно потрапляють у перекладацький workflow, а вже затверджені використовуються повторно. Це може відбуватися через ручний експорт раз на спринт, через TMS, API або інтеграцію з репозиторієм — конкретна схема залежить від архітектури продукту.

Головна перевага не тільки в швидкості.

Такий процес робить локалізацію передбачуваною. Product manager розуміє, скільки нового контенту з’явилося. Перекладацька команда бачить зміни. Developer-команда не витрачає час на повторну підготовку старих рядків.

А ще зміни стають контрольованими.

Якщо старий текст був:

Your payment was declined.

а новий:

Your payment was declined. Try another card.

CAT-система покаже high-percentage fuzzy match. Перекладачу не потрібно заново відтворювати весь сегмент — він бачить, що змінилося, і оновлює лише необхідну частину.

Для продукту з 10–15 мовами така різниця вже відчутна.

QA: переклад потрібно перевіряти не тільки у файлі, а й у самому продукті

Одна з типових помилок — вважати, що якщо файл успішно імпортувався і всі сегменти перекладені, локалізація завершена.

Насправді після інтеграції можуть з’явитися зовсім інші проблеми.

Найпростіша — довжина тексту.

Англійське:

Settings

коротке.

Українське:

Налаштування

довше.

Німецькі UI-рядки часто збільшуються ще більше. У мобільному застосунку це може призвести до обрізання тексту, перенесення кнопки або порушення макета.

Інша проблема — порядок слів. У файлі сегмент виглядає добре, але після підстановки змінної фраза звучить неприродно.

Наприклад:

{name} added you to {workspace}

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

Тому linguistic QA у test build — це не формальність.

Під час такої перевірки оцінюються truncation, line breaks, placeholders, context, consistency, typography, date formats, currency formats, pluralization і загальне сприйняття інтерфейсу.

Автоматичні QA-інструменти знаходять структурні помилки. Людина знаходить те, що виглядає дивно саме для неї.

Обидва рівні потрібні.

Локалізація — це не тільки UI

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

Він читає onboarding email, відкриває help center, отримує push notifications, переглядає FAQ, читає release notes, переглядає сторінку застосунку в App Store або Google Play.

Якщо UI перекладено одним стилем, документацію — іншим, а маркетингові матеріали — третім, відчуття цілісного продукту зникає.

Тому для зрілих IT-проєктів доцільно працювати з локалізацією як з єдиною мовною системою.

Термінологію потрібно узгодити між UI, документацією та support-контентом. Style guide має пояснювати, як звертатися до користувача. Назви функцій мають збігатися в усіх каналах.

Це вже не просто переклад.

Це linguistic product management у невеликому масштабі.

Як СТАТУС КО інтегрується в процес IT-команди

Для нас правильний старт локалізаційного проєкту — не фраза «надішліть текст у Word».

Набагато корисніше отримати приклад реального ресурсу й коротко зрозуміти, як влаштований ваш процес: де зберігаються локалізації, як часто виходять релізи, скільки мов підтримується, чи є попередні переклади, glossary, screenshots, design-макети або staging.

Після цього можна визначити оптимальну схему роботи.

Для одного проєкту достатньо регулярно обробляти JSON-файли. Для іншого краще працювати через XLIFF. Для третього потрібні TMS-інтеграція та регулярний обмін новими сегментами. Універсальної схеми немає, і саме тому ми не намагаємося зводити всі IT-проєкти до однієї таблиці.

СТАТУС КО може підключатися до локалізації інтерфейсу, SaaS-платформ, мобільних застосунків, вебсервісів, help center, документації, onboarding, email-комунікацій, release notes та іншого продуктового контенту.

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

Якщо ваш продукт уже використовує JSON, XML, .strings, XLIFF або інші локалізаційні ресурси, немає потреби попередньо перетворювати їх у Word чи вручну готувати таблиці для перекладача. Надішліть СТАТУС КО, приклад файлу та коротко опишіть ваш поточний workflow. Ми зможемо оцінити структуру, визначити, які елементи підлягають перекладу, і запропонувати процес, який буде зручним не лише перекладачам, а насамперед вашій команді розробки.

Наші послуги

WhatsApp Viber Telegram