JSON Преводач, Който Запазва Структурата | Безплатен i18n Инструмент
Безплатен 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. Рекурсивно Обхождане Започвайки от корена, алгоритъмът преминава през всеки възел в JSON дървото. За всеки елемент проверява типа данни:
- Низ? Включва го за превод
- Число, булев израз, нула? Пропуска го напълно
- Обект или масив? Рекурсивно навлиза в него
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 Формат" Ще видите това, когато има синтактичен проблем. Чести причинители:
- Липсваща запетая между двойки ключ-стойност
- Trailing запетая след последния елемент (валидна в JavaScript, не и в JSON)
- Единични кавички вместо двойни
- Неекранирани специални знаци в низове
Бърз fix: Пуснете вашия JSON през валидатор като JSONLint преди поставяне.
Превод Fail Мълчаливо Ако изходният панел остане празен:
- Проверете интернет връзката си - преводът изисква API достъп
- Потвърдете, че сте избрали целеви език
- Опитайте с по-малък JSON фрагмент, за да изолирате проблема
Неочаквани Резултати при Превод Машинният превод работи добре за стандартни фрази, но среща затруднения с:
- Технически термини или специфични за домейн термини
- Търговски марки (които обикновено трябва да останат непреведени)
- Placeholder синтаксис като
{{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Реални приложения
Файлове за интернационализация на уеб приложения
Повечето съвременни framework-ове като Next.js, React или Vue съхраняват преводите в JSON формат. Когато трябва да добавите нов език към вашето приложение, изправени сте пред избор: ръчно копиране и превеждане на всеки ключ (рисковано), или използване на този инструмент за генериране на първоначален вариант за минути.
Реален сценарий: Вашето приложение има en.json с над 200 преводни ключа в nested категории—навигация, формуляри, съобщения за грешки, подсказки. Нуждаете се от френска и немска версия до следващия спринт.
Вход (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 адреси на изображения, дати на публикуване), искате да преведете тялото и заглавието, без да докосвате метаданните.
Типичен експорт включва както низове за съдържание, така и конфигурация:
- Съдържание: текст на статия, заглавие, резюме
- Структура: идентификатори на автори, пътища към изображения, slug-ове на категории, времеви отпечатъци
Ръчният превод крие риск от промяна на slug от technology на tecnología, което може да наруши маршрутизацията. Преводът, който запазва структурата, обработва само полетата за съдържание.
Конфигурационни файлове за мултирегионални разгръщания
Разгръщане в различни региони? Вашите конфигурационни файлове може да се нуждаят от локализирани низове, като се запазят endpoints, credentials и флагове за функции идентични:
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 support | $$$+ |
Кога да използваме този инструмент: В началните етапи на проекти, генериране на чернови за преглед, вътрешни приложения, където перфектният превод не е критичен.
Кога да инвестираме в професионален превод: Съдържание за клиенти, правни/регулаторни текстове, фирмени послания или когато културните нюанси са по-важни от скоростта.
Технически съображения и гранични случаи
Какво се превежда (и какво не)
Инструментът използва проверка на типа, за да определи какво да преведе:
✅ Превежда се:
- Стрингови стойности:
"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 файлове (под 500KB) без проблеми. За по-големи набори от данни:
- 500KB - 2MB: Работи, но може да бъде бавен в браузъра
- Над 2MB: Обмислете разделянето на логически части (например отделни файлове по функции или раздели)
Паметта на браузъра е ограничаващият фактор, а не самият алгоритъм.
Често задавани въпроси
Как се различава това от поставянето на 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 файлове?
Абсолютно. Изходната структура отговаря на очакванията на тези framework-ове. 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 - Comprehensive ръководство на 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 структура между езиците.
Започнете превода сега: