2009-08-07 13 views
14

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

मैं वर्तमान में स्थानीय स्ट्रिंग प्राप्त करने के लिए NSLocalizedString का उपयोग कर रहा हूं लेकिन मैक्रो के सभी बदलावों को देखकर मैं उसे नहीं ढूंढ सकता जो मुझे भाषा निर्दिष्ट करने देगी।

इसे कैसे करें इस पर कोई विचार?

+0

क्या आपने लोकल को सेट करने के लिए 'initWithLocaleIdentifier:' का उपयोग करने का प्रयास किया है? उदाहरण के लिए, लोकेल को नीदरलैंड में सेट करने के लिए आप एक लोकेल प्रारंभ कर सकते हैं: NSLocale * locale = [[NSLocale alloc] initWithLocaleIdentifier: @ "nl_BE"]; – Dimitris

+0

मुझे संदेह है कि यह काम करेगा, क्योंकि यह सिर्फ एक निर्दिष्ट लोकेल के लिए एनएसएलोकेल ऑब्जेक्ट बनाएगा और "वर्तमान"/"सक्रिय" लोकेल –

उत्तर

12

ऐसा करने का एक बेहतर तरीका है। तुम इतनी तरह भाषा के लिए मजबूर कर सकते हैं:

[[NSUserDefaults standardUserDefaults] setObject: [NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"]; 

और इस सेटिंग को पूर्ववत:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleLanguages"]; 

एनबी। प्रभाव डालने के लिए आपको आमतौर पर ऐप को पुनरारंभ करना होगा।

अगर आप [[NSUserDefaults standardUserDefaults] synchronize];

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

मैं इस उत्तर का संदर्भ देता हूं: How to force NSLocalizedString to use a specific language (उत्तर वास्तव में मेरे लिए काम नहीं करता है, लेकिन टिप्पणियों में विचारों का पालन करने के बाद मैंने किया। पूर्ववत सामग्री मैंने काम किया।

+1

अंत में। धन्यवाद –

1

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

+0

को प्रभावित नहीं करेगा, यह एक अलग भाषा में एक ऐप चलाने के लिए थोड़ा अजीब है अन्य सभी एप्स। मुझे आश्चर्य है कि तर्क क्या है? –

+3

मैं मानता हूं कि आम तौर पर आप सही कह रहे हैं, हालांकि बहुभाषी देशों में या एक से अधिक भाषा बोलने वाले उपयोगकर्ताओं के लिए, कभी-कभी ऐसे मामले होते हैं जहां मैं एक विशिष्ट ऐप के लिए एक भाषा का उपयोग करना चाहूंगा जबकि मेरा बाकी फोन चालू है अंग्रेज़ी। एक अच्छा उदाहरण इस स्टैक ओवरफ्लो जैसी साइट हो सकता है, जो मेरे लिए यहां सामग्री के कारण है, मैं हमेशा फेसबुक में देखना चाहूंगा क्योंकि फेसबुक की विरोध में मैं अपनी मूल भाषा के साथ रहूंगा। –

+0

इसके अलावा, एक इन-एप भाषा स्विच कीओस्क-मोड परिदृश्यों में उपयोगी है (जो आईपैड ऐप्स के साथ सबसे ज्यादा समझ में आता है, आईफोन नहीं। लेकिन फिर भी ...)। –

15

यहां तीन मुद्दे हैं:

  • स्ट्रिंग्स
  • अन्य संसाधन (महत्वपूर्ण व्यक्ति सहित)
  • प्रणाली संदेशों

पिछले लगभग निश्चित रूप से सुधारी जा सकने वाली नहीं है, तो हम इसे छोड़ देंगे हो। वे डिवाइस भाषा में दिखने जा रहे हैं।

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

एनआईबी के लिए, दो दृष्टिकोण हैं। आप स्थानीयकृत एनआईबी के प्रत्येक सेट को अपने बंडल में डाल सकते हैं और फिर nil से -initWithNibName:bundle: के बजाय उस बंडल को पास कर सकते हैं। वैकल्पिक रूप से, आप उन्हें [NSBundle -pathForResource:ofType:inDirectory:forLocalization:] के साथ ढूंढने के बाद एनआईबी को हाथ से लोड कर सकते हैं।

+0

धन्यवाद, यह केवल प्रतिक्रिया है जो वास्तव में मैंने जो पूछा है उसका उत्तर है। आपका सुझाव पर्याप्त उचित लगता है और स्थानीयकरण के लिए निर्मित ढांचे का लाभ उठाता है। धन्यवाद –

+0

यह एक शानदार जवाब है। – Brandon

+1

मुझे पता है कि सवाल रनटाइम पर ऐसा करने के बारे में कुछ भी नहीं कहता है। अनुमोदित उत्तर विशेष रूप से नोट करता है कि इसे एक ऐप पुनरारंभ करने की आवश्यकता है। यह उत्तर आपको रनटाइम पर लोकेल बदलने की अनुमति देता है। यह वही है जो मैं ढूंढ रहा हूं। धन्यवाद। – Brandon

3

चाल है app से चयन करके विशिष्ट भाषा का उपयोग करने के द्वारा चुनी गई भाषा पर विशेष बंडल आधार पर उपयोग करने के लिए मजबूर करने के लिए NSLocalizedString,

यहाँ पोस्ट मैं इस http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html

और के लिए लिखा है है यहां एक नमूना ऐप का कोड है https://github.com/object2dot0/Advance-Localization-in-ios-apps

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