6

में तर्कों को छोड़ने के साथ उन्नत स्थानीयकरण मेरे पास इस स्वरूपित स्ट्रिंग है कि मेरे पास अनुवादक काम कर रहा है।एक्सकोड

////////////////////////////////////// 
// Share Over Twitter 
NSString *frmt = NSLocalizedString(@"Check out the %[email protected] %[email protected] in %[email protected]: %[email protected]", @"The default tweet for sharing sounds. Use %[email protected] for where the sound type (Sound, mix, playlist) will be, %[email protected] for where the audio name will be, %[email protected] for the app name, and %[email protected] for where the sound link will be."); 
NSString *urlString = [NSString stringWithFormat:@"sounds/%@", SoundSoundID(audio)]; 
NSString *url = ([audio audioType] == UAAudioTypeSound ? UrlFor(urlString) : APP_SHORTLINK); 
NSString *msg = [NSString stringWithFormat: 
       frmt, 
       [[Audio titleForAudioType:[audio audioType]] lowercaseString], 
       [NSString stringWithFormat:@"\"%@\"", AudioName(audio)], 
       APP_NAME, 
       url]; 
returnString = msg; 
की वास्तविक और इच्छित परिणाम के साथ

:

अंग्रेजी

 
"Check out the %[email protected] %[email protected] in %[email protected]: %[email protected]" = "Check out the %[email protected] %[email protected] in %[email protected]: %[email protected]" 

जर्मन अनुवाद

 
"Check out the %[email protected] %[email protected] in %[email protected]: %[email protected]" = "Hör Dir mal %[email protected] in %[email protected] an: %[email protected]"; 

ये एक [NSString stringWithFormat:] कॉल करने के लिए पारित कर रहे हैं

+०१२३५१६४१०

अंग्रेजी

 
desired: "Check out the sound "This Sound Name" in My App Name: link_to_sound" 
actual: "Check out the sound "This Sound Name" in My App Name: link_to_sound" 

जर्मन

 
desired: "Hör Dir mal "This Sound Name" in My App Name an: link_to_sound" 
actual: "Hör Dir mal sound in "This Sound Name" an: My App Name" 



समस्या समस्या यह है कि मैं इस धारणा के तहत किया गया है कि -[NSString stringWithFormat:] में गिने चर का उपयोग करके, मैं थाई कर सकता था इस तरह ngs, जहां %[email protected] चर पूरी तरह से छोड़ा गया है। यदि आप ध्यान देते हैं, प्रारूप स्ट्रिंग का जर्मन अनुवाद पहले तर्क (%[email protected]) का उपयोग नहीं करता है लेकिन यह ("ध्वनि") अभी भी आउटपुट स्ट्रिंग में दिखाई देता है।

मैं क्या गलत कर रहा हूं?

उत्तर

7

यह एक बग नहीं है। क्रमांकित तर्क सी मानक का हिस्सा नहीं हैं, लेकिन आईईईई स्टडी 1003.1 का हिस्सा है, जो निम्नलिखित (जोर मेरा) है:

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

ऐसा प्रतीत होता है कि मैं गलत क्या कर रहा था, संख्याबद्ध चर के विसर्जन के बारे में एक धारणा बना रहा है। – coneybeare

+0

यह दिलचस्प है कि यह एंड्रॉइड/जावा में ठीक काम करता है; उनके (अमान्य?) कार्यान्वयन होना चाहिए – Opus1217

0

मुझे एक बग की तरह लग रहा है। मुझे लगता है कि आपको एक बग दर्ज करना चाहिए।

सीएफस्ट्रिंग का स्वरूपण इंजन fprintf से स्वतंत्र है इसलिए कुछ अंतर हो सकते हैं। उदाहरण के लिए,

printf("a %3$s\n", "b", "c", "d"); // prints "a d" 
NSLog(@"a %3$s\n", "b", "c", "d"); // prints "a b" 

आप, क्योंकि एक तर्क की चौड़ाई को ठीक करने की जरूरत नहीं है सभी पिछले विनिर्देशक आपूर्ति की जरूरत जैसे

printf("%2$llx %1$llx\n", 1LL, 2LL); // prints "2 1" 
printf("%2$llx\n", 1LL, 2LL);  // prints "200000000" !! 
NSLog(@"%2$llx %1$llx\n", 1LL, 2LL); // prints "2 1" 
NSLog(@"%2$llx\n", 1LL, 2LL);  // prints "1" 

iPhone OS के printf स्किप के 1 लापता विनिर्देशक पर 4 बाइट, और सीएफस्ट्रिंग के फॉर्मेटर 0 बाइट्स छोड़ देता है।


समाधान हैं:

  1. अपने सूचकांक, उदा पुनर्व्यवस्थित करें

    "Check out the %[email protected] %[email protected] in %[email protected]: %[email protected]" 
    "Hör Dir mal %[email protected] in %[email protected] an: %[email protected]"; 
    

    या

  2. प्रारूप

    [@"%1$10p%2$10p%3$10p%4$10p" stringByAppendingString:frmt] 
    

    का उपयोग सभी तर्क में इस्तेमाल किया जा करने के लिए मजबूर है, और फिर -substringFromIndex: के साथ पहली बार 40 अक्षर बाहर काटना, या

  3. सभी कन्वर्ट ओबीजेसी सी स्ट्रिंग्स (char*) में ऑब्जेक्ट करता है और snprintf का उपयोग करता है।

  4. अपना खुद का स्वरूपण इंजन लिखें।
+0

मैं इन कामकाजों से बचने और फ़ाइलों को वापस अनुवादकों को भेजने की उम्मीद कर रहा था। booooo – coneybeare

+0

क्या आप समझा सकते हैं कि संख्या 2 क्या कर रहा है? – coneybeare

+0

मैंने यहां 5 वां विकल्प लागू करने का प्रयास किया है: http://stackoverflow.com/questions/2946649/nsstringwithformat-swizzled-to-allow-missing-format- क्रमांकित-args जो अनिवार्य रूप से संख्या 4 की तरह है, लेकिन इतना नहीं एक ओवरराइड – coneybeare