अंतर्राष्ट्रीयकरण
लोकेल-अवेयर रूटिंग, प्रति-भाषा नेविगेशन, अनूदित UI और SEO के साथ अपने डॉक्स को कई भाषाओं में परोसें — सब कुछ कन्वेंशन-फ़र्स्ट।
Blume एक ही प्रोजेक्ट को कई भाषाओं में परोसता है। अनूदित फ़ाइलें सही जगह पर रखें और Blume आपके लिए रूटिंग, भाषा स्विचर, प्रति-लोकेल नेविगेशन और SEO जोड़ देता है — रखरखाव के लिए कोई अलग रूटिंग लेयर नहीं है। यह ऑप्ट-इन है: i18n ब्लॉक के बिना, आपकी साइट पहले की तरह ही एकभाषी बनी रहती है।
इसे सक्षम करें
अपने लोकेल और उनमें से कौन-सा डिफ़ॉल्ट है, यह सूचीबद्ध करते हुए एक i18n ब्लॉक जोड़ें:
i18n: {
defaultLocale: "en",
locales: [
{ code: "en", label: "English" },
{ code: "fr", label: "Français" },
{ code: "ar", label: "العربية", dir: "rtl" },
],
}
प्रत्येक लोकेल में एक code (URL में उपयोग किया जाता है), एक label (भाषा स्विचर में दिखाया जाता है), और दाएँ-से-बाएँ लिपियों के लिए एक वैकल्पिक dir होता है (डिफ़ॉल्ट रूप से "ltr")। एक वैकल्पिक style blume translate को उस लोकेल के लिए स्वतंत्र-रूप मार्गदर्शन देता है — रजिस्टर, बोली, शब्दावली, जैसे "Brazilian Portuguese, informal você" — ताकि यह चुनाव एजेंट पर छोड़ने के बजाय पहले ही अनुवाद से तय हो जाए।
अनूदित सामग्री व्यवस्थित करें
डिफ़ॉल्ट लोकेल आपके कंटेंट रूट में रहता है। हर दूसरा लोकेल अपने code के नाम वाला एक टॉप-लेवल फ़ोल्डर होता है, जो डिफ़ॉल्ट संरचना को प्रतिबिंबित करता है:
docs/
index.mdx -> /
guides/quickstart.mdx -> /guides/quickstart
fr/
index.mdx -> /fr
guides/quickstart.mdx -> /fr/guides/quickstart
ar/
index.mdx -> /ar
| फ़ाइल | रूट |
|---|---|
docs/index.mdx |
/ |
docs/guides/quickstart.mdx |
/guides/quickstart |
docs/fr/guides/quickstart.mdx |
/fr/guides/quickstart |
आप केवल वही फ़ाइलें अनूदित करते हैं जो आप चाहते हैं — बाकी सब अपने आप फ़ॉलबैक हो जाता है (फ़ॉलबैक देखें)।
फ़ाइलनाम प्रत्यय
अनुवादों को मूल के पास ही रखना पसंद करते हैं? parser: "dot" सेट करें और फ़ोल्डर उपयोग करने के बजाय फ़ाइलों को लोकेल प्रत्यय के साथ नाम दें:
docs/
guides/quickstart.mdx -> /guides/quickstart (default)
guides/quickstart.fr.mdx -> /fr/guides/quickstart (French)
विरल अनुवादों के लिए अच्छा — पूरे ट्री को प्रतिबिंबित किए बिना उन कुछ पृष्ठों को साथ रखें जिनका आपने अनुवाद किया है।
साझा फ़ाइलें
ऐसी सामग्री के लिए जो हर भाषा में एक जैसी है — एक चेंजलॉग, एक स्टेटस पेज — एक $ मार्कर जोड़ें ताकि एक ही फ़ाइल बिना दोहराव के सभी लोकेल को परोसे:
docs/changelog.$.mdx -> /changelog and /fr/changelog (same content)
docs/guides/meta.$.ts (folder meta applied to every locale)
किसी लोकेल-विशिष्ट meta.ts उस भाषा के लिए साझा वाले को अब भी ओवरराइड करती है।
डिफ़ॉल्ट-लोकेल URL
डिफ़ॉल्ट रूप से डिफ़ॉल्ट लोकेल का कोई URL उपसर्ग नहीं होता (/, /guides/quickstart) जबकि अन्य लोकेल उपसर्ग सहित होते हैं (/fr/…)। इससे आपकी प्राथमिक भाषा के URL साफ़ रहते हैं। हर लोकेल को, डिफ़ॉल्ट सहित, उपसर्ग देने के लिए:
i18n: {
// …
hideDefaultLocalePrefix: false, // /en/…, /fr/…
}
प्रति-लोकेल नेविगेशन
हर भाषा को उस लोकेल की फ़ाइलों से बना अपना खुद का साइडबार मिलता है — इसलिए अनुवाद संरचना, क्रम या लेबल में भिन्न हो सकते हैं। फ़ोल्डर meta.ts फ़ाइलें भी प्रति लोकेल हल होती हैं: डिफ़ॉल्ट dir पार्सर के तहत, फ़्रेंच समूह को स्वतंत्र रूप से क्रमबद्ध करने के लिए fr/guides/ के अंदर एक meta.ts रखें। dot पार्सर के तहत अनुवाद मूल के पास ही रहते हैं, इसलिए किसी फ़ोल्डर की meta.ts हर लोकेल पर लागू होती है। नेविगेशन के बारे में बाकी सब कुछ हर भाषा के लिए एक जैसा ही काम करता है।
हेडर टैब कॉन्फ़िगर किए जाते हैं, सामग्री से व्युत्पन्न नहीं, इसलिए उनके लेबल blume.config.ts में स्थानीयकृत होते हैं: एक टैब label सादे-स्ट्रिंग रूप के साथ-साथ एक प्रति-लोकेल मैप ({ en: "Docs", fr: "Documentation" }) भी स्वीकार करता है, और जिन लोकेल को आपने नहीं भरा है उनके लिए डिफ़ॉल्ट लोकेल की प्रविष्टि पर फ़ॉलबैक करता है। देखें टैब।
फ़ॉलबैक
जब कोई पृष्ठ अभी तक अनूदित नहीं होता, तो Blume स्थानीयकृत URL पर फ़ॉलबैक लोकेल की सामग्री रेंडर करता है — इसलिए लिंक काम करता है, पृष्ठ पूरी तरह पूर्व-रेंडर होता है, और सर्च इंजन किसी मृत छोर पर नहीं भेजे जाते। फ़ॉलबैक डिफ़ॉल्ट रूप से आपका defaultLocale होता है:
i18n: {
// …
fallbackLocale: "en", // default; set to null to 404 instead
}
फ़ॉलबैक पृष्ठ खोज इंडेक्स से बाहर रखे जाते हैं और hreflang में असली अनुवाद के रूप में प्रचारित नहीं किए जाते, इसलिए अअनूदित सामग्री रैंकिंग के लिए प्रतिस्पर्धा नहीं करती। वे उस लोकेल के साइडबार में फिर भी दिखते हैं, ताकि नेविगेशन पूरा बना रहे — एक पाठक किसी भी भाषा में हर पृष्ठ तक पहुँच सकता है।
एजेंट से अनुवाद करना
आपको लोकेल हाथ से भरने की ज़रूरत नहीं है। blume translate हर उस पृष्ठ को ढूँढता है जो प्रत्येक लोकेल में गायब या पुराना है और उसे एक लोकल एजेंट CLI (Claude Code या Codex) से अनूदित करता है:
blume translate --claude
Blume हर परिणाम की संरचना — फ़्रंटमैटर, कोड फ़ेंस, लिंक — को मान्य करता है और फ़ाइलें खुद लिखता है; एजेंट केवल टेक्स्ट का अनुवाद करता है। एक कमिट किया गया लेजर (blume.translations.json) ट्रैक करता है कि हर अनुवाद किस स्रोत रिवीज़न से आया था, इसलिए दोबारा चलाने पर केवल वही छुआ जाता है जो बदला है, और जो अनुवाद आपने हाथ से लिखे हैं उन्हें ज्यों-का-त्यों अपनाया जाता है, कभी ओवरराइट नहीं किया जाता। CI में, blume translate --check तब विफल होता है जब कोई स्रोत पृष्ठ अपने अनुवादों से आगे खिसक गया हो।
भाषा स्विचर
जब i18n चालू होता है, तो हेडर में अपने आप एक भाषा स्विचर दिखाई देता है, जो आपके locales से बनाया जाता है। हर पृष्ठ के लिए यह हर भाषा में मेल खाते अनुवाद को लिंक करता है; जहाँ कोई अनुवाद गायब है वहाँ यह फ़ॉलबैक पृष्ठ को लिंक करता है और उसे अअनूदित के रूप में चिह्नित करता है। कॉन्फ़िगर करने के लिए कुछ नहीं है।
अनूदित UI
Blume अपने खुद के इंटरफ़ेस क्रोम — “इस पृष्ठ पर”, “खोजें”, “GitHub पर संपादित करें”, और बाकी — के लिए अंतर्निहित अनुवाद के साथ आता है, इसलिए जिस लोकेल के लिए अंतर्निहित पैक है उसे बिना किसी अतिरिक्त काम के अनूदित UI मिलता है। आप केवल अपनी सामग्री का अनुवाद करते हैं।
पैक 30 से अधिक भाषाओं के लिए उपलब्ध हैं — अरबी, बंगाली, बल्गेरियाई, कैटलन, चीनी (सरलीकृत और पारंपरिक), क्रोएशियाई, चेक, डेनिश, डच, फ़िनिश, फ़्रेंच, जर्मन, ग्रीक, हिब्रू, हिन्दी, हंगेरियन, इंडोनेशियाई, इतालवी, जापानी, कोरियाई, नॉर्वेजियन, फ़ारसी, पोलिश, पुर्तगाली (और ब्राज़ीली पुर्तगाली), रोमानियाई, रूसी, सर्बियाई, स्लोवाक, स्पेनिश, स्वीडिश, थाई, तुर्की, यूक्रेनी, और वियतनामी। ये समुदाय द्वारा अनुरक्षित हैं — कोई लोकेल जोड़ने या किसी अनुवाद को बेहतर करने के लिए एक PR खोलें।
गायब या न भेजी गई स्ट्रिंग्स डिफ़ॉल्ट लोकेल पर, फिर अंग्रेज़ी पर फ़ॉलबैक करती हैं। किसी स्ट्रिंग को ओवरराइड करने या अपनी खुद की भाषा देने के लिए, लोकेल द्वारा कीयुक्त i18n.ui सेट करें:
i18n: {
// …
ui: {
fr: {
search: { button: "Rechercher", placeholder: "Rechercher…" },
page: { previous: "Précédent", next: "Suivant" },
},
},
}
SEO
स्थानीयकृत SEO आपके लिए संभाला जाता है — प्रति पृष्ठ कोई मेटाडेटा लिखने की ज़रूरत नहीं:
<html lang>औरdirसक्रिय लोकेल से सेट किए जाते हैं।hreflangवैकल्पिक लिंक किसी पृष्ठ के हर असली अनुवाद को जोड़ते हैं, साथ ही डिफ़ॉल्ट लोकेल की ओर इशारा करने वाला एकx-defaultभी।- कैनोनिकल URL लोकेल-सही होते हैं, और JSON-LD
inLanguageले जाता है।
deployment.site सेट करें ताकि इन्हें निरपेक्ष URL के रूप में उत्सर्जित किया जा सके।
खोज
खोज सक्रिय भाषा तक सीमित होती है: किसी /fr/… पृष्ठ पर डायलॉग फ़्रेंच परिणाम लौटाता है, साथ में एक सभी भाषाएँ टॉगल होता है जिससे एक साथ हर लोकेल में खोजा जा सके। डिफ़ॉल्ट (Orama) और FlexSearch इंडेक्स ब्राउज़र में फ़िल्टर करते हैं; होस्टेड प्रदाता हर रिकॉर्ड पर एक locale फ़ैसेट रखते हैं।
दाएँ-से-बाएँ
किसी लोकेल पर dir: "rtl" सेट करें और Blume पूरे इंटरफ़ेस को प्रतिबिंबित कर देता है — साइडबार, हेडर, विषय-सूची, पेजिनेशन, खोज और मेन्यू — और <html dir> को उससे मेल खाने के लिए सेट करता है। दो चीज़ें जानबूझकर बाएँ-से-दाएँ ही रहती हैं: कोड ब्लॉक (कोड किसी भी भाषा में LTR पढ़ा जाता है) और फ़ॉलबैक सामग्री — एक अअनूदित पृष्ठ उसी भाषा की दिशा बनाए रखता है जिसमें वह वास्तव में लिखा गया है, ताकि RTL लोकेल के तहत दिखाई गई अंग्रेज़ी भी सही पढ़ी जाए जबकि आसपास का क्रोम प्रतिबिंबित हो।