सभी स्थानीयकृत स्ट्रिंग संसाधन (साथ ही कई अन्य प्रकार के संसाधन) बंडल से निकाले जाते हैं। आम तौर पर एक ऐप "मुख्य बंडल" का उपयोग करता है जो कि आपके ऐप के साथ एक्सकोड द्वारा बनाई गई एक है। लेकिन आप अलग-अलग किसी अन्य बंडल को बना सकते हैं, बशर्ते आप इसे सही संरचना के साथ बना सकें, फिर आप इसे अपने ऐप में डाउनलोड कर सकते हैं और अंत में NSLocalizedStringFromTableInBundle() फ़ंक्शन का उपयोग करके स्थानीयकृत स्ट्रिंग निकाल सकते हैं।
तो मान लीजिए कि आप एक कुंजी "KEY" भाषा अनुवाद के लिए निकालने हैं, तो सामान्य वाक्य रचना होगा:
NSString *translated = NSLocalizedStringFromTable(@"key",nil,nil);
लेकिन इस विकल्प है कि आप पहले समूह को निर्दिष्ट कर सकते हैं का एक प्रकार है:
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
मानक मामले में आप [NSBundle mainBundle]
साथ myBundle
की जगह लेकिन आप इसे इस तरह से निर्दिष्ट कर सकते हैं यदि आप किसी अन्य बंडल का उपयोग करना चाहते हैं:
NSString *myBundlePath = "the path to the downloaded bundle";
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
NSString *translated = NSLocalizedStringFromTableInBundle(@"key",nil,myBundle,nil);
एक बंडल का पूरा ढांचा "बंडल प्रोग्रामिंग गाइड" एप्पल डॉक्स में में देखा जा सकता है, लेकिन आपके मामले में आप बस इस तरह से बना सकते हैं: अपने मैक एक निर्देशिका बनाने में
- , और इसे "MyBundle"
- इस निर्देशिका के अंदर अपनी स्थानीय स्ट्रिंग को स्थानांतरित करें (यदि आपके पास बंडल में एकाधिक भाषाएं हैं तो localizable.strings फ़ाइल lproj निर्देशिकाओं के अंदर होगी: en.lproj, it.lproj, fr .lproj, ...)
- फिर निर्देशिका को "MyBundle.bundle" का नाम बदलें
आप अंतिम ऑपरेशन के साथ नोटिस करेंगे कि अब यह ऑब्जेक्ट एक स्टैंडअलोन ऑब्जेक्ट के रूप में देखा जाता है लेकिन वास्तव में यह एक निर्देशिका है।
अब आप एक बहु-बंडल दृष्टिकोण रखने या एकल-बंडल तकनीक का पालन करने का निर्णय ले सकते हैं: बाद के मामले में आप सभी भाषाओं को पैकेज कर सकते हैं और फिर स्वत: सिस्टम स्थानीयकरण नियमों का उपयोग करके भाषा अनुवाद के लिए अद्वितीय अद्यतन बंडल का उपयोग कर सकते हैं ; दूसरे मामले में आप प्रत्येक भाषा के लिए एक बंडल बना सकते हैं और फिर - वर्तमान में चयनित भाषा के आधार पर - उपयुक्त बंडल लोड करें और इसे अपने अनुवादों के लिए चुनें।
वही प्रश्न http://stackoverflow.com/questions/12358379/is-it-possible-to-access-the-app-bundles-en-lproj के समान प्रश्न? –
प्रश्न का उत्तर पहले से ही दिया गया है [यहां] (http://stackoverflow.com/a/6075533/1651167) – Shelm
सिमुलेटर है लेकिन लोग पूछे जाने वाले तरीके के आधार पर अलग-अलग प्रश्नों का उत्तर देते हैं। यह स्पष्ट रूप से नीचे बेहतर जवाब है। – mskw