वहाँ अन्य तरीकों में से कुछ चर्चा है यहाँ, विशेष रूप से एक अधिसूचना आधारित दृष्टिकोण: (1) संसाधनों के पुन: स्थानीयकरण स्वचालित रूप से लोड:
iOS: How to change app language programmatically WITHOUT restarting the app?
मेरी नजर में यहां वास्तव में तीन कार्य देखते हैं महत्वपूर्ण व्यक्ति। (उदाहरण के लिए यदि आप गतिशील रूप से किसी अन्य कस्टम UIView को निब से तुरंत चालू करते हैं, तो "पुरानी" भाषा स्ट्रिंग्स और सेटिंग्स (छवियां, टेक्स्ट दिशा) अभी भी लोड हो जाएंगी) (2) वर्तमान में स्क्रीन पर प्रदर्शित स्ट्रिंग का पुन: स्थानीयकरण। (3) प्रोग्राम कोड में डेवलपर (आप) द्वारा डाले गए स्ट्रिंग का पुन: स्थानीयकरण।
चलो (3) से शुरू करते हैं। यदि आप परिभाषा की तलाश करते हैं तो आप देखेंगे कि NSLocalizedString एक मैक्रो है। इसलिए यदि आप मौजूदा कोड को बहुत अधिक नहीं बदलना चाहते हैं, तो आप शायद नई हेडर फ़ाइल बनाकर (3) की समस्या को हल कर सकते हैं। उस शीर्षलेख फ़ाइल में, #undef
और फिर उचित स्थान से स्थानीयकृत स्ट्रिंग को चुनने के लिए फिर से #define NSLocalizedString
- आईओएस डिफ़ॉल्ट रूप से नहीं, बल्कि एक जिसे आप कुछ वैश्विक चर (जैसे, एक ऐप प्रतिनिधि ivar में) ट्रैक करते हैं, । यदि आप NSLocalizedString को फिर से परिभाषित नहीं करना चाहते हैं लेकिन आप अभी भी अपना स्वयं का विकल्प बनाते हैं, तो आपको शायद #undef NSLocalizedString
होना चाहिए यदि आप नहीं चाहते हैं कि भविष्य के डेवलपर्स को मैक्रो के बदले इसे गलती से कॉल करें, तो आप इसे बदल दें। एक आदर्श समाधान नहीं है, लेकिन शायद सबसे व्यावहारिक।
(1) के लिए, यदि आपने इंटरफ़ेस बिल्डर में अपना स्थानीयकरण नहीं किया है, बल्कि आप इसे गतिशील रूप से देखते हैं DidLoad, आदि, कोई समस्या नहीं है। आप उसी व्यवहार का उपयोग कर सकते हैं जिस पर चर्चा की गई है (यानी, संशोधित NSLocalizedString, आदि)। अन्यथा आप या तो (ए) उपर्युक्त लिंक (जटिल) में वर्णित अधिसूचना प्रणाली को कार्यान्वित कर सकते हैं, या (बी) स्थानीयकरण को आईबी से देखने के लिए डीडलोड लोड करने पर विचार करें, या (सी) initWithNibName:
ओवरराइड करने का प्रयास करें और पुरानी भाषा से लोड ऑब्जेक्ट को स्वैप करें संसाधन, नए भाषा संसाधनों के साथ लोड एक के साथ। यह इस चर्चा के बहुत नीचे मोहम्मद द्वारा वर्णित एक दृष्टिकोण था: http://learning-ios.blogspot.ca/2011/04/advance-localization-in-ios-apps.html। उनका दावा है कि यह समस्याएं पैदा करता है (viewDidLoad नहीं कहा जाता है)। यहां तक कि यदि यह काम नहीं करता है, तो इसे आज़माकर आपको कुछ ऐसा करने की ओर इशारा कर सकता है जो करता है।
अंत में, (2) संभावित रूप से सबसे आसान कार्य है: केवल वर्तमान दृश्य को हटाएं और दोबारा जोड़ें (या कुछ मामलों में, इसे फिर से निकालें)।
खिड़की को हटाने और इंटरफ़ेस को पुनर्निर्मित करने के तरीके के बारे में कैसे 'एप्लिकेशन: didFinishLaunchingWithOptions: '। मैंने खुद की कोशिश नहीं की है लेकिन शायद यह –
समीक्षा [यह लिंक] [1] आपकी मदद कर सकती है। [1]: http://stackoverflow.com/questions/1576904/how-to-change-iphone-app-language-during-runtime [यह एक] (http के –
संभावित दोहराव: // stackoverflow.com/questions/11578298/change-application-language-setting-in-ios-not-the-whole-device/11578590#11578590)। इसके अलावा, मैंने वहां एक साधारण उत्तर पोस्ट किया है। आप प्रत्येक भाषा के लिए सभी आवश्यक तारों के साथ एक दस्तावेज़ बना सकते हैं और उन्हें इससे लोड कर सकते हैं। –