Traducător JSON care Păstrează Structura | Instrument i18n Gratuit
Traducător JSON gratuit care menține structura intactă. Traduceți fișiere i18n, răspunsuri API și JSON imbricat, păstrând cheile, tipurile de date și formatarea. Perfect pentru aplicații i18next și multilingve.
Traducător de Structuri JSON
Această unealtă traduce conținutul obiectelor JSON păstrând structura lor. Lipește JSON-ul în panoul din stânga, selectează o limbă țintă și vizualizează rezultatul tradus în panoul din dreapta.
Rezultatul traducerii va apărea aici...
Cum se Utilizează
- Lipește obiectul JSON în câmpul JSON Sursă.
- Selectează limba țintă din meniul derulant.
- JSON-ul tradus va apărea automat în panoul din dreapta.
- Apasă butonul Copiază pentru a copia JSON-ul tradus în clipboard.
Documentație
Ce este un Traducător care Păstrează Structura JSON?
Ați încercat vreodată să copiați JSON în Google Translate și ați ajuns cu chei stricate, acolade lipsă sau sintaxă stricată? Exact această problemă o rezolvă această unealtă.
Un traducător care păstrează structura JSON convertește valorile string din interiorul obiectelor JSON într-o altă limbă, păstrând totul neschimbat — cheile rămân la fel, numerele rămân numere, boolean-urile rămân boolean, iar structura înregistrată nu se prăbușește.
Iată ce îl face diferit de uneltele de traducere obișnuite: atunci când traduceți un fișier i18n tipic cu peste 50 de chei înregistrate, aveți nevoie ca structura să rămână identică pentru ca codul dvs. să poată în continuare să facă referire la user.profile.displayName în spaniolă, franceză sau japoneză. Ruperea acestei structuri și veți depana ore întregi.
Această unealtă gestionează automat traversarea recursivă, identificând care string-uri necesită traducere și care elemente (precum cheile API, valorile de configurație sau ID-urile numerice) ar trebui să rămână exact cum sunt.
Cum Funcționează Păstrarea Structurii JSON
De ce Contează Păstrarea Structurii
Atunci când lucrați cu traducerea JSON, de obicei vă confruntați cu una dintre aceste scenarii:
- Fișiere i18n unde aplicația dvs. se așteaptă ca
en.jsonșifr.jsonsă aibă chei identice - Răspunsuri API care necesită o structură consecventă între limbi pentru parsarea clientului
- Fișiere de configurare unde schimbarea numelui unei chei distruge întreaga aplicație
- Exporturi de baze de date unde relațiile depind de nume specifice de câmpuri
Provocarea: JSON nu este doar text. Este date structurate cu o schemă pe care codul dvs. se bazează. Schimbarea "userName" în "numeUtilizator" în timpul traducerii, iar aplicația dvs. aruncă o eroare undefined.
Cum Funcționează Procesul de Traducere
Iată ce se întâmplă sub capotă atunci când traduceți JSON:
1. Parsare și Validare Instrumentul validează mai întâi sintaxa JSON. Dacă lipsește o virgulă sau aveți o paranteză în plus, veți primi un mesaj de eroare clar înainte de a începe orice traducere - salvându-vă de la ieșire coruptă.
2. Traversare Recursivă Pornind de la rădăcină, algoritmul parcurge fiecare nod din arborele JSON. Pentru fiecare element, verifică tipul de date:
- Șir? Pune-l la coadă pentru traducere
- Număr, boolean, null? Sări-l complet
- Obiect sau array? Recursează în el
3. Traducere Sigură ca Tip
Numai valorile de tip șir sunt trimise la API-ul de traducere. "quantity": 42 rămâne 42, nu "patruzeci și doi". "isActive": true rămâne true, nu "adevărat".
4. Păstrarea Cheilor
Toate cheile obiectului rămân în limba lor originală. Acest lucru este critic deoarece translations.header.welcomeMessage trebuie să fie aceeași cale în fiecare fișier de limbă.
5. Reasamblare Structură Șirurile traduse sunt reintroduse exact în aceleași poziții, menținând toate nivelurile de îngribuire, indicii de array și ierarhiile de obiecte.
O capcană obișnuită: Unii developeri încearcă să JSON.stringify() obiectul, să traducă întregul șir, apoi să-l parseze înapoi. Acest lucru se strică pentru că traducătorul modifică cheile, parantezele și sintaxa. Abordarea recursivă evită acest lucru complet.
Utilizarea Traducătorului care Păstrează Structura JSON
Ghid Pas cu Pas
1. Lipește JSON-ul Copiază obiectul JSON și lipește-l în panoul din stânga. Instrumentul gestionează orice JSON valid - fie un obiect simplu cu 5 chei, fie o structură adâncă cu array-uri și mai multe niveluri.
2. Selectează Limba Țintă Alege din lista de limbi: Spaniolă, Franceză, Germană, Italiană, Portugheză, Chineză, Japoneză, Coreeană, Rusă și altele. Dacă traduci pentru un proiect i18next, potrivește codul de limbă pe care îl așteaptă framework-ul.
3. Obține Traducerea Instantanee Rezultatul tradus apare automat în panoul din dreapta. Fără buton "Traducere" - procesează imediat ce ai un JSON valid și o limbă selectată.
4. Copiază și Utilizează Apasă butonul "Copiază" pentru a prelua JSON-ul tradus. Este gata să fie lipit direct în proiect - fără curățare necesară.
5. Șterge pentru Următoarea Traducere Apasă "Șterge Tot" când ești gata să traduci alt fișier. Instrumentul resetează instantaneu ambele panouri.
Probleme Comune și Soluții
Eroare "Format JSON Invalid" Vei vedea asta când există o problemă de sintaxă. Cauze obișnuite:
- Virgulă lipsă între perechile cheie-valoare
- Virgulă în plus după ultimul element (validă în JavaScript, nu în JSON)
- Ghilimele simple în loc de ghilimele duble
- Caractere speciale nescăpate în șiruri
Rezolvare rapidă: Rulează JSON-ul prin validatorul JSONLint înainte de a-l lipi.
Traducerea Eșuează Fără Mesaj Dacă panoul de ieșire rămâne gol:
- Verifică conexiunea la internet - traducerea necesită acces API
- Confirmă selectarea limbii țintă
- Încearcă cu un fragment JSON mai mic pentru a izola problema
Rezultate Neașteptate la Traducere Traducerea automată funcționează bine pentru fraze standard, dar are dificultăți cu:
- Termeni tehnici sau termeni specifici unui domeniu
- Nume de brand (care ar trebui de obicei lăsate netraduse)
- Sintaxă de substituție precum
{{username}}sau%s
Pentru aplicații de producție, folosește acest instrument ca primă trecere, apoi lasă un vorbitor nativ să revizuiască conținutul specific domeniului sau destinat clienților.
Sfaturi Pro pentru Rezultate Mai Bune
Păstrează Șirurile Tehnice Separate Dacă JSON-ul tău amestecă text destinat utilizatorilor cu identificatori tehnici, ia în considerare separarea lor. De exemplu:
1{
2 "display": {"welcome": "Bun venit înapoi"},
3 "config": {"apiKey": "abc123", "endpoint": "https://api.example.com"}
4}
5Traduce separat obiectul display pentru a evita procesarea accidentală a valorilor din config.
Folosește Context în Șirurile Tale "Trimite" s-ar putea traduce diferit în funcție de context. "Trimite formular" sau "Trimite plată" oferă traducătorilor (umani sau automate) un context mai bun pentru o traducere precisă.
Testează cu Date Reale Înainte de a traduce întregul fișier i18n cu 500+ de chei, testează cu un eșantion mic care include toate tipurile de date - șiruri, numere, obiecte imbricate, array-uri.
Exemple de Cod
Traducerea JSON cu JavaScript
1// Exemplu de cum ați putea implementa funcționalitate similară în JavaScript
2function translateJsonStructure(jsonObj, targetLanguage) {
3 // Funcție ajutătoare pentru a traduce un șir de caractere
4 function translateString(str, lang) {
5 // Într-o implementare reală, aceasta ar apela un API de traducere
6 return `[${lang}] ${str}`;
7 }
8
9 // Funcție recursivă pentru a parcurge și traduce 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 // Returnează numere, boolean-uri etc. neschimbate
30 return node;
31 }
32
33 return processNode(jsonObj);
34}
35
36// Exemplu de utilizare
37const sourceJson = {
38 "product": {
39 "name": "Căști Wireless",
40 "description": "Căști wireless de înaltă calitate cu anulare a zgomotului",
41 "features": ["Bluetooth 5.0", "Durată de viață a bateriei de 40 de ore", "Design pliabil"],
42 "price": 99.99,
43 "inStock": true
44 }
45};
46
47const translatedJson = translateJsonStructure(sourceJson, "es");
48console.log(JSON.stringify(translatedJson, null, 2));
49Traducerea JSON cu Python
1import json
2
3def translate_json_structure(json_obj, target_language):
4 """
5 Traduce valorile șirurilor de caractere într-un obiect JSON păstrând structura.
6
7 Args:
8 json_obj: Obiectul JSON parsat
9 target_language: Codul limbii țintă (de ex., 'es', 'fr')
10
11 Returns:
12 Obiect JSON tradus cu structură păstrată
13 """
14 def translate_string(text, lang):
15 # Într-o implementare reală, aceasta ar apela un API de traducere
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 # Returnează numere, boolean-uri etc. neschimbate
35 return node
36
37 return process_node(json_obj)
38
39# Exemplu de utilizare
40source_json = {
41 "user": {
42 "name": "Jane Smith",
43 "bio": "Dezvoltator de software și contributor 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))
52Traducerea JSON cu PHP
1<?php
2/**
3 * Traduce structura JSON păstrând structura originală
4 *
5 * @param mixed $jsonObj Obiectul JSON parsat
6 * @param string $targetLanguage Codul limbii țintă
7 * @return mixed Obiectul JSON tradus
8 */
9function translateJsonStructure($jsonObj, $targetLanguage) {
10 // Funcție ajutătoare pentru a traduce un șir de caractere
11 function translateString($text, $lang) {
12 // Într-o implementare reală, aceasta ar apela un API de traducere
13 return "[$lang] $text";
14 }
15
16 // Funcție recursivă pentru a procesa fiecare nod
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 // Verifică dacă este un array asociativ (obiect) sau un array indexat
28 if (array_keys($node) !== range(0, count($node) - 1)) {
29 // Array asociativ (obiect)
30 $result = [];
31 foreach ($node as $key => $value) {
32 $result[$key] = processNode($value, $lang);
33 }
34 return $result;
35 } else {
36 // Array indexat
37 return array_map(function($item) use ($lang) {
38 return processNode($item, $lang);
39 }, $node);
40 }
41 }
42
43 // Returnează numere, boolean-uri etc. neschimbate
44 return $node;
45 }
46
47 return processNode($jsonObj, $targetLanguage);
48}
49
50// Exemplu de utilizare
51$sourceJson = [
52 "company" => [
53 "name" => "Global Tech Solutions",
54 "description" => "Companie inovatoare de dezvoltare software",
55 "founded" => 2010,
56 "services" => ["Dezvoltare Web", "Aplicații Mobile", "Soluții Cloud"],
57 "active" => true
58 ]
59];
60
61$translatedJson = translateJsonStructure($sourceJson, "de");
62echo json_encode($translatedJson, JSON_PRETTY_PRINT);
63?>
64Cazuri de utilizare din lumea reală
Fișiere i18n pentru aplicații web
Cele mai multe framework-uri moderne precum Next.js, React sau Vue stochează traducerile în format JSON. Atunci când trebuie să adăugați o nouă limbă în aplicație, vă confruntați cu o alegere: să copiați și să traduceți manual fiecare cheie (riscant), sau să utilizați acest instrument pentru a genera o primă schiță în câteva minute.
Un scenariu real: Aplicația dvs. are en.json cu peste 200 de chei de traducere în categorii imbricate - navigație, formulare, mesaje de eroare, tooltipuri. Aveți nevoie de versiuni în franceză și germană pentru următoarea sprintă.
Input (en.json):
1{
2 "common": {
3 "welcome": "Bun venit la aplicația noastră",
4 "login": "Autentificare",
5 "signup": "Înregistrare",
6 "errorMessages": {
7 "required": "Acest câmp este obligatoriu",
8 "invalidEmail": "Vă rugăm să introduceți o adresă de email validă"
9 }
10 }
11}
12Traduceți în franceză, obțineți fr.json cu aceeași structură. Codul dvs. continuă să facă referire la `t('common.errorMessages.required')' fără modificări.
Ceea ce am descoperit că funcționează bine: Generați traduceri cu acest instrument, apoi lăsați un membru al echipei bilingv să verifice termenii tehnici și etichetele butoanelor. Astfel se prind cazurile în care "Trimite" ar putea avea traduceri diferite pentru "Trimite formular" vs. "Trimite plată."
Localizarea răspunsurilor API
Construiți un API care deservește mai multe țări? Aveți nevoie de structuri de răspuns consecvente în mai multe limbi. Un API de notificări ar putea returna:
1{
2 "status": "succes",
3 "notification": {
4 "title": "Comandă expediată",
5 "message": "Comanda dvs. #12345 a fost expediată",
6 "priority": 1,
7 "timestamp": 1678901234
8 }
9}
10Aplicația mobilă parsează notification.title și notification.message. Dacă traducerea în franceză schimbă structura cheilor, aplicația se defectează pentru utilizatorii francezi.
Acest instrument asigură că notification.title rămâne notification.title în fiecare limbă, modificând doar valorile șirurilor. Codul client funcționează identic în toate localurile.
O limitare de reținut: Traducerea automată nu înțelege contextul domeniului. "Expediat" în contextul comerțului electronic s-ar putea traduce diferit decât în contextul logistic sau maritim. Pentru API-uri destinate clienților, revizuiți rezultatul înainte de implementare.
Traducerea conținutului pentru CMS fără interfață
Platformele CMS fără interfață precum Contentful sau Strapi exportă adesea conținutul ca JSON. Atunci când aveți 50 de articole de blog cu metadate structurate (autor, etichete, URL-uri imagini în prim-plan, date de publicare), doriți să traduceți corpul și titlul fără a atinge metadatele.
Un export tipic include atât șiruri de conținut, cât și configurație:
- Conținut: corp articol, titlu, rezumat
- Structură: ID-uri autor, căi imagini, slug-uri categorie, marcaje temporale
Traducerea manuală riscă să schimbe un slug de la technology la tecnología, întrerupând rutarea. Traducerea care păstrează structura gestionează doar câmpurile de conținut.
Fișiere de configurare pentru implementări multi-regionale
Implementare în mai multe regiuni? Fișierele dvs. de configurare ar putea necesita șiruri localizate, păstrând punctele finale, credențialele și indicatorii de caracteristici identici:
1{
2 "region": "eu-west",
3 "welcomeMessage": "Bun venit la serviciul nostru",
4 "endpoint": "https://api.eu.example.com",
5 "retryAttempts": 3,
6 "features": {"darkMode": true}
7}
8Traduceți welcomeMessage în germană, lăsând endpoint, retryAttempts și features neschimbate.
Compararea Abordărilor de Traducere
| Metodă | Potrivit pentru | Viteză | Acuratețe | Siguranța Structurii | Cost |
|---|---|---|---|---|---|
| Acest instrument | Generare rapidă fișiere i18n, prototipuri, instrumente interne | Instant | Bun pentru conținut standard | 100% păstrat | Gratuit |
| Google Translate (copiere/lipire) | Fraze individuale, text non-tehnic | Instant | Variabil | Distruge JSON | Gratuit |
| Traducere profesională | Conținut pentru clienți, documente juridice, marketing | Zile | Excelentă | Necesită lucru manual | $0.08-0.15/cuvânt |
| Sisteme de Management al Traducerilor (Lokalise, Phrase) | Aplicații enterprise, fluxuri de colaborare | Ore-Zile | Excelentă cu verificare | Suport JSON integrat | $$$+ |
Când să utilizezi acest instrument: Proiecte în stadiu incipient, generare de ciorne pentru revizuire, aplicații interne unde traducerea perfectă nu este critică.
Când să investești în traducere profesională: Conținut pentru clienți, text juridic/de conformitate, mesaje de brand sau atunci când nuanța culturală contează mai mult decât viteza.
Considerații Tehnice și Cazuri Limită
Ce Se Traduce (și Ce Nu)
Instrumentul utilizează verificarea tipului pentru a determina ce să traducă:
✅ Tradus:
- Valori de tip șir:
"Welcome"→"Bun venit" - Șiruri în array-uri:
["Hello", "World"]→["Bună", "Lume"] - Șiruri la orice nivel de înmânare
❌ Netradus:
- Numere:
42,3.14,-10rămân neschimbate - Valori booleene:
trueșifalserămân la fel - Null:
nullrămânenull - Chei de obiect:
"userName"ca și cheie rămâne"userName" - Șiruri goale:
""rămâne""
Gestionarea Caracterelor Speciale
Unicode și Emoji Instrumentul gestionează UTF-8 corespunzător, astfel încât emoji și caracterele non-latine funcționează bine:
1{"greeting": "👋 Hello"}
2Se traduce în română astfel:
1{"greeting": "👋 Bună"}
2Secvențe de Escape
Secvențele de escape JSON (\n, \t, \") sunt păstrate:
1{"message": "Line 1\nLine 2"}
2\n rămâne intact în traducere.
Substituenți
Iată o potențială problemă: Dacă șirurile conțin substituenți precum {username} sau %s, aceștia ar putea fi traduși sau reordonați. În limbi precum arabă sau ebraică cu text de la dreapta la stânga, pozițiile substituenților se pot schimba. Verificați-le cu atenție.
Performanța JSON Mare
Instrumentul web gestionează fișiere i18n tipice (sub 500KB) fără probleme. Pentru seturi de date mai mari:
- 500KB - 2MB: Funcționează, dar poate fi lent în browser
- Peste 2MB: Luați în considerare împărțirea în segmente logice (de exemplu, fișiere separate pe caracteristici sau secțiuni)
Memoria browserului este factorul limitativ, nu algoritmul în sine.
Întrebări frecvente
Cum diferă aceasta de lipirea JSON-ului în Google Translate?
Google Translate tratează JSON-ul ca text simplu, ceea ce înseamnă că încearcă să traducă totul - inclusiv cheile, caracterele de sintaxă și valorile numerice. Veți obține o ieșire de genul:
1{ "nom d'utilisateur": "Jean Dupont", "âge": "vingt-cinq" }
2Observați cum "username" a devenit "nom d'utilisateur" și numărul 25 a devenit șirul "vingt-cinq"? Codul dvs. se strică imediat.
Acest instrument înțelege structura JSON și traduce doar valorile șirurilor, lăsând cheile și alte tipuri de date intacte.
Va gestiona acesta JSON-ul cu mai multe niveluri de încuibărire cu array-uri?
Da. Algoritmul recursiv procesează fiecare nivel de încuibărire:
1{
2 "users": [
3 {"name": "John", "roles": ["admin", "editor"]},
4 {"name": "Jane", "roles": ["viewer"]}
5 ]
6}
7Traduce toate valorile șirurilor ("John", "Jane", "admin", "editor", "viewer") menținând structura exactă.
Și dacă JSON-ul meu conține atât conținut în engleză, cât și deja tradus?
Instrumentul traduce fiecare șir pe care îl găsește, chiar și dacă unele sunt deja în limba țintă. Dacă adăugați noi chei într-un fișier de traducere existent, traduceți doar noua secțiune separat, apoi îmbinați rezultatele.
Pot folosi acest instrument pentru fișiere i18next sau react-intl?
Absolut. Structura de ieșire se potrivește cu ceea ce aceste framework-uri așteaptă. Un fișier JSON i18next precum:
1{"translation": {"welcome": "Hello", "goodbye": "Goodbye"}}
2Devine:
1{"translation": {"welcome": "Hola", "goodbye": "Adiós"}}
2Apelurile dvs. t('translation.welcome') rămân neschimbate.
Cât de precisă este traducerea automată pentru conținutul tehnic?
Depinde de context:
- Text UI general: "Save", "Cancel", "Submit" → De obicei precise
- Jargon tehnic: "webhook", "OAuth2", "idempotent" → Pot fi greșit traduse sau lăsate neschimbate
- Termeni specifici domeniului: "patient record" (medical) vs "patient" (răbdare) → Contextul este adesea ratat
Pentru aplicații de producție, folosiți acest instrument ca primă trecere, apoi lăsați pe cineva să revizuiască termenii tehnici și specifici domeniului.
Dar pentru limbi cu seturi de caractere diferite (chineză, arabă, rusă)?
Instrumentul gestionează Unicode corespunzător, astfel încât toate seturile de caractere funcționează. Un lucru la care să fiți atenți: araba și ebraica sunt de la dreapta la stânga (RTL), ceea ce poate afecta modul în care apar substituenții în șirurile traduse. Structura JSON rămâne corectă, dar revizuiți textul tradus pentru lizibilitate.
Va păstra formatarea mea (indentare, linii noi)?
Ieșirea este un JSON valid, dar formatarea (spațiu alb, indentare) poate diferi de intrarea dvs. Dacă aveți nevoie de o anumită formatare, rulați ieșirea printr-un formator JSON cu setările preferate.
Pot traduce valori de configurare precum URL-uri sau chei API?
Instrumentul traduce toate șirurile, inclusiv URL-uri și valori de configurare. Pentru a preveni acest lucru:
- Separați JSON-ul în conținut pentru utilizator și configurație
- Traduceți doar secțiunea de conținut
- Păstrați configurația netradusă
Mai bine, structurați-vă fișierele pentru a separa conținutul traducibil de valorile tehnice de la bun început.
Este gratuit? Există limite de rată?
Instrumentul web este gratuit pentru utilizarea tipică. Traducerea de volum foarte mare (sute de fișiere pe minut) poate atinge limitele de rată ale serviciului de traducere subiacent. Pentru cele mai multe fluxuri de lucru de dezvoltare, nu veți întâlni limite.
Referințe și Lectură Suplimentară
Pentru o înțelegere mai profundă a structurii JSON, standardelor de internaționalizare și celor mai bune practici:
-
ECMA-404: Sintaxa pentru Schimbul de Date JSON - Specificația oficială JSON de la Ecma International care definește formatul standard: ecma-international.org/publications-and-standards/standards/ecma-404/
-
MDN Web Docs: Lucrul cu JSON - Ghidul cuprinzător Mozilla pentru parsarea, stringificarea și structura JSON: developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON
-
Activitatea de Internaționalizare W3C (i18n) - Standarde și bune practici pentru internaționalizarea web: w3.org/International/
-
RFC 8259: Formatul pentru Schimbul de Date JSON - Specificația IETF pentru sintaxa și semantica JSON: datatracker.ietf.org/doc/html/rfc8259
Începeți Traducerea Fișierelor JSON
Aveți nevoie să generați rapid fișiere de traducere pentru aplicația dvs. multilingvă? Inserați JSON-ul, selectați o limbă țintă și obțineți traduceri care păstrează structura în mod instantaneu. Funcționează cu i18next, react-intl, vue-i18n și orice cadru care necesită o structură JSON consecventă între limbi.
Începeți traducerea acum: