2013-02-20 26 views
30

साथ NSLocalizedString मैं इस स्ट्रिंग के लिए NSLocalizedString का प्रयोग करेंगे:प्रारूप

[NSString stringWithFormat:@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", individual.contactInfo, individual.name]; 

stringWithFormat का उपयोग करते समय इससे पहले कि मैं निम्नलिखित तरीके से यह उपयोग किया है:

[NSString stringWithFormat:@"%d %@", itemCount, NSLocalizedString(@"number of items", nil)]; 
+0

हॉट लिक्स का सही उत्तर है, लेकिन मैं यह भी सुझाव देना चाहूंगा कि http://nshipster.com/nslocalizedstring/ –

+0

मुझे लगता है कि मेरा जवाब एम्बेडेड उद्धरणों को संभाल नहीं करता है, लेकिन वे मूल में टूटा हुआ था। –

+0

स्थानीय तारों के लिए आईओएस कार्यान्वयन का एक स्पष्ट लघु-आकृति यह है कि टिप्पणी कुंजी के हिस्से के रूप में शामिल नहीं है। इस कारण से आप एक ही अंग्रेजी शब्द के साथ दो अलग-अलग संदेश प्राप्त कर सकते हैं लेकिन अलग-अलग टिप्पणियां कर सकते हैं, और ओएस (स्पष्ट रूप से) उन्हें असंतुष्ट करने में सक्षम नहीं होगा। –

उत्तर

64
[NSString stringWithFormat:NSLocalizedString(@"Is “%@“ still correct for “%@“ tap “OK“ otherwise tap “Change“ to choose new contact details", @"Query if parm 1 is still correct for parm 2"), individual.contactInfo, individual.name]; 
+0

आह तो NSLocalizedString '% @' पहचानता है? –

+8

नहीं, लेकिन stringWithFormat करता है। –

+0

यदि आप स्विफ्ट पर हैं, तो आप 'स्ट्रिंग (प्रारूप: NSLocalizedString ("foo% @ baz"), "bar") का उपयोग कर सकते हैं। –

24

को देखते हुए वाक्य हो सकता है परिवर्तनीय भागों के साथ कुछ भाषाओं में एक अलग क्रम में बनाया गया तो मुझे लगता है कि आपको [NSString stringWithFormat:] के साथ स्थितित्मक तर्कों का उपयोग करना चाहिए:

NSString *format = NSLocalizedString(@"number_of_items", @"Number of items"); 

कौन सा अंग्रेजी के लिए निम्न स्ट्रिंग लोड होगा:

@"Is \"%[email protected]\" still correct for \"%[email protected]\" tap \"OK\" otherwise tap \"Change\" to choose new contact details" 

और शायद फ्रेंच के लिए कुछ और (मैं फ्रेंच पता नहीं है इसलिए मैं एक अनुवाद का प्रयास नहीं करेंगे, लेकिन यह अच्छी तरह से हो सकता था भिन्न क्रम में पहले और दूसरे तर्क):

"French \"%[email protected]\" french \"%[email protected]\" french" 

और आप सुरक्षित रूप से सामान्य रूप में स्ट्रिंग स्वरूपित कर सकते हैं:

NSString *translated = [NSString stringWithFormat:format individual.contactInfo, individual.name]; 
+0

आपको अंग्रेज़ी संस्करण में स्थिति-निर्दिष्ट टोकन का उपयोग करने की आवश्यकता नहीं है (यदि आदेश बिना अनुरूप है)। यदि आवश्यक हो तो भी उन्हें फ्रांसीसी (या जो भी हो) में उपयोग किया जा सकता है। –

+1

@ हॉटलिक्स मुझे लगता है कि अगर हर जगह इस्तेमाल किया जाता है तो उन्हें हर जगह इस्तेमाल करना समझ में आता है। – trojanfoe

+1

ज्यादातर मामलों में गलत होने के लिए बस एक और चीज। –

11

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

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

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

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

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

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

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

एक आकर्षण और बहुत सुरुचिपूर्ण काम करता है। – agarcian

+3

नोट, हालांकि, यह 'जेनस्ट्रिंग्स' टूल को मारता है जो केवल NSLocalizedStrings के प्रत्यक्ष संदर्भों की खोज करता है। यह मैक्रोज़ को संसाधित नहीं करता है। – AHM

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