Перейти к содержимому

Переводчик JSON с сохранением структуры | Бесплатный инструмент интернационализации

Бесплатный переводчик JSON, который сохраняет вашу структуру без изменений. Переводите файлы i18n, API-ответы и вложенные JSON, сохраняя ключи, типы данных и форматирование. Идеально подходит для i18next и многоязычных приложений.

Переводчик JSON-структур

Этот инструмент переводит содержимое JSON-объектов с сохранением их структуры. Вставьте свой JSON в левую панель, выберите целевой язык и увидите переведенный результат справа.

Здесь появится переведенный результат...

Как использовать

  1. Вставьте JSON-объект в поле Исходный JSON.
  2. Выберите целевой язык в выпадающем меню.
  3. Переведенный JSON автоматически появится в правой панели.
  4. Нажмите кнопку Копировать, чтобы скопировать переведенный 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. Рекурсивный обход Начиная с корня, алгоритм проходит через каждый узел дерева JSON. Для каждого элемента он проверяет тип данных:

  • Строка? Помещаем в очередь для перевода
  • Число, булево значение, null? Пропускаем полностью
  • Объект или массив? Рекурсивно входим в него

3. Типобезопасный перевод Только строковые значения отправляются в API перевода. Ваше "quantity": 42 остается 42, а не становится "сорок два". Ваше "isActive": true остается true, а не "истина".

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": "Разработчик программного обеспечения и участник открытого исходного кода",
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" может потребовать разных переводов для "Отправить форму" и "Отправить платеж".

Локализация ответов 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, ориентированных на клиентов, проверьте вывод перед развертыванием.

Перевод контента в бессерверных CMS

Платформы бессерверных CMS, такие как Contentful или Strapi, часто экспортируют контент в формате JSON. Когда у вас есть 50 блог-постов со структурированными метаданными (автор, теги, URL featured-изображений, даты публикации), вы хотите перевести текст и заголовок, не трогая метаданные.

Типичный экспорт включает как строки контента, так и конфигурацию:

  • Контент: текст статьи, заголовок, аннотация
  • Структура: идентификаторы авторов, пути изображений, слаги категорий, метки времени

Ручной перевод рискует изменить слаг с 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": "👋 Привет"}
2

Escape-последовательности 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?

Абсолютно. Структура вывода соответствует тому, что ожидают эти фреймворки. Файл i18next JSON вида:

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" (медицина) vs "patient" (терпение) → Контекст часто упускается

Для производственных приложений используйте это как первый проход, затем попросите кого-нибудь проверить технические и специфические термины.

Как быть с языками с другими наборами символов (китайский, арабский, русский)?

Инструмент корректно обрабатывает Unicode, поэтому все наборы символов работают. На что стоит обратить внимание: арабский и иврит — языки с письмом справа налево (RTL), что может влиять на отображение плейсхолдеров в переведенных строках. Структура JSON остается корректной, но проверьте читаемость переведенного текста.

Сохранит ли он мое форматирование (отступы, разрывы строк)?

Вывод является корректным JSON, но форматирование (пробелы, отступы) может отличаться от исходного. Если вам нужно определенное форматирование, пропустите вывод через JSON-форматтер с вашими предпочтительными настройками.

Можно ли переводить конфигурационные значения вроде URL или API-ключей?

Инструмент переводит все строки, включая URL и конфигурационные значения. Чтобы предотвратить это:

  1. Разделите ваш JSON на пользовательский контент и конфигурацию
  2. Переводите только раздел контента
  3. Оставьте конфигурацию без перевода

Еще лучше — изначально структурируйте ваши файлы так, чтобы отделить переводимый контент от технических значений.

Это бесплатно? Есть ли ограничения на количество запросов?

Веб-версия инструмента бесплатна для типичного использования. Очень большой объем перевода (сотни файлов в минуту) может столкнуться с ограничениями базового сервиса перевода. Для большинства рабочих процессов разработки вы не столкнетесь с ограничениями.

Ссылки и дополнительные материалы

Для более глубокого понимания структуры JSON, стандартов интернационализации и лучших практик:

Начните переводить ваши JSON-файлы

Нужно быстро сгенерировать файлы перевода для вашего многоязычного приложения? Вставьте свой JSON, выберите целевой язык и получите мгновенные переводы с сохранением структуры. Работает с i18next, react-intl, vue-i18n и любыми фреймворками, ожидающими согласованную JSON-структуру между языками.

Начните перевод прямо сейчас: