अपने Mac पर अनुवाद के प्लेसहोल्डर मान्य करने के लिए, हर आर्ग्युमेंट की स्थिति, प्रकार और इच्छित उपयोग की तुलना स्रोत संदेश से करें। Xcode के मिसमैच डायग्नॉस्टिक्स का उपयोग करें, फिर बहुवचन प्रतिस्थापनों की जाँच करें और अलग-अलग नमूना मानों के साथ रेंडर किए गए लेबल को परखें।
यह मार्गदर्शिका Xcode में Mac ऐप के स्थानीयकृत लेबल की समीक्षा करने वाले व्यक्ति के लिए है। काम यह जाँचना है कि कोई संदेश और उसके अनुवाद ऐप द्वारा दिए गए मानों से मेल खाते हैं। नीचे दिए गए सभी लेबल काल्पनिक अंग्रेज़ी उदाहरण हैं; वे फ़ॉर्मैटिंग की कार्यप्रणाली दिखाते हैं, वास्तविक अनुवाद नहीं।
संदेश के आर्ग्युमेंट अनुबंध में क्या शामिल होता है?
आर्ग्युमेंट अनुबंध एक समीक्षा रिकॉर्ड है, जिसमें संदेश को मिलने वाले मानों का विवरण होता है: उनकी स्थितियाँ, फ़ॉर्मैटिंग प्रकार, अर्थ और अपेक्षित उपयोग। यह स्रोत कोड और कैटलॉग से निकली एक व्यावहारिक चेकलिस्ट है, Apple का कोई अलग फ़ाइल फ़ॉर्मैट नहीं।
Swift का String.LocalizationValue इंटरपोलेट किए गए रनटाइम मानों वाले स्थानीयकरण योग्य स्ट्रिंग का समर्थन करता है। इसके दस्तावेज़ यह भी बताते हैं कि स्रोत टेक्स्ट को स्थानीयकरण कुंजी के रूप में इस्तेमाल करने और अलग कुंजी तथा डिफ़ॉल्ट मान देने में क्या अंतर है। इसलिए, केवल कोई पहचानकर्ता देखने से संदेश के आर्ग्युमेंट का पता नहीं चल सकता: डिफ़ॉल्ट स्रोत टेक्स्ट और उसे कॉल करने वाली जगह देखें। String.LocalizationValue
फ़ॉर्मैट स्ट्रिंग Added %lld items to %@ पर विचार करें। इस उदाहरण में ऐप पहले एक पूर्णांक गिनती और फिर किसी ऑब्जेक्ट से जुड़ा संग्रह लेबल देता है। अनुवाद संपादित करने से पहले अनुबंध लिख लें:
| आर्ग्युमेंट की स्थिति | अर्थ | अपेक्षित फ़ॉर्मैट | उदाहरण मान |
|---|---|---|---|
| 1 | जोड़ी गई चीज़ों की संख्या | %lld |
7 |
| 2 | गंतव्य संग्रह का लेबल | %@ |
Canvas |
Apple के फ़ॉर्मैट संदर्भ में %@ को ऑब्जेक्ट रूपांतरण, %d को signed 32-bit पूर्णांक, %f को double रूपांतरण और ll को long long के लिए पूर्णांक लंबाई संशोधक के रूप में परिभाषित किया गया है। इसमें %1$@ जैसे स्थितीय रूप भी बताए गए हैं। प्रकार की पूरी जानकारी सुरक्षित रखें; %lld को %d में बदलने से अपेक्षित पूर्णांक प्रकार बदल जाता है। यह संदर्भ पुराना है, इसलिए इसे वर्तमान कैटलॉग दस्तावेज़ों के साथ फ़ॉर्मैट सिंटैक्स के लिए इस्तेमाल करें। String Format Specifiers
समीक्षा रिकॉर्ड में आर्ग्युमेंटों के अर्थ भी लिखें, भले ही उनके प्रकार समान हों। Moved %@ to %@ में केवल प्रकार जाँचने से आइटम लेबल और गंतव्य लेबल का अंतर पता नहीं चलेगा। सिंटैक्स सही होने पर भी मानों और शब्दों के बीच सही संबंध होना ज़रूरी है।
Xcode में प्रामाणिक स्रोत कैसे ढूँढ़ें?
Xcode में प्रोजेक्ट खोलें और उस कैटलॉग की पहचान करें जिसमें संदेश है। अगर स्रोत बदल गया है, तो निकाली गई स्ट्रिंग रीफ़्रेश करने के लिए Product > Build चुनें। Project navigator में कैटलॉग चुनें, Editor > Assistant चुनें और स्रोत देखने के लिए संदेश कुंजी चुनें। Apple कैटलॉग प्रविष्टियों को ढूँढ़ने और अपडेट करने के लिए इस कार्यप्रवाह का दस्तावेज़ देता है। Localizing and varying text with a string catalog
जाँचें कि कॉल करने वाली जगह वास्तव में कौन-से मान, किस क्रम में और किस स्थानीयकरण API के ज़रिए देती है। Apple स्थानीयकरण योग्य APIs, जैसे String(localized:), इस्तेमाल करने की सलाह देता है; अलग defaultValue वाला initializer अपने पहले पैरामीटर को कुंजी और दूसरे को डिफ़ॉल्ट स्रोत स्ट्रिंग मानता है। यह तब मायने रखता है जब collection.added.summary जैसा तटस्थ पहचानकर्ता संदेश से जुड़ा हो। Preparing your app’s text for translation
तीन चीज़ें साथ में दर्ज करें: कैटलॉग और कुंजी, डिफ़ॉल्ट स्रोत का शब्दांकन, और आर्ग्युमेंटों के क्रमबद्ध अर्थ तथा प्रकार। अगर इनमें असहमति हो, तो अनुवाद समायोजित करने से पहले उसे सुलझाएँ। अन्यथा आप अनुवाद को ऐप के मौजूदा इनपुट के बजाय पुराने स्रोत से मेल करा सकते हैं।
आगे के संपादनों के लिए संदर्भ भी दें। Apple स्थानीयकरण योग्य स्ट्रिंग पर उनके उपयोग की व्याख्या करने वाली टिप्पणियों का समर्थन करता है। एक उपयोगी काल्पनिक टिप्पणी में कहा जा सकता है कि आर्ग्युमेंट 1 आइटम की गिनती है और आर्ग्युमेंट 2 गंतव्य संग्रह का लेबल। इससे स्थानीयकरणकर्ता को ऐसी जानकारी मिलती है जिसे फ़ॉर्मैट स्पेसिफ़ायर व्यक्त नहीं कर सकता। Preparing your app’s text for translation
गिनती, प्रकार और आर्ग्युमेंट की स्थितियाँ कैसे जाँचें?
Apple ने सामान्य समस्याओं के लिए String Catalog सत्यापन शुरू किया, जिनमें मेल न खाने वाले फ़ॉर्मैट स्पेसिफ़ायर शामिल हैं; कुछ समस्याओं के लिए सुधार भी उपलब्ध हैं। Xcode द्वारा उस प्रविष्टि के लिए दिखाए गए किसी भी डायग्नॉस्टिक की जाँच करें। सुझाए गए सुधार को सिंटैक्स ठीक करने के प्रस्ताव के रूप में लें और सत्यापित करें कि उससे संदेश का अर्थ सुरक्षित रहता है। Build multilingual-ready apps
बहुवचन प्रतिस्थापन न रखने वाले सरल संदेश के लिए यह समीक्षा क्रम अपनाएँ:
- स्रोत और उम्मीदवार टेक्स्ट में ऐसे हर प्लेसहोल्डर की पहचान करें जो आर्ग्युमेंट लेता है।
- हर प्लेसहोल्डर को उसकी आर्ग्युमेंट स्थिति से जोड़ें।
- उसके पूरे फ़ॉर्मैट प्रकार की अनुबंध से तुलना करें।
- जाँचें कि हर आवश्यक मान वहाँ मौजूद है जहाँ शब्दांकन उसकी अपेक्षा करता है।
- जोड़े गए, हटाए गए या दोहराए गए संदर्भों की अलग-अलग जाँच करें।
स्थितीय नोटेशन से अनुवाद में शब्दों का क्रम बदला जा सकता है, जबकि आर्ग्युमेंट की पहचान बरकरार रहती है। %2$@: added %1$lld items में पहला दिखाई देने वाला प्लेसहोल्डर आर्ग्युमेंट 2 को और दूसरा आर्ग्युमेंट 1 को संदर्भित करता है। Apple n$ स्थितीय सिंटैक्स का दस्तावेज़ देता है। String Format Specifiers
नीचे दी गई निर्णय तालिका ऊपर के दो-आर्ग्युमेंट वाले उदाहरण अनुबंध पर लागू होती है। ये प्रस्तावित समीक्षा नतीजे हैं, Xcode चलाने से मिले नतीजे नहीं:
| उम्मीदवार फ़ॉर्मैट टेक्स्ट | समीक्षा का नतीजा | कारण |
|---|---|---|
Added %lld items to %@ |
सरल अनुबंध से मेल खाता है | पहले गिनती, फिर गंतव्य |
%2$@: added %1$lld items |
क्रम बदलने के बाद मेल खाता है | स्पष्ट स्थितियाँ दोनों आर्ग्युमेंट की पहचान बनाए रखती हैं |
Added %d items to %@ |
पूर्णांक का प्रकार सुधारें | आर्ग्युमेंट 1 में अपेक्षित लंबाई संशोधक नहीं है |
Added %lld items |
छूटे हुए आर्ग्युमेंट की जाँच करें | इस संदेश के लिए आवश्यक गंतव्य मौजूद नहीं है |
Added %1$lld items to %1$@ |
संदर्भ सुधारें | आर्ग्युमेंट 1 को परस्पर असंगत प्रकारों से संदर्भित किया गया है; आर्ग्युमेंट 2 मौजूद नहीं है |
Added %1$lld items to %2$@ (%2$@) |
दोहराव की समीक्षा करें | तीन बार उल्लेख है, लेकिन संदर्भित अलग-अलग आर्ग्युमेंट केवल दो हैं |
उल्लेखों की कुल संख्या को अलग-अलग आर्ग्युमेंटों की संख्या से अलग रखें। आखिरी पंक्ति जानबूझकर यह अंतर दिखाती है: आर्ग्युमेंट 2 को दोहराने से तीसरा दिया गया मान नहीं बन जाता। शब्दांकन में यह दोहराव उचित है या नहीं, यह संपादकीय निर्णय है। इस काम के लिए, इसका उद्देश्य स्पष्ट होने तक इसे चिन्हित करें।
इसी तरह, हर प्रतिशत चिह्न को आर्ग्युमेंट न गिनें। Apple %% को शाब्दिक प्रतिशत चिह्न के रूप में परिभाषित करता है। Scale: %lld%% जैसे फ़ॉर्मैट लेबल में मान का एक प्लेसहोल्डर और एक escaped प्रतिशत चिह्न होता है। String Format Specifiers
बहुवचन प्रतिस्थापनों की जाँच अलग तरह से क्यों करनी चाहिए?
बहुवचन संदेशों में मान दिखाने वाले टेक्स्ट के साथ चयन तंत्र की भी समीक्षा करनी पड़ती है। String Catalog पर अपने सत्र में Apple बताता है कि प्रतिस्थापनों में बहुवचन रूपों के शब्दकोश हो सकते हैं। इंस्पेक्टर नियंत्रक आर्ग्युमेंट की स्थिति और C-शैली के फ़ॉर्मैट स्पेसिफ़ायर दिखाता है। इसलिए कोई प्रतिस्थापन किसी आर्ग्युमेंट पर निर्भर हो सकता है, भले ही किसी शाखा में वह आर्ग्युमेंट संख्यात्मक रूप में न छपे। Discover String Catalogs
काल्पनिक आइटम-गिनती संदेश के लिए One item added की तुलना %lld items added से करें। पहली शाखा मात्रा को शब्दों में लिखती है; दूसरी उसे छापती है। हर शाखा में एक जैसे दिखाई देने वाले प्लेसहोल्डर की संख्या माँगने वाला नियम पहली शाखा को बेवजह अस्वीकार करेगा। Apple के दस्तावेज़ में strings dictionary के व्यवहार में स्पष्ट रूप से अनुमति है कि बहुवचन रूपों में संख्यात्मक फ़ॉर्मैट स्पेसिफ़ायर छोड़ा जा सकता है; संख्या को शब्दों में लिखना भी एक विकल्प है। Stringsdict file format
इसके बजाय हर शाखा को ध्यान में रखकर यह समीक्षा करें:
- इंस्पेक्टर में प्रतिस्थापन की नियंत्रक आर्ग्युमेंट स्थिति और प्रकार सत्यापित करें।
- लक्ष्य स्थानीयकरण में मौजूद हर बहुवचन शाखा देखें।
- हर दिखने वाले प्लेसहोल्डर को उस आर्ग्युमेंट से मिलाएँ जिसे वह संदर्भित करता है।
- शाखा के शब्दांकन से किसी भी छूटी हुई संख्यात्मक प्रस्तुति की वजह स्पष्ट करें।
- संदेश के अन्य आर्ग्युमेंट अलग से जाँचें; गिनती को शब्दों में लिखना छूटे हुए संग्रह लेबल को नहीं समझाता।
दो स्वतंत्र रूप से बदलती गिनतियों के लिए उनकी भूमिकाएँ अलग-अलग सुरक्षित रखें। आइटम और संग्रहों के बारे में काल्पनिक संदेश में आइटम की गिनती को आइटम प्रतिस्थापन नियंत्रित करना चाहिए और संग्रह की गिनती को संग्रह प्रतिस्थापन। Apple एक संदेश में कई प्रतिस्थापनों का दस्तावेज़ देता है और समझाता है कि रनटाइम आउटपुट में उनके चुने हुए बहुवचन रूप मिलाए जाते हैं। Discover String Catalogs
Mac पर सुधारे गए संदेश की पुष्टि कैसे करें?
प्रविष्टि ठीक करने के बाद ऐप बनाएँ और कैटलॉग के बचे हुए डायग्नॉस्टिक्स देखें। फिर लक्ष्य स्थानीयकरण में संबंधित स्क्रीन चलाएँ। Apple का समर्थित कार्यप्रवाह है: Product > Scheme > Edit Scheme चुनें, Run चुनें, Options खोलें, App Language और उपयुक्त App Region चुनें, Close पर क्लिक करें और चुने गए डेस्टिनेशन पर रन करें। Testing localizations when running your app
ऐसे नमूना मान चुनें जिनसे अदला-बदली स्पष्ट दिखे। दो गिनती आर्ग्युमेंटों के लिए अलग-अलग संख्याएँ लें, जैसे 2 और 7। दो टेक्स्ट आर्ग्युमेंटों के लिए Tile और Canvas जैसे अलग लेबल लें। ये उदाहरण के लिए दिए गए टेस्ट इनपुट हैं: इनका उद्देश्य दिखाना है कि दिया गया हर मान संदेश के किस हिस्से में दिखाई देता है।
बहुवचन वाले संदेशों के लिए उन मानों को परखें जिनसे समीक्षा की जा रही शाखाएँ चुनी जाती हैं। जब दो प्रतिस्थापन स्वतंत्र रूप से बदलते हों, तो ऐसे संयोजन शामिल करें जिनमें एक गिनती बदले और दूसरी स्थिर रहे। चुने गए शब्दांकन और दिखाए गए हर मान की जगह, दोनों देखें। किसी एक संयोजन का सफलतापूर्वक रेंडर होना बाकी शाखाओं की जाँच नहीं करता।
अनुवाद की स्थिति को अनुबंध जाँच से अलग रखें। Apple कैटलॉग के हरे चेकमार्क को टेक्स्ट दर्ज किए जाने के बाद की अनुवादित स्थिति बताता है। किए गए वास्तविक परीक्षण दर्ज करें—आर्ग्युमेंट मैपिंग, प्रकारों की तुलना, शाखा निरीक्षण और रेंडर किए गए उदाहरण—इस स्थिति संकेतक को इन चारों का प्रमाण न मानें। Localizing and varying text with a string catalog
संदेश आगे बढ़ाने के लिए तब तैयार है जब उसके प्लेसहोल्डर इच्छित दिए गए आर्ग्युमेंटों से जुड़ते हों, उनके प्रकार मेल खाते हों और शाखा के अनुसार कोई भी छूट या दोहराव स्पष्ट रूप से समझाया गया हो। संदेश के साथ यह संक्षिप्त अनुबंध रखने से स्रोत या अनुवाद में अगले संपादन का आकलन आसान हो जाता है।
स्रोत
- Localizing and varying text with a string catalog — Apple
- String.LocalizationValue — Apple
- Preparing your app’s text for translation — Apple
- String Format Specifiers — Apple
- Build multilingual-ready apps — Apple
- Discover String Catalogs — Apple
- Stringsdict file format — Apple
- Testing localizations when running your app — Apple