2012-07-20 17 views
6

मैं अपनी आवेदन भाषा (केवल आवेदन भाषा पूरी प्रणाली नहीं) बदलने के लिए अपने आवेदन में एक विकल्प चाहता हूं, क्या आप मुझे कुछ संकेत दें?आईओएस में एप्लिकेशन भाषा सेटिंग बदलना नहीं पूरे डिवाइस

अग्रिम धन्यवाद,

मुझे स्थानीयकरण के बारे में पता है!

+0

मुझे लगता है कि यह पोस्ट एक अच्छा प्रारंभिक बिंदु है: http: // stackoverflow।कॉम/प्रश्न/1669645/कैसे-टू-फोर्स-एनएसएलोकैलाइज्डस्ट्रिंग-टू-यूज-ए-विशिष्ट-भाषा –

+0

मुझे लगता है कि आप डिवाइस के बिना केवल अपने एप्लिकेशन के भाषा को नहीं बदल सकते हैं। –

+0

@VineeshTP आप विकास के दौरान डिवाइस और सिम्युलेटर के लिए भाषा सेटिंग्स बदल सकते हैं। मेरे जवाब पर एक नज़र डालें। – Abizern

उत्तर

2

आप एक्सकोड से स्थापित कस्टम बिल्ड फ़्लैग का उपयोग कर ऐसा कर सकते हैं। इस तरह आप डिवाइस के लिए सभी सेटिंग्स को बदलने के बजाय स्थानीयकरण के तहत एक एप्लिकेशन चला सकते हैं।

मैं http://abizern.org/2012/03/18/simple-localisation-testing/

पर इसके बारे में एक ब्लॉग पोस्ट में लिखा था और Github पर एक उदाहरण परियोजना है कि आप कार्रवाई में यह देखने के लिए उपयोग कर सकते हैं नहीं है: https://github.com/Abizern/SimpleLocalisationTesting

+0

मेरे पास एक ही सवाल है लेकिन मैं यह कैसे प्राप्त कर सकता हूं - एप्पल भाषाएं मैं आईओएस –

+0

पर नया हूं, यह केवल झंडे में से एक है जिसे आप रन टाइम पर पास कर सकते हैं। – Abizern

+1

दस्तावेज़ों के लिए धन्यवाद। लेकिन इस प्रलेखन से यह पूरी तरह से स्पष्ट नहीं है कि इसे नए – User16119012

1

मैंने शब्दकोशों की सरणी से भरा .plist द्वारा बनाई गई कस्टम स्थानीयकरण किया है। इस तरह:

kYes 
    en = @"Yes" 
    ru = @"Да" 
kNo 
    en = @"No" 
    ru = @"Нет" 

मेरी परियोजना में मैंने इस स्ट्रिंग को पढ़ने के लिए एक सिंगलटन क्लास बनाया। विकल्पों में उपयोगकर्ता आवश्यक भाषा का चयन करता है (पहली बार प्रारंभ प्रणाली को वर्तमान सिस्टम स्थिति से भाषा का चयन करें या डिफ़ॉल्ट सेट करें)। चयनित भाषा को अगली शुरुआत में उपयोग करने के लिए फ़ाइल में या सेटिंग्स में सहेजा जाना चाहिए। सिंगलटन में मेरे पास +getStringWithKey: है। तो मैं वहां @ "केवाईएस" पास करता हूं और केवल ऐप के लिए मौजूदा स्थानीयकरण के लिए स्ट्रिंग प्राप्त करता हूं। साथ ही, आपको किसी भी तरह से, यहां तक ​​कि खाली करने के लिए मानक स्थानीयकरण फ़ाइलों को जोड़ने की आवश्यकता होगी, क्योंकि यदि आप नहीं करते हैं, तो आपके द्वारा समर्थित सभी भाषाओं को आईट्यून्स में नहीं दिखाया जाएगा।

1

मैं वास्तव में पर कैसे करने के लिए एक और विचार के बारे में सोच रहा था अपने ऐप्स ui में भाषा बदलें, हालांकि यह आपको 1 तक मैन्युअल रूप से सेट करता है। सभी स्ट्रिंग मैन्युअल रूप से एक सेट करें 2. एक विधि (अधिसूचना) प्रदान करें जो भाषा सेटिंग बदलते समय सभी ui तत्वों को अद्यतन करे। विचार एक ही विधि पर आधारित है जो आईओएस स्ट्रिंग के स्थानीय संस्करण को खोजने के लिए उपयोग करता है। तो एक शर्त के रूप में आपको एक फ़ोल्डर संरचना भाषा_id.lproj के साथ एक बंडल (उदा। AppNameStrings.bundle) प्रदान करना होगा जहां भाषा_आईडी उन भाषाओं के लिए डिज़ाइनर है जिन्हें आप प्रदान करना चाहते हैं। आप सेटिंग बंडल बनाकर इस तरह का बंडल बना सकते हैं, इसे फ़ाइंडर में खोलें और root.plist फ़ाइल को हटा दें। इसके बाद आपको एक ऐसे फ़ंक्शन की आवश्यकता है जिसका उपयोग आप अपने बंडल से पढ़ने के लिए कर सकते हैं। यहां स्थानीय तरीके से पढ़ने के लिए उपयोग की जाने वाली 2 विधियां हैं I अपने GlobalDefinitions.h फ़ाइल

#ifdef __OBJC__ 
NSBundle *yourNameBundle(void); 
NSString *YourNameLocalized(NSString *stringToken, NSString *language); 
#endif 

में निम्न विधियों में रखो और अपने GlobalDefinitions.m फ़ाइल

NSBundle *yourNameBundle(void) { 
static NSBundle* bundle = nil; 
    if (!bundle) { 
    NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"]; 
    bundle = [NSBundle bundleWithPath:path]; 
    } 
    return bundle; 
} 
NSString *YourNameLocalized(NSString *stringToken, NSString *language) { 
    if (yourNameBundle()) { 
    return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]; 
    } else { 
    return stringToken; 
    } 
} 

में इस कोड को आप

[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language] 

के लिए NSBundle पर एक वर्ग बनाने के लिए क्योंकि मानक विधि भाषा पैरामीटर को याद करती है। अपनी विधि में आप इसी भाषा.एलप्रोजेज/रूट.स्ट्रिंग्स फ़ाइल को खोलें और स्ट्रिंग टोकन के लिए इसे स्कैन करें। यदि आप नहीं पाते हैं तो यह टोकन को अन्यथा टेक्स्ट स्ट्रिंग वापस कर देता है। जब भी आपको कुछ पाठ के स्थानीय संस्करण की आवश्यकता होती है तो आप लिखते हैं उदा। label.text = YourNameLocalized (@ "टोकन", [स्वयं प्रदानभाषी इंडेंटिफायर); और तुम कर रहे हो मैंने अभी तक यह नहीं किया है लेकिन इसे काम करना चाहिए।

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