Перекладайте JSON-файли локалізації, не змінюючи ключі.
Ключі залишаються ключами. Вкладеність зберігається. Перекладаються лише рядкові значення — і тільки вони. Всі інші типи властивостей повертаються без змін.
Стандартні інструменти перекладу не розуміють JSON.
Загальні API перекладу бачать ваш JSON як суцільний текст. Вони перекладають назви ключів разом зі значеннями. Вони сплющують вкладені об’єкти. Вони об’єднують рядки, які не слід об’єднувати. В результаті повертається структурно пошкоджений JSON, який потребує ручного виправлення перед використанням. Якщо ви підтримуєте файли локалізації для продуктивного застосунку, ви знаєте, що використання стандартного API перекладу створює більше роботи, ніж економить.
Проблема глибша, ніж просто назви ключів. Стандартні API перекладу також пошкоджують змінні інтерполяції. Рядок на кшталт "Hello {name}, you have {count} messages" повертається з перекладеними іменами змінних — "Hola {nombre}, tienes {cuenta} mensajes" — що ламає всі середовища виконання, які очікували оригінальні імена змінних. Слідують години налагодження.
Для команд, які підтримують файли локалізації кількома мовами для продуктивного застосунку, це не теоретична проблема. Це вже траплялося. Питання лише в тому, скільки часу займає ручне виправлення кожного разу.
PolyLingo обходить ваш JSON перед перекладом.
PolyLingo розуміє структуру JSON. Він рекурсивно обходить ваш об’єкт, визначає рядкові значення, що містять текст для перекладу, і надсилає на переклад лише ці значення. Назви ключів ніколи не змінюються. Числа, булеві значення, null і не рядкові типи проходять без змін. На виході — валідний JSON з ідентичною структурою, але з перекладеними рядковими значеннями.
Змінні інтерполяції — {name}, {{count}}, %s та подібні шаблони — ідентифікуються та зберігаються протягом усього процесу перекладу. Вони замінюються на заповнювачі перед перекладом і відновлюються у вихідних даних у початковому вигляді. Модель перекладу ніколи не бачить їх як текст для перекладу.
Масиви обробляються коректно: кожен рядковий елемент перекладається, а числові індекси та структура масиву залишаються без змін. Змішані масиви, що містять рядки та не рядкові типи (числа, об’єкти), обходяться коректно, не рядкові типи проходять без змін.
{
"nav_home": "Home",
"nav_pricing": "Pricing",
"hero_title": "Grow your audience globally",
"hero_cta": "Get started for free",
"footer_rights": "All rights reserved."
}{
"nav_home": "Accueil",
"nav_pricing": "Tarifs",
"hero_title": "Développez votre audience mondiale",
"hero_cta": "Commencer gratuitement",
"footer_rights": "Tous droits réservés."
}{
"nav": {
"home": "Home",
"pricing": "Pricing",
"blog": "Blog"
},
"hero": {
"title": "Grow your audience globally",
"subtitle": "Translate in seconds.",
"cta": "Get started for free"
},
"errors": {
"notFound": "Page not found",
"serverError": "Something went wrong"
}
}{
"nav": {
"home": "Inicio",
"pricing": "Precios",
"blog": "Blog"
},
"hero": {
"title": "Expande tu audiencia globalmente",
"subtitle": "Traduce en segundos.",
"cta": "Comienza gratis"
},
"errors": {
"notFound": "Página no encontrada",
"serverError": "Algo salió mal"
}
}curl -X POST https://api.usepolylingo.com/v1/translate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "{\"nav_home\": \"Home\", \"hero_title\": \"Get started\"}",
"format": "json",
"targets": ["es", "fr", "de", "ja", "zh"],
"model": "standard"
}'
# Response:
# {
# "translations": {
# "es": "{\"nav_home\": \"Inicio\", \"hero_title\": \"Empezar\"}",
# "fr": "{\"nav_home\": \"Accueil\", \"hero_title\": \"Commencer\"}",
# ...
# }
# }Що гарантує PolyLingo для кожного перекладу JSON
- ✓Назви ключів ніколи не змінюються
- ✓Вкладені об’єкти та масиви обробляються рекурсивно
- ✓Числа, булеві значення, null проходять без змін
- ✓Всі 36 мов в одному запиті
- ✓Автоматичне визначення JSON — не потрібен прапорець формату
- ✓Працює з плоскими та глибоко вкладеними файлами локалізації
- ✓Змінні інтерполяції ({name}, {{count}}, %s) збережені точно
- ✓Вихідні дані — валідний JSON, який можна розпарсити без змін
Три кроки до перекладених файлів локалізації
Вставте ваш JSON або викличте API
Використовуйте безкодний перекладач для одноразових перекладів: вставте JSON, оберіть мови, завантажте перекладені файли. Для автоматизації викликайте POST /v1/translate з вашим JSON та кодами цільових мов.
Отримайте всі мови в одній відповіді
API повертає JSON-об’єкт з одним записом на кожну цільову мову, кожен містить повністю перекладений файл локалізації з ідентичною структурою. Без викликів на кожну мову. Без циклів. Один запит — всі результати.
Помістіть результати у вашу директорію повідомлень
Запишіть кожен перекладений файл у messages/es.json, messages/fr.json, messages/de.json — або туди, де ваша бібліотека i18n їх очікує. Структура ідентична вихідному файлу, тому додаткова обробка не потрібна.
Де переклад JSON має найбільше значення
i18n додатків з next-intl або i18next
Перекладайте ваші файли messages/*.json або locales/*.json напряму. Ключі залишаються без змін, вкладеність зберігається, змінні інтерполяції проходять без змін. Помістіть файли у директорію повідомлень і розгорніть.
Експорти контенту CMS
Платформи headless CMS часто експортують структурований контент у форматі JSON. PolyLingo перекладає рядкові значення, зберігаючи назви полів, вкладені типи контенту та не рядкові значення, як дати, булеві значення та ідентифікатори.
Відповіді API та конфігураційні файли
Будь-яка структура JSON з рядковими значеннями для перекладу — описи продуктів, шаблони повідомлень, текст у додатку, що подається через API — може бути перекладена без зміни структури, від якої залежить ваш застосунок.
Поширені питання про переклад JSON
Чи зберігаються змінні інтерполяції, як {name} або {{count}}?
Так. PolyLingo ідентифікує поширені шаблони інтерполяції, включно з {variable}, {{variable}}, %(variable)s та %s перед перекладом. Вони замінюються стабільними заповнювачами, навколишній текст перекладається, а оригінальні імена змінних відновлюються у вихідних даних. Модель перекладу ніколи не бачить імена змінних як текст для перекладу.
Що відбувається з не рядковими значеннями — числами, булевими, null?
Не рядкові значення проходять повністю без змін. PolyLingo перекладає лише рядкові значення, що містять природну мову. Числа, булеві значення, null та масиви не рядкових типів зберігаються точно так, як у джерелі.
Чи може PolyLingo обробляти глибоко вкладені структури JSON?
Так. PolyLingo рекурсивно обходить об’єкти будь-якої глибини вкладеності. Переклад застосовується до всіх рядкових значень у структурі, незалежно від глибини вкладеності.
Що якщо деякі ключі містять контент, який не слід перекладати, як слаги або коди?
PolyLingo за замовчуванням перекладає всі рядкові значення. Якщо у вас є рядкові поля, які не слід перекладати — слаги, коди мов, технічні ідентифікатори — рекомендується або виключити їх з JSON, який ви надсилаєте, або використовувати явний параметр формату з вказівкою полів для пропуску (скоро буде). Для більшості файлів локалізації всі рядкові значення призначені для перекладу.
Чи працює це з JSON5 або JSONC (JSON з коментарями)?
Наразі PolyLingo обробляє стандартний JSON. JSON5 та JSONC (з коментарями) слід попередньо обробити, щоб видалити коментарі та конвертувати у стандартний JSON перед надсиланням. Це звичайний крок у збірних конвеєрах і додає мінімальне навантаження.
Скільки мов можна вказати в одному запиті?
До 36 підтримуваних мов в одному запиті. Відповідь містить один перекладений JSON-об’єкт на кожен код мови. Ліміти запитів залежать від плану — безкоштовний рівень дозволяє 10 запитів на хвилину, а плани Growth і Scale — 200–600 запитів на хвилину.
Пов’язані посібники
Перекладайте файли локалізації за секунди.
Вставте ваш JSON, оберіть мови, отримайте валідні файли локалізації для кожної цільової мови.
Почати безкоштовний перекладВставте ваш JSON локалізації та побачте результат — безкоштовно, без реєстрації.