2011-11-26 11 views
5

मुझे पता है कि कई डेवलपर इसे इस तरह करते हैं: वे अंग्रेजी में अपना ऐप विकसित करना शुरू करते हैं, और @"Tap this to do that!" के बजाय NSLoclaizedString(@"Tap this to do that!", @"Telling what to do...") डालते हैं।क्या NSLocalizedString() में "असली" कुंजी का उपयोग करना सुरक्षित है? क्या गारंटीकृत फ़ॉलबैक भाषा है?

फिर वे genstrings चलाते हैं जो इन सभी तारों को निकालने के द्वारा किसी भी तरह स्थानीयकरण योग्य .स्ट्रिंग फ़ाइल बनाता है। गन्दा हिस्सा: कोड में उपयोग किया जाने वाला लंबा टेक्स्ट कुंजी बन जाता है। यह काम करता हैं। एक दिन तक जहां आप जल्दी से अपने कोड में जाते हैं और अंग्रेजी स्ट्रिंग को बदलते हैं और स्थानीयकरण के बारे में भूल जाते हैं और यह उन सभी Localizable.strings फ़ाइलों के लिए कुंजी के रूप में कार्य करता है।

तो मैं "असली" कुंजी का उपयोग करता हूं जो स्ट्रिंग के साथ मिश्रित नहीं होता है। एक त्वरित परीक्षण के लिए मैंने अंग्रेजी और फ्रेंच में स्थानांतरित एक परियोजना बनाई। फिर मैंने सिम्युलेटर भाषा को जर्मन में सेट किया। क्योंकि, आप जानते हैं, अगर उपयोगकर्ता कभी TTTDT की तरह कुंजी देखता है तो यह बहुत चूसना होगा।

तो बस अंग्रेजी और जर्मन के साथ, मैंने डेमो ऐप लॉन्च किया। और मुझे जो मिला वह अंग्रेजी स्थानीयकरण योग्य.स्ट्रिंग्स फ़ाइल से अंग्रेजी पाठ था।

निष्कर्ष: ऐसा लगता है कि यदि ओएस भाषा ऐप द्वारा कवर नहीं की जाती है तो NSLocalizedString अंग्रेजी फ़ाइल पर वापस आ जाता है।

Quesion: मान लीजिए कि हमेशा Localizable.strings (English) फ़ाइल है, और कुंजी ठीक से स्वरूपित मानों के साथ फ़ाइल में हैं। क्या ऐसी परिस्थितियां हैं जिनके अंतर्गत NSLocalizedString विफल हो जाएगा और फिर सीधे कुंजी प्रदर्शित करेगा?

उत्तर

4

अपने प्रश्न का उत्तर देने के लिए: हाँ, मैंने उस समस्या का अनुभव किया है जिसके बारे में आप चिंता कर रहे हैं, यानी मुख्य नाम दिखाए गए हैं, भले ही localizable.strings फ़ाइल मौजूद थी और उन प्रमुख नामों के लिए प्रविष्टियां शामिल थीं। ऐसा तब होता है जब आपके प्रोजेक्ट में एक से अधिक localizable.strings फ़ाइलें होती हैं। जो आसानी से हो सकता है यदि आप ओपन सोर्स प्रोजेक्ट से फ़ाइलों का एक सेट छोड़ देते हैं, जिसमें आपकी परियोजना में localizable.strings (जैसे कि शेयरकिट) है।

Here is a related question जो इस मुद्दे पर चर्चा करता है।

लेकिन कम से कम यदि आप आईडी-स्टाइल कुंजी नामों का उपयोग करते हैं, तो आप किसी भी भाषा में अपने ऐप का परीक्षण करते समय ऐसी समस्या देखेंगे। यदि आपने चाबियों के रूप में अंग्रेजी (या आधार भाषा) स्ट्रिंग का उपयोग किया है, तो आप तब तक इस कपटपूर्ण समस्या को नहीं देख पाएंगे जब तक आप स्थानीय संस्करणों का परीक्षण नहीं करते हैं और यह आसानी से अनजान द्वारा पर्ची कर सकता है।

तो टेक्स्ट रीवार्ड करते समय कुंजी (सभी भाषाओं में) को अपडेट करना याद रखने के अपने बिंदु के शीर्ष पर, अंग्रेज़ी टेक्स्ट को कुंजी के रूप में उपयोग करते समय संभावित रूप से छिपाने की समस्या है (अंग्रेज़ी ठीक दिखता है, लेकिन स्थानीयकृत संस्करण नहीं होगा)। इसलिए मुझे लगता है कि वास्तविक पाठ के बजाय "वास्तविक" कुंजी नामों का उपयोग करना अधिक व्यावहारिक है। यदि आप अभी भी चिंतित हैं कि किसी कारण से कुंजी नाम दिखाई दे सकते हैं, तो एक कुंजी चुनें जो समझने योग्य होने के लिए कम से कम वर्णनात्मक है।

+0

अच्छे अंक। मैं बेहतर प्रदर्शन भी जोड़ूंगा। – dontWatchMyProfile

1

हम "वास्तविक" कुंजी का उपयोग करते हैं लेकिन वे आम तौर पर अंग्रेजी पाठ (या संक्षिप्त रूप) होते हैं और अंत में "कुंजी" जोड़ते हैं। इस तरह यह स्पष्ट है।

0

मैंने कुछ कस्टम कोड लिखा जो वास्तव में सत्यापित करता है कि ऐप में सभी कुंजी सभी localizable.string फ़ाइलों में दिखाई देती हैं। इस प्रक्रिया के लिए दो कदम थे - genstrings का उपयोग करके एक नई स्थानीयकरण योग्य स्ट्रिंग फ़ाइल उत्पन्न करने के लिए जिसमें वर्तमान में स्रोत में संदर्भित सभी कुंजी शामिल हैं। फिर मैंने अपने मौजूदा localizable.strings फ़ाइलों में लोड करने के लिए कुछ उद्देश्य-सी एपीआई का उपयोग किया, और तुलना की कि सभी के पास नए जेनरेट किए गए एक के समान चाबियाँ (कोई और कम नहीं) थी।

संबंधित मुद्दे