2012-06-27 32 views
27

पर कट | कॉपी | पेस्ट मेनू को स्थानीयकरण करना एक डैनिश ऐप ive को स्थानीय बनाने में कुछ समस्याएं हैं। (भाषा, पेस्ट्री नहीं)आईओएस

मैंने सीएफबंडल डेवलपमेंट क्षेत्र को मेरी जानकारी में डैनिश के लिए da_DK पर सेट किया है। लेकिन टेक्स्ट इनपुट के लिए दिखाई देने वाला पॉपअप अभी भी अंग्रेजी में है, यहां तक ​​कि डैनिश ओएस चलाने वाले फोन पर भी।

enter image description here

कैसे नौकरी के नाम पर मैं इसे बदल सकते हैं?

परीक्षण डिवाइस एक गैर-जेलब्रोकन आईफोन 4 एस आईओएस 5.1 चला रहा है जिसमें डेनिश के साथ आईओएस सेटिंग है, और एक डैनिश आईट्यून खाता जुड़ा हुआ है।

मैं डिजाइन के लिए .xibs का उपयोग नहीं करता हूं। सभी इंटरफेस को व्यू कंट्रोलर के रूप में प्रोग्राम किया जाता है।

+0

जब आप फोन बदलते हैं तो इसे बदलना चाहिए, यह एक उत्सुक मामला –

+0

सचमुच है। डिवाइस को कई बार पुनरारंभ किया है, और जैसा कि आप कीबोर्ड से देखते हैं, आईफोन के लिए भाषा डैनिश है ... उत्सुक ... –

+0

हे! यह मजाकिया है! शायद आपको इसके बारे में ऐप्पल को एक घटना रिपोर्ट दर्ज करनी चाहिए? – Neeku

उत्तर

33

एक्सकोड के फ़ाइल पेड़ (प्रोजेक्ट नेविगेटर) में अपनी प्रोजेक्ट का चयन करें। दाईं ओर फलक में फिर से अपनी परियोजना का चयन करें। जानकारी का चयन करें और अपनी भाषा जोड़ें।

enter image description here

+0

हाय वहाँ, इस पर वैज्ञानिक विधि को गोद लेने के लिए +1, लेकिन क्या आप गिट रिपोज़ से गायब होने वाली गायब .strings फ़ाइलों को शामिल करने का प्रयास कर सकते हैं? InfoPlist.strings में जर्मन, तुर्की और डैनिश गायब हैं ... –

+0

मैंने इसे ठीक किया और एक NSLocalizedString कॉल जोड़ा। मैंने InfoPlist को Localizable.strings, डिफ़ॉल्ट नाम में बदल दिया। मुझे नहीं पता, एक्सकोड ने दूसरा नाम क्यों चुना। – vikingosegundo

+0

यह चाल है:] Gracias, Tak और धन्यवाद –

-1

खोजें कि आपका .xib स्थानीयकृत है (आप इसे सही पैनल पर इंस्पेक्टर में पाएंगे) यदि ऐसा है तो अपनी परियोजना/लक्ष्य-सेटिंग्स पर जाएं + -Sign दबाएं और "अंग्रेजी में डुप्लिकेट अंग्रेजी" चुनें या कुछ जिसका मतलब है (मैं इस समय सही आइटम की जांच नहीं कर सकता)

बीटीडब्ल्यू इसे आईफोन 4 एस कहा जाता है।

+0

मैं डिज़ाइन के लिए .xibs का उपयोग नहीं करता हूं। सभी इंटरफेस को व्यू कंट्रोलर के रूप में प्रोग्राम किया जाता है। –

+0

MainWindow.xib के बारे में क्या? –

+0

जैसा कि कहा गया है, मैं इंटरफ़ेस बिल्डर का उपयोग नहीं कर रहा हूं। मैं प्रोग्रामिंग रूप से अपने सभी विचारों का निर्माण। –

2

आप मानक UI तत्व उस भाषा में प्रदर्शित करने के लिए डेनिश में अपने ऐप स्थानीय बनाना चाहिए:

configure i18n


मैं एक sample project बनाया, इस परिणाम है। मिश्रित भाषाओं के साथ यूआई रखने से बचने के लिए यह है।

यदि आप xibs का उपयोग नहीं करते हैं, तो आप आमतौर पर Localizable.strings फ़ाइल को अपनी प्रोजेक्ट में जोड़कर ऐसा करेंगे। एक्सकोड के "फ़ाइल जोड़ें" संवाद में, आप इसके लिए "स्ट्रिंग्स फ़ाइल" टेम्पलेट ("संसाधन" के तहत) का उपयोग कर सकते हैं।

वास्तव में, तार फ़ाइल स्थानीय बनाना फ़ाइल निरीक्षक (1) खोलने के लिए और "स्थानीयकरण" खंड में + बटन क्लिक करें। आप प्रत्येक भाषा के लिए उप-प्रविष्टि के साथ प्रोजेक्ट नेविगेटर में समूह के रूप में प्रदर्शित होने वाली फ़ाइल के साथ समाप्त हो जाएंगे।

"Label_Text" = "Smørrebrød"; 

अपने कोड में स्थानीय तार का उपयोग करने के (अर्धविराम भूल नहीं है), तो आप NSLocalizedString मैक्रो इस तरह उपयोग कर सकते हैं:

तार फ़ाइल स्वरूप है

myLabel.text = NSLocalizedString(@"Label_Text", nil); 

(दूसरा पैरामीटर एक टिप्पणी के लिए है। यह उपयोगी हो सकता है यदि आप genstrings उपकरण का उपयोग अपने कोड से स्थानीय अक्षरों को निकालने और आर को देने के लिए करते हैं एक पेशेवर अनुवादक को फाइल का पालन करना।)

यदि आप अंग्रेजी तारों को चाबियों के रूप में उपयोग करते हैं, तो आप Localizable.strings के अंग्रेजी संस्करण को खाली छोड़ सकते हैं (लेकिन इसे हटाएं नहीं)।

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

2

यदि आप इसे आधिकारिक तरीके से काम नहीं कर पा रहे हैं, जैसा कि @vikingosegundo द्वारा प्रदान किया गया है, तो आप इसे कुछ रचनात्मक इंजीनियरिंग (क्रिएटिव के रूप में, मेरे भगवान जो खतरनाक है) के साथ कर सकते हैं। जब मैंने गलती से [NSBundle localizedStringForKey:value:tableName:] ओवरराइड किया तो मैंने इस विधि की खोज की।

1) निम्न विधियों के साथ NSBundle के एक वर्ग जोड़ें:) ब्लॉक:

#import <objc/runtime.h> 

+ (void) load { 
    Method original, swizzled; 

    original = class_getInstanceMethod(self, @selector(localizedStringForKey:value:table:)); 
    swizzled = class_getInstanceMethod(self, @selector(swizzled_localizedStringForKey:value:table:)); 
    method_exchangeImplementations(original, swizzled); 
} 

- (NSString*) swizzled_localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName { 

    NSLog(@"Key: %@. Value: %@", key, value); 

    return [self swizzled_localizedStringForKey: key value:value table:tableName]; 
} 

2) कहाँ मैं बस कुंजी/मान प्रवेश करें, तो आप एक अगर ([XXX कुंजी isEqualToString] रखना चाहते हैं। वहां, आप निम्न कुंजी मानों (कम से कम कुछ) को पकड़ना चाहते हैं: कट, कॉपी करें [मेनू], चुनें, सभी का चयन करें, पेस्ट करें, हटाएं [मेनू], बदलें ..., परिभाषित करें, बोलें, रोकें। ये डिफ़ॉल्ट मान हैं जो वहां दिखाई दे सकते हैं।

3) जब आप मूल्य पकड़े हैं तो आप एक कस्टम टेबल में देख सकते हैं या हार्डकोडेड मानों का उपयोग कर सकते हैं। यदि आप एक कस्टम टेबल में देखते हैं तो सुनिश्चित करें कि आपकी कस्टम तालिका में अनंत लूपिंग से बचने के लिए आपके स्विजल्ड विधि में कैच है।

एनबी: आपको घूमने की आवश्यकता क्यों है? क्योंकि यह आपके ऐप के लिए सभी ऐप्पल टेक्स्ट से अधिक सवारी करता है। आप अभी भी अन्य सभी तारों के लिए डिफ़ॉल्ट चाहते हैं, इसलिए आपको उन स्ट्रिंग्स के लिए डिफॉल्ट प्राप्त करने की आवश्यकता है, जिनमें आप रुचि नहीं रखते हैं।

शुभकामनाएं। पॉल

2

YES को Info.plist में "स्थानीय संसाधनों को मिश्रित किया जा सकता है" ध्वज जोड़ने/सेट करने का प्रयास करें।

2

आप इसे सीधे info.plist में कर सकते हैं। इस तरह कुछ:

<key>CFBundleDevelopmentRegion</key> 
<string>en</string> 
<key>CFBundleLocalizations</key> 
<array> 
    <string>en</string> 
    <string>de</string> 
    <string>es</string> 
    <string>ja</string> 
</array>