एक असली उदाहरण लें: बटन लेबल "Connect Search Console" जो एक मंगलवार दोपहर शिप हुआ जब हमने डोमेन-सेटअप फ्लो में एक नया ऑनबोर्डिंग स्टेप जोड़ा। इसमें कुछ खास नहीं था — एक `data-i18n` की, एक अंग्रेज़ी वाक्य, वैसा बदलाव जो हफ्ते में एक दर्जन बार होता है। असल में इसके साथ कमिट और स्क्रीन के बीच जो होता है, वह क्रम में इस प्रकार है।
स्ट्रिंग, जैसी कमिट की गई
डेवलपर हमेशा की तरह अंग्रेज़ी की को हाथ से लिखता है, और उसके ठीक बगल में हाथ से चीनी अनुवाद भी जोड़ता है — ये दोनों कभी मशीन-जनरेटेड नहीं होते, क्योंकि यही वे हैं जिन्हें टीम के नेटिव स्पीकर वाकई पढ़ते हैं और उनमें आ रही गड़बड़ी को पकड़ते हैं। स्ट्रिंग की बाकी सभी चीज़ें छोड़ दी जाती हैं। फ्रेंच या कोरियाई के लिए कोई ट्रांसलेशन फाइल नहीं छुई जाती। कोई भी उन्हें सिंक में रखने के लिए अठारह अन्य JSON फाइलें नहीं खोलता। यही पूरी बात है: कमिट उन्हीं दो भाषाओं तक सीमित है जो एक इंसान ने वाकई लिखी हैं।
वह रजिस्ट्री जिसमें यह पहुंचता है
यह की एक ऐसे सिंगल सोर्स ऑफ ट्रुथ में गिरती है जिसे बैकएंड और फ्रंटएंड दोनों पढ़ते हैं — एक फाइल जो हर सपोर्टेड भाषा के लिए कोड, नेटिव नाम, ब्राउज़र लोकेल प्रीफ़िक्स और टेक्स्ट डायरेक्शन जानती है। इसे "Connect Search Console" के बारे में खास तौर पर कुछ नहीं पता; बस इतना पता है कि जो भी नई कीज़ आती हैं, उनके लिए बीस भाषा स्लॉट इंतज़ार कर रहे हैं, जिनमें से अभी अठारह में यह गायब है।
वह रन जो इसे उठाता है
फीचर को शिप करना ही ट्रिगर है। "नए ऑनबोर्डिंग स्टेप का अनुवाद करें" के लिए कोई टिकट फाइल नहीं करता। रजिस्ट्री के खिलाफ एक जनरेशन पास चलता है, हर कैटलॉग की अंग्रेज़ी सोर्स से तुलना करता है, और ठीक उन्हीं स्ट्रिंग्स को भरता है जो गायब हैं — इसमें यह वाली भी शामिल है — बाकी हर फाइल की हर लाइन को बिना छुए छोड़ देता है। अगर हम किसी के याद रखने का इंतज़ार करते, तो यह बटन आज से एक साल बाद भी जर्मन UI में "Connect Search Console" ही कहता, बाकी जगह मौजूद जर्मन के बगल में। यही वह फेलियर मोड है जिसे टालने के लिए हमने यह पूरी पाइपलाइन बनाई है: खराब अनुवाद नहीं, बल्कि वे अनुवाद जो कभी होते ही नहीं क्योंकि किसी चीज़ ने इसे मजबूर नहीं किया।
वह एक शब्द जो जानबूझकर टूटा हुआ शिप होता है
यही वह हिस्सा है जो लोगों को चौंकाता है। ऑनबोर्डिंग स्टेप एक नया डोमेन स्टेटस वैल्यू भी लाता है, और स्टेटस वैल्यू डेटाबेस से आती हैं, ट्रांसलेटर की कतार से नहीं — इन्हें रेंडर एज पर लोकलाइज़ किया जाता है, जिसमें अंग्रेज़ी फॉलबैक पहले से शामिल होता है। तो कोड शिप होने और कैटलॉग रीजनरेट होने के बीच के उन चंद घंटों में, एक फ्रेंच यूज़र को उस स्टेटस के लिए खाली जगह, एरर, या स्टैक ट्रेस की बजाय कच्चा अंग्रेज़ी शब्द दिखता है। जानबूझकर एक ठीक-ठाक अनुवाद से ज़्यादा खराब दिखने वाला, जानबूझकर टूटे हुए से बेहतर।
हम एक ईमानदार कमी को शिप करना पसंद करेंगे बजाय एक खामोश फेलियर के।
स्विचर
जब कैटलॉग तैयार हो जाते हैं, तो यूज़र के उन तक पहुंचने के तरीके में कुछ नहीं बदलता। ग्लोब आइकन हर पब्लिक पेज के नेव में मौजूद रहता है — किसी अकाउंट सेटिंग्स में छुपी हुई प्राथमिकता नहीं — और उसे फ्लिप करने से मौजूदा पेज उसी जगह फिर से रेंडर होता है। अगर कोई उस नए ऑनबोर्डिंग स्टेप के बीच में हो जब वह अंग्रेज़ी से वियतनामी पर स्विच करता है, तो बटन बिना पेज रीलोड किए या फ्लो में अपनी जगह खोए, कर्सर के नीचे ही फिर से लेबल हो जाता है। सच कहें तो इस डिटेल में ट्रांसलेशन पाइपलाइन से भी ज़्यादा इंजीनियरिंग समय लगा, क्योंकि "बिना रीलोड के सब कुछ फिर से रेंडर करना" पेज के हर स्टेटफुल कंपोनेंट को छूता है, सिर्फ स्टैटिक कॉपी को नहीं।
वह एजेंट जिसने रजिस्ट्री कभी देखी ही नहीं
अब असली मोड़: यह सारी मशीनरी वह नहीं है जिस पर उस ऑनबोर्डिंग फ्लो का यूज़र असल में टिप्पणी करता है। जो बात नोटिस होती है वह यह है कि असिस्टेंट बस उसी भाषा में जवाब देता है जिसमें उसने पूछा था — इसलिए नहीं कि उसने स्ट्रिंग रजिस्ट्री पढ़ी, बल्कि इसलिए क्योंकि यह एक लैंग्वेज मॉडल है जो उसी तरह जवाब देता है, जैसे वह किसी इंसान को देता।
- सेटअप के बीच में AI असिस्टेंट खोलें और वियतनामी में एक सवाल पूछें — यह वियतनामी में जवाब देगा।
- साइट बिल्डर से जापानी में एक योजना बनाने को कहें — योजना जापानी में वापस आती है।
- स्पेनिश में SEO रिपोर्ट मांगें — रिपोर्ट पूरी तरह से स्पेनिश में होती है।
इंटरफ़ेस स्ट्रिंग्स ऊपर बताया गया बीस-कैटलॉग वाला तंत्र हैं; एजेंट का आउटपुट एक बिल्कुल अलग तंत्र है जो उसी अनुभव तक पहुंचता है, और यही वह चीज़ है जो प्रोडक्ट को ऐसा महसूस कराती है जैसे यह खासतौर पर आपके लिए बनाया गया हो, न कि केवल आपके लिए अनुवादित किया गया हो।



