JSON
उन प्रोजेक्ट के लिए डिज़ाइन किया गया है जो UI कॉपी को नेस्टेड JSON फ़ाइलों में प्रति लोकेल (उदाहरण के लिए src/i18n/en/translation.json) में रखते हैं, न कि स्रोत में t("…") में। CLI उन फ़ाइलों में स्ट्रिंग मानों को चलता है, उन्हें सक्रिय LLM प्रदाता के माध्यम से अनुवादित करता है, और json[].outputPathTemplate का उपयोग करके प्रति-लोकेल आउटपुट लिखता है। यह translate-docs और translate-svg (cacheDir) के समान SQLite कैश का उपयोग करता है।
यह पाइपलाइन नहीं चलता extract — कोई strings.json कैटलॉग नहीं है। इसे features.translateJson और शीर्ष-स्तरीय json[] में एक या अधिक प्रविष्टियों के साथ सक्षम करें।
प्रति-स्थानीय मॉडल ओवरराइड
translate-json मॉडल को प्रति लक्ष्य लोकेल हल करता है: कॉन्फ़िगर होने पर पहले localeModels(locale), फिर translationModels। इसका उपयोग नेस्टेड JSON बंडलों के लिए करें जहाँ कुछ लोकेल समर्पित मॉडल से लाभान्वित होते हैं — उदाहरण के लिए zh-Hans / zh-Hant थीम फ़ाइलें। प्रदाता और मॉडल देखें।
चरण 1: नेस्टेड JSON के लिए प्रारंभ करें
ai-i18n-tools init -t ui-json-bundles [-P <provider>]वह टेम्पलेट features.translateJson: true सेट करता है, UI एक्सट्रैक्शन और दस्तावेज़ अनुवाद को अक्षम करता है, और आउटपुट src/i18n/{llocale}/translation.json के साथ src/i18n/en/translation.json की ओर इशारा करते हुए एक एकल json[] ब्लॉक को स्केफ़ोल्ड करता है। इसमें एक डिफ़ॉल्ट provider / providers ब्लॉक भी शामिल है (openrouter जब तक आप -P <provider> पास नहीं करते हैं) — translate-json या sync चलाने से पहले मिलान करने वाली API कुंजी सेट करें (या स्थानीय ओलामा का उपयोग करें); प्रदाता और API कुंजी देखें। अपने रेपो लेआउट के लिए sourceLocale, targetLocales, contentPaths, और outputPathTemplate संपादित करें।
चरण 2: json[] कॉन्फ़िगर करें
प्रत्येक json[] ब्लॉक एक पाइपलाइन का वर्णन करता है:
contentPaths— एक या अधिक.jsonफ़ाइलें, निर्देशिकाएँ, या ग्लोब (उदाहरण के लिए"src/i18n/en/translation.json"या"src/i18n/en/overrides/*.json")। पथ प्रोजेक्ट रूट से हल किए जाते हैं।outputPathTemplate— आवश्यक। प्रत्येक लक्ष्य लोकेल फ़ाइल कहाँ लिखनी है। प्लेसहोल्डर:{locale},{LOCALE},{llocale}(लोअरकेस लोकेल, एस्ट्रो रूट फ़ोल्डरों के लिए उपयोगी),{stem},{basename},{extension},{relativeToSourceRoot}।targetLocales(वैकल्पिक) — केवल इस ब्लॉक के लिए उपसमूह; अन्यथा रूटtargetLocalesलागू होता है।keyPolicy— कौन सी JSON कुंजियाँ अनुवाद योग्य गद्य बनाम स्थिर पहचानकर्ता रखती हैं (नीचे देखें)।description(वैकल्पिक) — CLI हेडर औरstatusआउटपुट में दिखाया गया है।
उदाहरण (कई स्रोत फ़ाइलें, लोअरकेस लोकेल फ़ोल्डर):
{
"sourceLocale": "en",
"targetLocales": ["de", "fr", "pt-BR"],
"features": {
"translateJson": true
},
"cacheDir": ".translation-cache",
"json": [
{
"description": "App UI bundle",
"contentPaths": [
"src/i18n/en/translation.json",
"src/i18n/en/overrides/*.json"
],
"outputPathTemplate": "src/i18n/{llocale}/{basename}",
"keyPolicy": {
"mode": "denylist",
"skipKeys": ["id", "slug", "href", "url", "key", "code"],
"translateKeys": []
}
}
]
}keyPolicy
mode | व्यवहार |
|---|---|
allowlist | केवल translateKeys (डॉट पाथ; मिनिमैच ग्लोब) से मेल खाने वाली कुंजियाँ अनुवादित होती हैं। |
denylist | skipKeys से मेल खाने वाली कुंजियों को छोड़कर सभी स्ट्रिंग मानों का अनुवाद करें। |
both | पहले translateKeys लागू करें, फिर skipKeys से मिलान हटाएँ। |
पथ डॉट नोटेशन (nav.home.label) का उपयोग करते हैं। slug जैसा एक नंगे नाम किसी भी गहराई पर अंतिम कुंजी खंड से मेल खाता है।
चरण 3: JSON बंडलों का अनुवाद करें
ai-i18n-tools translate-jsonवैकल्पिक फ़्लैग (translate-docs जैसे ही विचार): लक्ष्यों के सबसेट के लिए -l / --locale, फ़ाइलों को सीमित करने के लिए -p / --path, --dry-run, --force (मिलान की गई फ़ाइलों के लिए फ़ाइल ट्रैकिंग और सेगमेंट कैश साफ़ करें), --force-update (फ़ाइल हैश मिलान होने पर फिर से प्रोसेस करें; सेगमेंट कैश अभी भी लागू होता है), --check-cache (देशी स्क्रिप्ट लागू करने वाले लोकेल के लिए कैश्ड सेगमेंट को फिर से मान्य करें, भले ही फ़ाइल ट्रैकिंग मेल खाती हो), -b / --batch-concurrency, --prompt-format (xml | json-array | json-object)।
केवल JSON प्रोजेक्ट चला सकते हैं:
ai-i18n-tools sync --no-ui --no-svg --no-docsजब UI या दस्तावेज़ भी सक्षम होते हैं, तो sync translate-docs के बाद translate-json चलाता है (जब तक --no-json नहीं)। --no-json के साथ JSON छोड़ें।
प्रति फ़ाइल और लोकेल कवरेज की जाँच करें:
ai-i18n-tools statusजब translateJson चालू होता है, तो status एक json[] अनुभाग प्रिंट करता है (✓ अप टू डेट, ● बासी या गुम)।
JSON बनाम अन्य पाइपलाइनें
| स्थिति | उपयोग करें |
|---|---|
JS/TS/Astro में t("…") / i18n.t("…") में UI स्ट्रिंग | UI स्ट्रिंग — extract + translate-ui |
Docusaurus write-translations कैटलॉग ({ "key": { "message": "…", "description": "…" } }) | दस्तावेज़ — docs[].docusaurusCatalogDir + translate-docs, नहीं json[] |
| VitePress थीम/नेविगेशन/साइडबार स्ट्रिंग | दस्तावेज़ — docsOutput.vitepressThemeCatalog + translate-docs; json[] का उपयोग न करें — VitePress एकीकरण देखें |
Nextra _meta.ts लेबल और थीम डिक्शनरी .ts | दस्तावेज़ — translate-docs (style: "nextra" होने पर ऑटो _meta, वैकल्पिक nextraDictionaryPath); json[] का उपयोग न करें — Nextra एकीकरण देखें |
Fumadocs meta.json लेबल और UI ओवरराइड कैटलॉग | दस्तावेज़ — translate-docs (style: "fumadocs" होने पर ऑटो meta.json, वैकल्पिक fumadocsUiCatalog); json[] का उपयोग न करें — Fumadocs एकीकरण देखें |
स्टैंडअलोन नेस्टेड लोकेल JSON (ZenBrowser-शैली translation.json ट्री) | JSON — json[] + translate-json |
i18next नेमस्पेस फ़ाइलें (public/locales/en/common.json, {{name}} टोकन, key_one / key_other प्रत्यय) | JSON — json[] + translate-json (i18next नेमस्पेस फ़ाइलें देखें) |
इंटलेयर *.content.ts डिक्शनरी + useIntlayer | इंटलेयर से माइग्रेट करना — migrate-intlayer, फिर UI स्ट्रिंग |
<text> / <title> / <desc> के साथ सचित्र .svg फ़ाइलें | features.translateSVG + svg + translate-svg (वैकल्पिक; तीन मुख्य पाइपलाइनों में से एक नहीं) |
फ़ील्ड संदर्भ: कॉन्फ़िगरेशन संदर्भ में json। सफाई के लिए कैश कुंजियाँ file_tracking में json-block:{blockIndex}:{projectRelPath} का उपयोग करती हैं।
i18next नेमस्पेस फ़ाइलें
जेसन पाइपलाइन में टाइपिकल i18next कुंजी/मान स्थान फ़ाइलें शामिल हैं: नेस्टेड वस्तुएं, स्ट्रिंग सरणियां, {{name}} मानों में इंटरपोलेशन, और स्वतंत्र बहुवचन प्रत्यय कुंजियां (welcome_one, welcome_other)। यह नहीं t("some.key") कॉल साइट्स को पुनः लिखता — वे कुंजी-आधारित रहते हैं। एक परियोजना को ai-i18n-tools के अंग्रेजी स्रोत-स्ट्रिंग t() स्कीमा पर ले जाने के लिए, कॉल साइट्स को t("English text") (या इंटलेयर .content.ts के स्रोत के साथ migrate-intlayer चलाएं) में बदलें।
उदाहरण (public/locales/en/ के तहत स्रोत अंग्रेजी नेमस्पेस):
{
"sourceLocale": "en",
"targetLocales": ["de", "fr", "pt-BR"],
"features": { "translateJson": true },
"json": [
{
"description": "i18next namespaces",
"contentPaths": ["public/locales/en/*.json"],
"outputPathTemplate": "public/locales/{locale}/{basename}"
}
]
}key_one / key_other / key_zero (और अन्य CLDR प्रत्यय) को अलग-अलग पत्तियों के रूप में अनुवादित किया जाता है। i18next के लिए प्रत्यय द्वारा बहुवचन को हल करते रहने के लिए यह पर्याप्त है; पाइपलाइन उन्हें एक ही कैटलॉग पंक्ति में पुनर्गठित नहीं करती है।