हम translation infrastructure बेचते हैं। हमारी अपनी marketing site पाँच locales में ship होती है। जब हमने वास्तव में serve किए जाने वाले JSON का audit किया, तो पहली समस्या tone की नहीं थी। German compound के भीतर एक गलत character था, जो पहली नज़र में लगभग सही दिखता था—जहाँ Latin होना चाहिए था, वहाँ Cyrillic letter था। Code point देखने पर ही पता चलता था कि शब्द glossary जैसा क्यों लग रहा है। अगर हमारी अपनी translations टूटी हुई हैं, तो कोई product पर भरोसा क्यों करे?


पाँच ऐसी विफलताएँ जिन्हें कभी ship नहीं होना चाहिए था

German UI copy में Cyrillic। एक glossary line में mixed script आ गई थी: suffix Latin “ar” जैसा दिखता था, लेकिन एक letter Latin नहीं था। Native readers इसे तुरंत पहचान लेते हैं। Spell check नहीं पहचानता।

**The string:** …"Übersetzungsglossар"… (Cyrillic "р" in the compound)
**What it should be:** "Übersetzungsglossar"
**Why it matters:** It reads as corrupted text. It signals automated output nobody proofread in the target language.

German और French में register का उलट जाना। यह site developers के लिए है। इसकी voice वैसी होनी चाहिए जैसी engineers product UI में वास्तव में लिखते हैं। हमने de और fr में हर जगह formal address ship कर दिया था। यह कोई छोटी-मोटी कमी नहीं है। इसका मतलब है कि default translation path ने कुछ edge strings के लिए नहीं, बल्कि पूरे surface area के लिए गलत register चुन लिया।

**The string:** "… wie Sie …" / "vous pouvez …"
**What it should be:** informal "du" / "tu" voice for product and FAQ
**Why it matters:** Every screen sounded like enterprise procurement, not like the product we sell to vibe coders.

गढ़ी हुई currency। English में dollars लिखा था। German में monthly label के साथ euros दिख रहे थे। हम हर देश के लिए अलग price charge नहीं करते। JSON से ऐसा लग रहा था जैसे करते हों।

**The string:** "20 €/Monat" (and similar) next to "$20/mo" elsewhere
**What it should be:** one USD amount, formatted per locale via code (e.g. Intl), not hand-invented symbols in JSON
**Why it matters:** Pricing trust. Mixed symbols read as either a bug or a hidden price change.

“Coding” के लिए false friends। तीन भाषाओं में “coding environment” का translation encoding वाले शब्द से किया गया। FAQ लोगों से कह रहा था कि वे अपने “encoding environment” में रह सकते हैं। Product को किसी भी अर्थ में पढ़ें, यह गलत है।

**The string:** Spanish "codificación", Italian "codifica", German "Codierung" in the wrong sense
**What it should be:** development environment wording (e.g. entorno de desarrollo / ambiente di sviluppo / Entwicklungsumgebung)
**Why it matters:** It is a semantic bug. It reads like we do not understand our own domain.

“Ship” को डाक से सामान भेजना समझ लिया गया। German और Italian strings में ऐसे verbs इस्तेमाल हुए जिन्हें लोग parcels से जोड़ते हैं, software release करने से नहीं। English source वही था, लेकिन lexical field गलत था। यह किसी सोच-समझकर चुनी गई style का परिणाम नहीं, बल्कि बिना सुधार के machine suggestions स्वीकार करने का नतीजा था।

**The string:** parcel-shipping verbs applied to "ship your app"
**What it should be:** release / deploy / deliver software wording
**Why it matters:** Developer trust. One wrong verb tells the reader the copy was never read by a developer in that language.

Auto-generated translations drift क्यों करती हैं

यह translators के खिलाफ कोई शिकायत नहीं है। Site के बड़े हिस्से पर हर string के लिए human review कभी हुआ ही नहीं। General-purpose models formal register को default मानते हैं, क्योंकि open web पर bulk bilingual text अक्सर उसी शैली में होता है। जब objective “plausible characters” हो, “correct script” नहीं, तो वे scripts के बीच दिखने में मिलते-जुलते अक्षरों को भी मिला देते हैं। Glossary न हो तो पास-पास की keys में word choice drift करती है। Currency rule न हो तो model ऐसे local symbols गढ़ देता है जो देखने में विश्वसनीय लगते हैं। Domain checks न हों तो encoding और coding आपस में टकरा जाते हैं। यही वह failure mode है जिसे हम कम करने के लिए मौजूद हैं। फिर भी हमारी अपनी site पर यह तब तक ship होता रहा, जब तक हमने customer की तरह audit नहीं किया।


Cleanup के बाद हमने क्या बनाया

One-time copy edits कोई system नहीं हैं। टिकाऊ हिस्सा एक छोटी policy file है, जिसे पूरी team और भविष्य के auto-translation batches कानून की तरह मान सकते हैं, साथ ही एक verification script है जिसे merge से पहले चलाया जा सकता है।

Policy। i18n/LOCALIZATION_POLICY.md हर locale के लिए register, JSON में USD-only pricing, loanword से जुड़े निर्णय (जैसे vibe coders को English में रखना), coding बनाम encoding के false-friend rules और inline literals की typography दर्ज करती है। इसे जानबूझकर छोटा रखा गया है। अगर कोई rule लिखा हुआ नहीं है, तो model उसे लगातार एक ही तरह से infer नहीं करेगा।

## Currency
- USD only in all locales. Use {monthlyPrice} and {overageRate} placeholders…
## False friends
- Coding environment is not encoding: Spanish desarrollo / Italian sviluppo / German Entwicklung…

Verification। scripts/verify-translations.sh Latin locale files में Cyrillic, euro symbols, पुराने false-friend substrings और messages/en.json के मुकाबले pricing placeholders की parity के लिए grep करती है। ripgrep installed होने पर optional checks उसका इस्तेमाल करते हैं। Script न्यूनतम सुरक्षा-स्तर है, अंतिम सीमा नहीं। इसका उद्देश्य यह सुनिश्चित करना है कि “हमने इसे एक बार ठीक कर दिया” अगली bulk edit में चुपचाप फिर खराब न हो जाए।

और JSON guesses नहीं, code। हमने surfaced USD amounts को lib/pricing.ts में centralize किया और formatUsdPerMonth तथा formatUsdOveragePer1k को homepage और FAQ से wire किया, ताकि locale files अपने-आप numerals न गढ़ें। Bug सिर्फ गलत strings का नहीं था। असली bug यह था कि scale से पहले policy और formatter मौजूद नहीं थे।


अपने AI-assisted i18n के लिए आप क्या अपना सकते हैं

अगर आप model से translations generate करते हैं, तो register सबसे अधिक variance वाला knob है। और भाषाएँ जोड़ने से पहले इसे हर locale के लिए lock करें। Currency को prose में नहीं, code में lock करें। Brand tokens और developer jargon को lock करें। ऐसे automated checks चलाएँ जो batch को fail कर दें, बजाय इसके कि “बाद में देखकर ठीक कर लेंगे।” बाद में कभी भी पहली pass जैसी quality bar पर काम नहीं होता।

इस audit के पीछे की architecture story के लिए How to Localize an AI-Generated App पढ़ें और tooling comparison के लिए globalize.now vs Lokalise vs Crowdin देखें। अगर आप अपने repo में i18n wire कर रहे हैं और यही guardrails चाहते हैं, तो globalize.now पर repository connect करें—conversion app में एक बार चलती है; npx skills add globalize-now/globalize-skills उन skills के लिए हमारा documented entry point है जो आपके code के पास install होती हैं। ईमानदार निष्कर्ष यही है: हमने अपना ही dog food खाया, ugly bugs खोजीं, policy लिखी और एक gate जोड़ा। हर multilingual launch को इसी bar पर खरा उतरना चाहिए।

globalize.now आपके ऐप्लिकेशन की हार्डकोडेड कॉपी को अनुवाद-तैयार locale फ़ाइलों में बदल देता है और जैसे-जैसे आप नई रिलीज़ करते हैं, उन्हें अपडेट रखता है।

globalize.now को निःशुल्क आजमाएं