2010-08-10 8 views
56

मैंने NSLocalizedString को इनपुट पैरामीटर के रूप में एक चर का उपयोग करने का प्रयास किया है, लेकिन मैं वापस लौटा रहा हूं इनपुट पैरामीटर है। मैं क्या गलत कर रहा हूं? क्या NSLocalized स्ट्रिंग के लिए एक इंडेक्स के रूप में एक चर स्ट्रिंग मान का उपयोग करना संभव है?NSLocalizedString के साथ चर और/या पैरामीटर का उपयोग करना संभव है?

उदाहरण के लिए, मेरे पास कुछ तार हैं जिन्हें मैं स्थानीय संस्करणों को प्रदर्शित करना चाहता हूं। हालांकि, मैं निरंतर स्ट्रिंग के बजाय NSLocalizedString के पैरामीटर के रूप में एक चर का उपयोग करना चाहता हूं। इसी तरह, मैं NSLocalizedString के पैरामीटर में स्वरूपण तत्वों को शामिल करना चाहता हूं, इसलिए मैं स्ट्रिंग के एक स्थानीय संस्करण को उसी प्रारूपण पैरामीटर के साथ पुनर्प्राप्त करने में सक्षम हूं।

केस 1:: मैं निम्न कर सकते हैं चर NSLocalizedstring:

NSString *varStr = @"Index1"; 
NSString *string1 = NSLocalizedString(varStr,@""); 

केस 2: प्रारूपित NSLocalizedString:

NSString *string1 = [NSString stringWithFormat:NSLocalizedString(@"This is an %@",@""),@"Apple"]; 

(कृपया ध्यान दें कि चर कुछ भी हो सकते हैं, सिर्फ एक निश्चित नहीं तारों का सेट।)

धन्यवाद!

उत्तर

4

यह पता चला है कि एक लापता लक्ष्य प्रविष्टि दोष है। बस जांच कर रहा है कि मेरे वर्तमान निर्माण लक्ष्य में Localizable.string फ़ाइल समस्या हल हो गई है!

115

क्या आप चाहते हैं के स्थानीयकृत संस्करण वापस जाने के लिए है "यह एक एप्पल/नारंगी/जो कुछ भी है," यदि आप चाहते हैं:

NSString *localizedVersion = NSLocalizedString(([NSString stringWithFormat:@"This is an %@", @"Apple"]), nil); 

(Ie, NSLocalizedString() और [NSString stringWithFormat:] की नेस्टिंग उलट कर रहे हैं।)

तो प्रारूप स्थानीय होने के लिए, लेकिन नहीं एवजी में मूल्य क्या आप चाहते हैं, ऐसा करते हैं:

NSString *finalString = [NSString stringWithFormat:NSLocalizedString(@"SomeFormat", nil), @"Apple"]; 

और आपके Localizable.strings में:

SomeFormat = "This is an %@"; 
+0

हाँ, लेकिन चर में कुछ "सेब" या "संतरे" नहीं हो सकता है। तो मुझे लचीलापन बनाए रखने की जरूरत है। – futureelite7

+1

मुझे बस मामले में अपना जवाब संलग्न करने दें। – Wevah

+0

बहुत बहुत धन्यवाद; संलग्न उत्तर वास्तव में मैं जो खोज रहा था - और मुझे आशा है कि आपको जल्द ही 'स्वीकार' चेकबॉक्स मिलेगा। – RonLugge

0

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

4

आप अपने स्थानीय स्ट्रिंग में एक से अधिक चर है, तो आप इस समाधान का उपयोग कर सकते हैं:

Localizable.strings

में
"winpopup" = "#name# wins a #type# and get #points# points(s)"; 

और मूल्यों को सम्मिलित करने के stringByReplacingOccurrencesOfString का उपयोग

NSString *string = NSLocalizedString(@"winpopup", nil); //"#name# wins a #type# and get #points# points(s)" 
NSString *foo = [string stringByReplacingOccurrencesOfString:@"#name#" withString:gameLayer.turn]; 
NSString *fooo = [foo stringByReplacingOccurrencesOfString:@"#type#" withString:winMode]; 
NSString *msg = [fooo stringByReplacingOccurrencesOfString:@"#points#" withString:[NSString stringWithFormat:@"%i", pkt]]; 
NSLog(@"%@", msg); 
+0

बहुत उपयोगी! धन्यवाद – david

+41

यह बहुत जटिल लगता है। आप केवल क्रमांकित प्लेसहोल्डर्स का उपयोग कर सकते हैं: '" exampleKey "="% 1 $ @ ने% 3 $ d सेब और% 2 $ d संतरे खरीदे हैं। " ' [एनएसएसटींग स्ट्रिंगविथफॉर्मैट: एनएसएलोकलाइज्डस्ट्रिंग (@ "exampleKey", nil), @ "मार्कस", 4, 3] ' यह आउटपुट होगा: 'मार्कस ने 3 सेब और 4 संतरे खरीदे हैं।' – denbec

+7

और दुनिया भर में अपने अनुवादकों को इस तरह के क्रिप्टोग्राफिक तारों को जाने और समझाने के बजाय। – zeiteisen

21

मैं सिर्फ एक बहुत ही उपयोगी परिभाषा जोड़ना चाहता हूं जिसका उपयोग मैं अपनी कई परियोजनाओं में करता हूं।

#define NSLocalizedFormatString(fmt, ...) [NSString stringWithFormat:NSLocalizedString(fmt, nil), __VA_ARGS__] 

यह आप निम्नलिखित की तरह एक स्थानीय स्ट्रिंग परिभाषित करने के लिए अनुमति देता है::

एंड्रोइड्स संभावना से प्रेरित होकर, मैं अपने header prefix फाइल करने के लिए इस समारोह जोड़ दिया है

"ExampleScreenAuthorizationDescriptionLbl"= "I authorize the payment of %@ to %@."; 

और यह हो सकता है के माध्यम से इस्तेमाल किया:

self.labelAuthorizationText.text = NSLocalizedFormatString(@"ExampleScreenAuthorizationDescriptionLbl", self.formattedAmount, self.companyQualifier); 
4

तेजी के लिए:

let myString = String(format: NSLocalizedString("I authorize the payment of %d ", comment: ""), amount) 
संबंधित मुद्दे