JSON Перекладач, Який Зберігає Структуру | Безкоштовний Інструмент Інтернаціоналізації
Безкоштовний JSON перекладач, який зберігає вашу структуру недоторканою. Перекладайте i18n файли, API-відповіді та вкладені JSON, зберігаючи ключі, типи даних та форматування. Ідеально підходить для i18next та багатомовних додатків.
Перекладач зі збереженням структури JSON
Цей інструмент перекладає вміст JSON-об'єктів, зберігаючи їхню структуру. Вставте свій JSON у ліву панель, виберіть цільову мову і побачите перекладений результат праворуч.
Перекладений результат з'явиться тут...
Як користуватися
- Вставте свій JSON-об'єкт у поле вихідного JSON.
- Виберіть цільову мову з випадаючого меню.
- Перекладений JSON автоматично з'явиться на правій панелі.
- Натисніть кнопку "Копіювати", щоб скопіювати перекладений JSON у буфер обміну.
Документація
Що таке JSON-перекладач зі збереженням структури?
Коли ви намагалися скопіювати JSON до Google Translate і отримували зламані ключі, відсутні дужки або спотворений синтаксис? Саме цю проблему вирішує цей інструмент.
JSON-перекладач зі збереженням структури перетворює рядкові значення всередині ваших JSON-об'єктів на іншу мову, залишаючи все інше недоторканим — ключі залишаються незмінними, числа залишаються числами, булеві значення залишаються булевими, а вкладена структура не руйнується.
Ось що відрізняє його від звичайних інструментів перекладу: коли ви перекладаєте типовий i18n-файл з 50+ вкладеними ключами, вам потрібно, щоб структура залишалася ідентичною, щоб ваш код міг і далі посилатися на user.profile.displayName іспанською, французькою або японською мовами. Зламайте цю структуру, і ви будете налагоджувати код годинами.
Цей інструмент автоматично здійснює рекурсивний обхід, визначаючи, які рядки потребують перекладу, а які елементи (як API-ключі, налаштування або числові ідентифікатори) мають залишатися абсолютно незмінними.
Як працює збереження структури JSON
Чому важливе збереження структури
Коли ви працюєте з перекладом JSON, ви зазвичай маєте справу з однією з цих ситуацій:
- i18n файли, де ваш додаток очікує, що
en.jsonтаfr.jsonматимуть однакові ключі - API відповіді, які потребують послідовної структури різними мовами для аналізу клієнтом
- Файли конфігурації, де зміна назви ключа може зламати весь додаток
- Експорти бази даних, де зв'язки залежать від конкретних назв полів
Виклик: JSON - це не просто текст. Це структуровані дані зі схемою, на яку покладається ваш код. Зміна "userName" на "nombreUsuario" під час перекладу призведе до помилки undefined.
Як працює процес перекладу
Ось що відбувається під капотом при перекладі JSON:
1. Аналіз та Перевірка Інструмент спочатку перевіряє синтаксис JSON. Якщо у вас відсутня кома або є зайвий дужка, ви отримаєте чітке повідомлення про помилку ще до початку перекладу — це вберігає вас від пошкодженого виводу.
2. Рекурсивне Traversal Починаючи з кореня, алгоритм проходить через кожен вузол дерева JSON. Для кожного елемента він перевіряє тип даних:
- Рядок? Додати до черги перекладу
- Число, булеве значення, null? Повністю пропустити
- Об'єкт або масив? Рекурсивно увійти
3. Типобезпечний Переклад
Лише рядкові значення надсилаються до API перекладу. Ваше "quantity": 42 залишається 42, а не "cuarenta y dos". Ваше "isActive": true залишається true, а не "verdadero".
4. Збереження Ключів
Всі ключі об'єктів залишаються в оригінальній мові. Це критично важливо, оскільки translations.header.welcomeMessage має бути тим самим шляхом у кожному мовному файлі.
5. Реконструкція Структури Перекладені рядки вставляються назад у точно ті самі позиції, зберігаючи всі рівні вкладеності, індекси масивів та ієрархії об'єктів.
Поширена пастка: Деякі розробники намагаються використати JSON.stringify() об'єкта, перекласти весь рядок, а потім розпарсити його назад. Це ламає структуру, оскільки перекладач змінює ключі, дужки та синтаксис. Рекурсивний підхід повністю уникає цієї проблеми.
Використання перекладача JSON зі збереженням структури
Покрокова інструкція
1. Вставте свій JSON Скопіюйте об'єкт JSON і вставте його в ліву панель. Інструмент опрацьовує будь-який коректний JSON — незалежно від того, чи це простий об'єкт з 5 ключами, чи глибоко вкладена структура з масивами та кількома рівнями.
2. Виберіть цільову мову Оберіть мову з випадаючого списку: іспанська, французька, німецька, італійська, португальська, китайська, японська, корейська, російська та інші. Якщо ви перекладаєте для проекту i18next, використовуйте код мови, який очікує ваш фреймворк.
3. Отримайте миттєвий переклад Перекладений результат автоматично з'являється в правій панелі. Не потрібна кнопка "Перекласти" — обробка відбувається одразу після введення коректного JSON і вибору мови.
4. Скопіюйте та використовуйте Натисніть кнопку "Копіювати", щоб отримати перекладений JSON. Він готовий до безпосередньої вставки в ваш проект — без додаткового очищення.
5. Очистіть для наступного перекладу Натисніть "Очистити все", коли будете готові перекласти інший файл. Інструмент миттєво скидає обидві панелі.
Поширені проблеми та рішення
Помилка "Некоректний формат JSON" Ви побачите це, коли є проблема з синтаксисом. Часті причини:
- Відсутня кома між парами ключ-значення
- Кома після останнього елемента (коректна в JavaScript, але не в JSON)
- Одинарні лапки замість подвійних
- Неекрановані спеціальні символи в рядках
Швидке виправлення: Перевірте ваш JSON через валідатор, наприклад, JSONLint, перед вставкою.
Переклад не спрацьовує Якщо панель виведення залишається порожньою:
- Перевірте підключення до інтернету — переклад потребує доступу до API
- Перевірте, чи вибрано цільову мову
- Спробуйте з меншим фрагментом JSON, щоб локалізувати проблему
Несподівані результати перекладу Машинний переклад добре працює зі стандартними фразами, але має складнощі з:
- Технічною термінологією або специфічними термінами
- Назвами брендів (які часто мають залишатися без перекладу)
- Синтаксисом заповнювачів на кшталт
{{username}}або%s
Для виробничих додатків використовуйте цей інструмент як перший крок, а потім перевірте носієм мови вміст, специфічний для домену або призначений для клієнта.
Професійні поради для кращих результатів
Тримайте технічні рядки окремо Якщо ваш JSON змішує текст для користувача з технічними ідентифікаторами, розгляньте їх розділення. Наприклад:
1{
2 "display": {"welcome": "Ласкаво просимо"},
3 "config": {"apiKey": "abc123", "endpoint": "https://api.example.com"}
4}
5Перекладайте об'єкт display окремо, щоб уникнути випадкової обробки значень config.
Використовуйте контекст у рядках "Надіслати" може перекладатися по-різному залежно від контексту. "Надіслати форму" або "Надіслати платіж" дає перекладачам (людям чи машинам) кращий контекст для точного перекладу.
Тестуйте на реальних даних Перед перекладом всього файлу i18n з 500+ ключами, протестуйте на малій вибірці, яка включає всі типи даних — рядки, числа, вкладені об'єкти, масиви.
Приклади коду
Переклад JSON за допомогою JavaScript
1// Приклад реалізації подібної функціональності на JavaScript
2function translateJsonStructure(jsonObj, targetLanguage) {
3 // Допоміжна функція для перекладу рядка
4 function translateString(str, lang) {
5 // У реальній реалізації це викликало б API перекладу
6 return `[${lang}] ${str}`;
7 }
8
9 // Рекурсивна функція для обходу та перекладу JSON
10 function processNode(node) {
11 if (node === null) return null;
12
13 if (typeof node === 'string') {
14 return translateString(node, targetLanguage);
15 }
16
17 if (Array.isArray(node)) {
18 return node.map(item => processNode(item));
19 }
20
21 if (typeof node === 'object') {
22 const result = {};
23 for (const key in node) {
24 result[key] = processNode(node[key]);
25 }
26 return result;
27 }
28
29 // Повертає числа, булеві значення тощо без змін
30 return node;
31 }
32
33 return processNode(jsonObj);
34}
35
36// Приклад використання
37const sourceJson = {
38 "product": {
39 "name": "Бездротові навушники",
40 "description": "Високоякісні бездротові навушники з шумозаглушенням",
41 "features": ["Bluetooth 5.0", "Час роботи від акумулятора 40 годин", "Складана конструкція"],
42 "price": 99.99,
43 "inStock": true
44 }
45};
46
47const translatedJson = translateJsonStructure(sourceJson, "es");
48console.log(JSON.stringify(translatedJson, null, 2));
49Переклад JSON за допомогою Python
1import json
2
3def translate_json_structure(json_obj, target_language):
4 """
5 Перекладає рядкові значення в об'єкті JSON, зберігаючи структуру.
6
7 Аргументи:
8 json_obj: Розпарсений об'єкт JSON
9 target_language: Код цільової мови (наприклад, 'es', 'fr')
10
11 Повертає:
12 Перекладений об'єкт JSON зі збереженою структурою
13 """
14 def translate_string(text, lang):
15 # У реальній реалізації це викликало б API перекладу
16 return f"[{lang}] {text}"
17
18 def process_node(node):
19 if node is None:
20 return None
21
22 if isinstance(node, str):
23 return translate_string(node, target_language)
24
25 if isinstance(node, list):
26 return [process_node(item) for item in node]
27
28 if isinstance(node, dict):
29 result = {}
30 for key, value in node.items():
31 result[key] = process_node(value)
32 return result
33
34 # Повертає числа, булеві значення тощо без змін
35 return node
36
37 return process_node(json_obj)
38
39# Приклад використання
40source_json = {
41 "user": {
42 "name": "Джейн Сміт",
43 "bio": "Розробник програмного забезпечення та учасник open source",
44 "skills": ["JavaScript", "Python", "React"],
45 "active": True,
46 "followers": 245
47 }
48}
49
50translated_json = translate_json_structure(source_json, "fr")
51print(json.dumps(translated_json, indent=2))
52Переклад JSON за допомогою PHP
1<?php
2/**
3 * Перекладає структуру JSON, зберігаючи оригінальну структуру
4 *
5 * @param mixed $jsonObj Розпарсений об'єкт JSON
6 * @param string $targetLanguage Код цільової мови
7 * @return mixed Перекладений об'єкт JSON
8 */
9function translateJsonStructure($jsonObj, $targetLanguage) {
10 // Допоміжна функція для перекладу рядка
11 function translateString($text, $lang) {
12 // У реальній реалізації це викликало б API перекладу
13 return "[$lang] $text";
14 }
15
16 // Рекурсивна функція для обробки кожного вузла
17 function processNode($node, $lang) {
18 if ($node === null) {
19 return null;
20 }
21
22 if (is_string($node)) {
23 return translateString($node, $lang);
24 }
25
26 if (is_array($node)) {
27 // Перевірка, чи є це асоціативний масив (об'єкт) або індексований масив
28 if (array_keys($node) !== range(0, count($node) - 1)) {
29 // Асоціативний масив (об'єкт)
30 $result = [];
31 foreach ($node as $key => $value) {
32 $result[$key] = processNode($value, $lang);
33 }
34 return $result;
35 } else {
36 // Індексований масив
37 return array_map(function($item) use ($lang) {
38 return processNode($item, $lang);
39 }, $node);
40 }
41 }
42
43 // Повертає числа, булеві значення тощо без змін
44 return $node;
45 }
46
47 return processNode($jsonObj, $targetLanguage);
48}
49
50// Приклад використання
51$sourceJson = [
52 "company" => [
53 "name" => "Глобальні технологічні рішення",
54 "description" => "Інноваційна компанія з розробки програмного забезпечення",
55 "founded" => 2010,
56 "services" => ["Веб-розробка", "Мобільні додатки", "Хмарні рішення"],
57 "active" => true
58 ]
59];
60
61$translatedJson = translateJsonStructure($sourceJson, "de");
62echo json_encode($translatedJson, JSON_PRETTY_PRINT);
63?>
64Реальні сценарії використання
Файли інтернаціоналізації веб-додатків
Більшість сучасних фреймворків, як Next.js, React або Vue, зберігають переклади у форматі JSON. Коли вам потрібно додати нову мову до додатку, ви стикаєтеся з вибором: вручну копіювати та перекладати кожен ключ (ризиковано), або використати цей інструмент для генерації чорнового варіанту за лічені хвилини.
Реальний сценарій: У вашому додатку є en.json з понад 200 ключами перекладу в різних категоріях — навігація, форми, повідомлення про помилки, підказки. Вам потрібні французька та німецька версії до наступного спринту.
Вхідні дані (en.json):
1{
2 "common": {
3 "welcome": "Welcome to our application",
4 "login": "Log in",
5 "signup": "Sign up",
6 "errorMessages": {
7 "required": "This field is required",
8 "invalidEmail": "Please enter a valid email address"
9 }
10 }
11}
12Перекладіть французькою, отримайте fr.json з ідентичною структурою. Ваш код і далі посилається на t('common.errorMessages.required') без змін.
Те, що, на мою думку, працює добре: Генеруйте переклади за допомогою цього інструменту, потім попросіть двомовного співробітника перевірити технічні терміни та написи кнопок. Це допоможе виявити випадки, коли "Submit" може потребувати різних перекладів для "Submit form" та "Submit payment."
Локалізація відповідей API
Створюєте API для кількох країн? Вам потрібні послідовні структури відповідей різними мовами. API сповіщень може повертати:
1{
2 "status": "success",
3 "notification": {
4 "title": "Order Shipped",
5 "message": "Your order #12345 has been shipped",
6 "priority": 1,
7 "timestamp": 1678901234
8 }
9}
10Ваш мобільний додаток аналізує notification.title та notification.message. Якщо французький переклад змінить структуру ключів, додаток зламається для французьких користувачів.
Цей інструмент забезпечує, що notification.title залишається notification.title на кожній мові, змінюються лише рядкові значення. Код клієнта працює однаково на всіх локалях.
Одне обмеження, яке слід зазначити: Автоматичний переклад не розуміє вашу предметну область. "Shipped" у контексті електронної комерції може перекладатися інакше, ніж у логістичному або морському контексті. Для API, орієнтованих на клієнтів, перевіряйте вихідні дані перед розгортанням.
Переклад вмісту Headless CMS
Платформи Headless CMS, як Contentful або Strapi, часто експортують вміст у форматі JSON. Коли у вас є 50 блог-постів зі структурованими метаданими (автор, теги, URL зображень, дати публікації), ви хочете перекласти тіло та заголовок, не чіпаючи метадані.
Типовий експорт включає як рядки вмісту, так і конфігурацію:
- Вміст: текст статті, заголовок, анонс
- Структура: ідентифікатори авторів, шляхи зображень, слаги категорій, мітки часу
Ручний переклад ризикує змінити слаг з technology на tecnología, що зламає маршрутизацію. Переклад зі збереженням структури обробляє лише поля вмісту.
Файли конфігурації для багаторегіональних розгортань
Розгортаєте в різних регіонах? Ваші файли конфігурації можуть потребувати локалізованих рядків, зберігаючи незмінними кінцеві точки, облікові дані та прапори функцій:
1{
2 "region": "eu-west",
3 "welcomeMessage": "Welcome to our service",
4 "endpoint": "https://api.eu.example.com",
5 "retryAttempts": 3,
6 "features": {"darkMode": true}
7}
8Перекладіть welcomeMessage німецькою, залишивши endpoint, retryAttempts та features без змін.
Порівняння підходів до перекладу
| Метод | Найкраще для | Швидкість | Точність | Збереження структури | Вартість |
|---|---|---|---|---|---|
| Цей інструмент | Швидке створення i18n файлів, прототипи, внутрішні інструменти | Миттєво | Добре для стандартного контенту | 100% збережено | Безкоштовно |
| Google Translate (копіювання/вставлення) | Окремі фрази, нетехнічний текст | Миттєво | Різна | Руйнує JSON | Безкоштовно |
| Професійний переклад | Контент для клієнтів, юридичні документи, маркетинг | Дні | Відмінна | Потрібна ручна робота | $0.08-0.15 за слово |
| Системи керування перекладами (Lokalise, Phrase) | Корпоративні додатки, робочі процеси співпраці | Години-Дні | Відмінна з перевіркою | Вбудована підтримка JSON | $$$+ |
Коли використовувати цей інструмент: На ранніх стадіях проєктів, для створення чернеток для перегляду, внутрішніх додатків, де ідеальний переклад не критичний.
Коли інвестувати в професійний переклад: Контент для клієнтів, юридичні/комплаєнс тексти, брендові повідомлення або коли культурні нюанси важливіші за швидкість.
Технічні міркування та крайні випадки
Що перекладається (а що ні)
Інструмент використовує перевірку типів для визначення того, що перекладати:
✅ Перекладається:
- Рядкові значення:
"Welcome"→"Ласкаво просимо" - Рядки в масивах:
["Hello", "World"]→["Привіт", "Світ"] - Рядки на будь-якому рівні вкладеності
❌ Не перекладається:
- Числа:
42,3.14,-10залишаються незмінними - Булеві значення:
trueтаfalseзалишаються як є - Null:
nullзалишаєтьсяnull - Ключі об'єктів:
"userName"як ключ залишається"userName" - Порожні рядки:
""залишається""
Робота зі спеціальними символами
Юнікод та емодзі Інструмент коректно опрацьовує UTF-8, тому емодзі та не-латинські символи працюють добре:
1{"greeting": "👋 Hello"}
2Перекладається українською як:
1{"greeting": "👋 Привіт"}
2Escape-послідовності
JSON escape-послідовності (\n, \t, \") зберігаються:
1{"message": "Line 1\nLine 2"}
2\n залишається незмінним при перекладі.
Заповнювачі
Ось потенційна проблема: якщо ваші рядки містять заповнювачі на кшталт {username} або %s, вони можуть бути перекладені або змінені місцями. У мовах з написанням справа наліво (як арабська чи іврит) позиція заповнювачів може змінитися. Перевіряйте їх ретельно.
Продуктивність великих JSON-файлів
Веб-інструмент опрацьовує типові i18n-файли (до 500 КБ) без проблем. Для більших наборів даних:
- 500 КБ - 2 МБ: Працює, але може бути повільно в браузері
- Понад 2 МБ: Розгляньте розділення на логічні частини (наприклад, окремі файли за функціями або розділами)
Обмежуючим фактором є пам'ять браузера, а не сам алгоритм.
Часто запитувані питання
Чим це відрізняється від вставлення JSON у Google Translate?
Google Translate сприймає JSON як звичайний текст, тобто намагається перекласти все — включаючи ключі, символи синтаксису та числові значення. Ви отримаєте вихідні дані на зразок:
1{ "nom d'utilisateur": "Jean Dupont", "âge": "vingt-cinq" }
2Зверніть увагу, як "username" став "nom d'utilisateur", а число 25 перетворилося на рядок "vingt-cinq"? Ваш код одразу ламається.
Цей інструмент розуміє структуру JSON і перекладає лише рядкові значення, залишаючи ключі та інші типи даних недоторканими.
Чи впорається він з глибоко вкладеним JSON з масивами?
Так. Рекурсивний алгоритм обробляє кожен рівень вкладеності:
1{
2 "users": [
3 {"name": "John", "roles": ["admin", "editor"]},
4 {"name": "Jane", "roles": ["viewer"]}
5 ]
6}
7Він перекладає всі рядкові значення ("John", "Jane", "admin", "editor", "viewer"), зберігаючи точну структуру.
Що робити, якщо мій JSON містить як англійський, так і вже перекладений вміст?
Інструмент перекладає кожен рядок, який він знаходить, навіть якщо деякі вже перебувають у цільовій мові. Якщо ви додаєте нові ключі до наявного файлу перекладу, перекладіть лише нову секцію окремо, а потім об'єднайте результати.
Чи можна використовувати це для файлів i18next або react-intl?
Абсолютно. Структура виведення відповідає тому, що очікують ці фреймворки. Файл JSON i18next на зразок:
1{"translation": {"welcome": "Hello", "goodbye": "Goodbye"}}
2Стає:
1{"translation": {"welcome": "Hola", "goodbye": "Adiós"}}
2Ваші виклики t('translation.welcome') залишаються незмінними.
Наскільки точним є автоматичний переклад технічного вмісту?
Це залежить від контексту:
- Загальний інтерфейсний текст: "Save", "Cancel", "Submit" → Зазвичай точно
- Технічний жаргон: "webhook", "OAuth2", "idempotent" → Може бути неправильно перекладений або залишений як є
- Специфічні терміни домену: "patient record" (медичний) проти "patient" (терпіння) → Контекст часто втрачається
Для виробничих додатків використовуйте це як перший прохід, а потім перегляньте технічні та специфічні терміни домену.
Як щодо мов з різними наборами символів (китайська, арабська, російська)?
Інструмент правильно опрацьовує Unicode, тому всі набори символів працюють. На що варто звернути увагу: арабська та іврит є мовами з написанням справа наліво (RTL), що може вплинути на те, як виглядають підстановки в перекладених рядках. Структура JSON залишається правильною, але перевірте перекладений текст на читабельність.
Чи збереже він моє форматування (відступи, розриви рядків)?
Вихідні дані є коректним JSON, але форматування (пробіли, відступи) може відрізнятися від вхідних даних. Якщо вам потрібне певне форматування, пропустіть вихідні дані через JSON-форматувач з бажаними налаштуваннями.
Чи можна перекладати значення конфігурації, як-от URL-адреси або API-ключі?
Інструмент перекладає всі рядки, включаючи URL-адреси та значення конфігурації. Щоб запобігти цьому:
- Розділіть JSON на вміст інтерфейсу користувача та конфігурацію
- Перекладіть лише секцію вмісту
- Залиште конфігурацію без перекладу
Ще краще — одразу структуруйте файли так, щоб розділити вміст для перекладу від технічних значень.
Чи є це безкоштовним? Чи є обмеження швидкості?
Веб-версія інструменту безкоштовна для типового використання. Дуже великий обсяг перекладу (сотні файлів за хвилину) може зіткнутися з обмеженнями швидкості базового сервісу перекладу. Для більшості робочих процесів розробки ви не зіткнетеся з обмеженнями.
Посилання та додаткові матеріали
Для глибшого розуміння структури JSON, стандартів інтернаціоналізації та кращих практик:
-
ECMA-404: Синтаксис обміну даними JSON - Офіційна специфікація JSON від Ecma International, що визначає стандартний формат: ecma-international.org/publications-and-standards/standards/ecma-404/
-
MDN Web Docs: Робота з JSON - Всебічний посібник Mozilla з парсингу, перетворення на рядок та структури JSON: developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON
-
Діяльність W3C з інтернаціоналізації (i18n) - Стандарти та кращі практики веб-інтернаціоналізації: w3.org/International/
-
RFC 8259: Формат обміну даними JSON - Специфікація IETF щодо синтаксису та семантики JSON: datatracker.ietf.org/doc/html/rfc8259
Почніть перекладати свої JSON-файли
Потрібно швидко згенерувати файли перекладів для вашої багатомовної програми? Вставте свій JSON, виберіть цільову мову та миттєво отримайте переклади з збереженням структури. Працює з i18next, react-intl, vue-i18n та будь-якою платформою, яка очікує послідовну JSON-структуру між мовами.
Розпочніть переклад зараз: