2012-12-21 16 views
6

लौटा रहा है मुझे अपने NSLocalizedString कार्यान्वयन को डिबग करने में कुछ परेशानी हो रही है। सरल होना चाहिए, लेकिन जो भी मैं करता हूं, फ़ंक्शन केवल KEY स्ट्रिंग देता है।आईओएस - NSLocalizedString केवल कुंजी स्ट्रिंग

मैं XCode 4.5 और iOS6, इसलिए मैं उपयोग कर रहा हूँ:

  1. जोड़ा एक नई फ़ाइल File.strings कहा जाता है।
  2. मेरी परियोजना सेटिंग्स में मैंने अंग्रेजी और स्पेनिश भाषा सेटिंग्स के रूप में जोड़ा।
  3. फ़ाइल निरीक्षक में "स्थानीय बनाएं" पर क्लिक किया गया, और यह सुनिश्चित किया कि अंग्रेजी और स्पेनिश दोनों विकल्प चुने गए थे, और यह भी कि मेरे लक्ष्य के लिए लक्ष्य सदस्यता का चयन किया गया था।
  4. को मेरी अंग्रेजी File.strings
  5. जोड़ा गया "KEY" = "TestSpanish";"KEY" = "TestEnglish"; जोड़ी करने के लिए अपने स्पेनिश File.strings
  6. जोड़ा गया NSLog(@"Localization: %@\n", NSLocalizedString(@"KEY", nil)); मेरी .m फाइल करने के लिए।

जब मैं अनुप्रयोग चलाने, मूल्य "KEY" हमेशा NSLog में मुद्रित प्रदर्शित होता है।

इस में कूद करने के लिए थोड़ा और, मैं इस रूप में अच्छी तरह करने की कोशिश की:

NSString *path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"]; 
NSString *str = [[NSBundle bundleWithPath:path] localizedStringForKey:@"KEY" value:@"" table:nil]; 
NSLog(@"Localization: %@\n", str); 

और अभी भी मूल्य "KEY "छपा है, फिर भी, path कोई मान्य पथ है

किसी को भी किसी भी है। सुराग कैसे इस डिबग करने के लिए? मुझे लगता है कि मैं हर तो सवाल पढ़ा है/वहाँ बाहर का जवाब है, लेकिन सुझाव से कोई भी मदद करते हैं।

मुझे लगता है कि NSLocalizedString रिटर्न KEY स्ट्रिंग जब यह एके मेल नहीं खा सकता आई, लेकिन मुझे नहीं लगता कि मैं कैसे डिबग कर सकता हूं कि मेरा ऐप कुंजी से मेल नहीं खा रहा है।

मैंने ऐप को एक दर्जन बार भी हटा दिया/साफ़ कर दिया है।

+0

'तालिका: शून्य' तालिका नहीं होनी चाहिए: @ "फ़ाइल" 'इसके बजाय? –

+0

@ एच 2CO3: वाह, हाँ, धन्यवाद। यह अंग्रेजी संस्करण को पकड़ता है, और मैं बहुत खुश हूं कि काम करता है।लेकिन आखिरकार, मुझे काम करने के लिए NSLocalizedString की आवश्यकता है ताकि मैं उस विधि की सुविधा का उपयोग कर सकूं। क्या मुझे NSLocalizedString को काम करने के लिए कुछ और करने के लिए "File.strings" का नाम बदलने की आवश्यकता है ??? – Brett

+0

आप उन सभी स्थानीयकरणों को रखेंगे जिन्हें आप "XXX.lproj/localized.strings" तक पहुंचने की उम्मीद करते हैं। इसके अलावा, आपको ** NSLocalizedString() 'का उपयोग क्यों करना है? –

उत्तर

10

यदि आप table:nil निर्दिष्ट करते हैं, तो NSBundle स्थानीय तालिका को स्थानीय तालिका (SOMELANG.lproj/Localizable.strings में से) लाने का प्रयास करेगा। आप स्थानीयकरण कहीं और है, तो आप स्पष्ट रूप से table:@"File" का उपयोग कर तालिका निर्दिष्ट करना चाहिए (या एक समान तरीके से NSLocalizedStringFromTable() मैक्रो का उपयोग:)

NSString *value = NSLocalizedStringFromTable(@"key", @"File", nil); 
+0

बिल्कुल सही! धन्यवाद! – Brett

0

Localizable.strings को InfoPlist.strings फ़ाइल (डबल CLIC का नाम बदलें और फिर आप । उस कुंजी के लिए सही स्ट्रिंग मिल जाएगा

1

मेरे मामले में मुद्दा स्ट्रिंग के मामले के साथ था: "bla.bla.blabla.Book एस बहुत" जबकि Localizable.strings था यह "परिभाषित bla.bla.blabla.Book एस बहुत "

तो, दोबारा जांचें कि कुंजी स्ट्रिंग सही मामले में है। अभी तक बेहतर, कॉपी पेस्ट।

+0

वे समान हैं ... – Warpzit

+0

@Warpzit, उनके मामले में - शायद। मैं बस संकेत कर रहा हूँ कि चाबियाँ केस संवेदनशील हैं। – user3099609

+0

आप कह रहे हैं कि मुझे एक्स = एक्स के साथ समस्या थी ... यह कोई मुद्दा नहीं है, अब अगर आपने मेरे मामले एक्स में कहा था! = वाई। यह समझ में आता है ... – Warpzit