2010-03-17 14 views
10

मैं स्ट्रिंग को स्थानीयकृत करने के लिए NSLocalizedString() का उपयोग करने से परिचित हूं, लेकिन आज की समस्या के लिए थोड़ा और अधिक आवश्यकता है। मेरी स्थिति इस तरह है:समेकित या गतिशील तारों को स्थानीयकरण

NSString *userName; //the users name, entered by the user. Does not need localized 
NSString *favoriteFood; //the users favorite food, also entered by user, and not needing localized 

NSString *summary = [NSString stringWithFormat:@"%@'s favorite food is %@", userName, favoriteFood]; 

यह अंग्रेजी के लिए ठीक काम करता है, लेकिन हर भाषा अंग्रेजी के रूप में एक ही शब्द आदेश का उपयोग करता है, उदाहरण के लिए, एक शब्द-दर-शब्द अंग्रेजी जापानी से एक ही sentance का अनुवाद होगा पढ़ें:

उपयोगकर्ता नाम के पसंदीदा भोजन पिज्जा

है नहीं उल्लेख करने के लिए कि है हर भाषा में एक स्वत्वबोधक नहीं है।

इस प्रकार की समेकित वाक्य को स्थानीयकरण के लिए कौन सी तकनीकें उपलब्ध हैं?

अन्य लोगों के लाभ के लिए अद्यतन: @ जोन रीड सही है, स्थानीयकरण के लिए स्थितित्मक विनिर्देशक बहुत महत्वपूर्ण हैं। वह दस्तावेज़ जो केवल उससे जुड़ा हुआ है, इस तथ्य का एक संदर्भ है कि उनका उपयोग एनएसएसटींग, एनएसएलओजी, अन्य लोगों के साथ किया जा सकता है, लिंक वास्तव में उनको उपयोग करने के लिए नहीं बताता है।

मुझे this link मिला, जो इसे अच्छी तरह से समझाता है। यह मेरे प्रश्न से भी बेहतर बताता है। लिंक से: printf और sprintf के लिए

स्वरूप तार (Printf देखें) अनुवाद के लिए एक विशेष समस्या प्रस्तुत करते हैं। निम्नलिखित पर विचार करें: हो सकता है इस के लिए 1

printf(_"String `%s' has %d characters\n", 
      string, length(string))) A possible German 

अनुवाद:

"%d Zeichen lang ist die Zeichenkette `%s'\n" The problem 

स्पष्ट होना चाहिए: प्रारूप विनिर्देशों के आदेश अलग मूल से है! हालांकि Gettext अनुवादित स्ट्रिंग को रनटाइम पर वापस कर सकता है, यह printf को कॉल में ऑर्डर को बदल नहीं सकता है।

इस समस्या को हल करने के लिए, printf प्रारूप विनिर्देशक एक अतिरिक्त वैकल्पिक तत्व है, जो हम एक स्थितीय विनिर्देशक फोन हो सकता है। उदाहरण के लिए:

"%2$d Zeichen lang ist die Zeichenkette `%1$s'\n" Here, the 

स्थितीय विनिर्देशक एक पूर्णांक गिनती, जो इंगित करता है जो तर्क का उपयोग करने के लिए, और एक '$' के होते हैं। गणना एक-आधारित हैं, और प्रारूप स्ट्रिंग स्वयं शामिल नहीं है।

$ gawk 'BEGIN { 
>  string = "Dont Panic" 
>  printf _"%2$d characters live in \"%1$s\"\n", 
>       string, length(string) 
> }' 
-| 10 characters live in "Dont Panic" 

उत्तर

27

प्रतिस्थापन के आदेश को निर्दिष्ट करने के लिए, %[email protected] और %[email protected] का उपयोग अपने प्रारूप विनिर्देशकों के रूप में करें। स्थानीयकृत प्रारूप स्ट्रिंग किसी भी क्रम में उनका उपयोग कर सकती है। उदाहरण के लिए, कहें कि आपकी स्ट्रिंग कुंजी "पसंदीदाफूड" है। कॉल

NSString *summary = 
      [NSString stringWithFormat:NSLocalizedString(@"FavoriteFood", nil), 
             userName, favoriteFood]; 

स्थानीयकरण प्रारूप विनिर्देशकों को अपने लोकेल के लिए जहां भी समझ में आता है, रखता है। उदाहरण:

"FavoriteFood" = "%[email protected] is the favorite food of %[email protected]"; 

String Format Specifiers

+0

मैंने आपके लिंक का पालन किया, और स्थानीयकरण स्ट्रिंग संसाधन (http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPInternational/Articles/StringsFiles.html) को भी पढ़ा। मुझे आपके द्वारा निर्दिष्ट प्रारूप विनिर्देशकों का कोई संदर्भ नहीं दिखाई देता है (% 2 $ @) क्या आप कृपया थोड़ा सा समझा सकते हैं? – SooDesuNe

+1

लिंक का पालन करें, और "स्थितित्मक विनिर्देशकों" की खोज करें। इसके अलावा, इसे आज़माएं। स्थानीयकरण के लिए यह एक आवश्यक उपकरण है। –

+0

आपके उदाहरण के अंत में '% $ 1 @ '' '1% @ @ होना चाहिए। – bovine

-1

प्रारूप स्ट्रिंग @"%@'s favorite food is %@" को NSLocalizedString() को लागू करने की अनुमति चाहिए यह बदला जाएगा: इस प्रकार, निम्न उदाहरण में, 'स्ट्रिंग' पहला तर्क और 'लंबाई (स्ट्रिंग)' रहा है पीछे नहीं है स्थानीय भाषा के लिए उचित शब्द आदेश और अधिकारियों के साथ।

+0

शायद मैं NSLocalizedString गलत देखें। यह प्रतिस्थापन चर के क्रम को बदलने की अनुमति कैसे देता है? – SooDesuNe

+0

@SooDesuNe, मुझे नहीं लगता कि यह करता है; लेकिन आपके उदाहरण में उस समस्या नहीं है। क्या ऐसी कोई भाषाएं हैं जो वस्तु को विषय से पहले रखती हैं? विकिपीडिया मुझे बताता है कि कुछ मूल ब्राजीलियाई भाषाएं हैं, और क्लिंगन ... शायद यह इतना बड़ा सौदा नहीं है? –

+0

@SooDesuNe: जैसा कि जॉन रीड के उत्तर में है, आप ऑर्डरिंग समस्या का ख्याल रखने के लिए स्थिति-विशिष्ट स्ट्रिंग-प्रारूप विनिर्देशों का उपयोग कर सकते हैं। – Isaac

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