2010-11-17 16 views
5

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

हालांकि, ऐसा करने का मतलब है कि मुझे एप्लिकेशन मेनू में सभी आइटमों का अनुवाद करना होगा, जिनमें पूरी तरह से मानक (फ़ाइल, सहेजें, खोलें, छोटा करें, आदि) शामिल हैं। क्या इससे बचने का कोई तरीका है?

उत्तर

1

तो जाहिर है, इसके आसपास कोई रास्ता नहीं है।

0

मैं थोड़ी देर के लिए एक ऐसी ही समाधान की तलाश में किया गया है और मैं इस संसाधन

http://www.bdunagan.com/2009/03/15/ibtool-localization-made-easy/

यह लेख के अंत की ओर उद्धरण पाया:

ibtool mainmenu के माध्यम से दिखेगा। xib प्रत्येक उपयोगकर्ता-दृश्य स्ट्रिंग के लिए और उस स्ट्रिंग को मुख्य ऑब्जेक्ट आईडी के साथ MainMenu.strings में डालें, अनिवार्य रूप से ऑब्जेक्ट आईडी द्वारा की गई तारों का एक शब्दकोश। इससे भी बेहतर, उपकरण ऑब्जेक्ट आईडी द्वारा उन्हें टाइप करता है, इसलिए संस्करण .strings फ़ाइलें अच्छी तरह से भिन्न हैं। मैं आसानी से देख सकता हूं कि तारों को किस प्रकार जोड़ा गया है, हटाया गया है, या बस बदला गया है। मुझे इसे दोहराने दो क्योंकि यह बहुत ही आसान काम है: .स्ट्रिंग फाइलें अच्छी तरह से भिन्न होती हैं! बेशक, ये .strings फ़ाइलें यूनिकोड हैं, इसलिए वे grep'able नहीं हैं। नीचे एक स्ट्रिंग के आउटपुट का एक उदाहरण है:

आगे बढ़ें और एक नज़र डालें, मुझे उम्मीद है कि यह आपकी मदद करता है जितना उसने मेरी मदद की!

+0

मुझे डर है कि आप मेरी समस्या को गलत समझते हैं: मैं पहले से ही अनुवाद बनाए रखने के लिए ibtool का उपयोग करता हूं। हालांकि, ऐप के सभी मानक मेनू आइटम्स (कॉपी, पेस्ट इत्यादि) का अनुवाद नहीं करना चाहते हैं, इस मुद्दे को संबोधित नहीं करते हैं। –

+0

आह, मेरी इच्छा है कि मैं और अधिक मदद कर सकता था। – austinbv

2

मैंने इस समस्या का समाधान विकसित किया है। "अनुवादक" के लिए

https://www.corecode.io/index_opensource.html

देखो, यह आपके MainMenu.strings के साथ मानक मेनू आइटम स्ट्रिंग्स के लिए मानक एप्पल अनुवाद एक दर्जन से अधिक भाषाओं में दाखिल अनुवाद कर देगा।

यदि आपको कुछ स्ट्रिंग या भाषाएं मिलती हैं जो आपको अपने मूल ऐप्स में शामिल किया गया है, तो कृपया एक पैच भेजें।

https://github.com/core-code/MiscApps/blob/master/Translator/Translator/MainMenuTranslations.plist द्वारा
+0

ध्यान दें कि मैक ओएस एक्स में आने वाली सभी 32 भाषाओं को अब समर्थित किया गया है। इसका मुख्य "डेटाबेस" यहां है, पैच का स्वागत है: https://github.com/core-code/MiscApps/blob/master/Translator/Translator/MainMenuTranslations.plist – user1259710

+0

बहुत आसान, धन्यवाद उपयोगकर्ता 1259710!आइए आशा करते हैं कि एक्सकोड 6 गैर-अंग्रेज़ी डेवलपर्स के लिए डिफ़ॉल्ट रूप से यह सब आसान बनाता है ... – wdyp

+0

"विंडो" कई भाषाओं के लिए गायब है (सभी नहीं)। – Leo

0

अनुवादक शांत है, लेकिन यदि आप अपने निर्माण में 30 MainMenu.string फ़ाइलों से निपटने के लिए नहीं करना चाहते हैं (मैं व्यक्तिगत रूप से नहीं है) - तुम सिर्फ अपने संसाधनों को MainMenuTranslations.plist जोड़ सकते हैं (230KB असम्पीडित छोटे है) और इस तरह मक्खी पर कर:

- (void) processMenu: (NSString*) app { 
    NSDictionary* d = [self loadMenuTranslations: app]; 
    NSMenu* mm = NSApplication.sharedApplication.mainMenu; 
    for (int i = 0; i < mm.numberOfItems; i++) { 
     NSMenuItem* mi = [mm itemAtIndex: i]; 
     mi.title = [self translateMenu: mi.title withDictionary: d]; 
     NSMenu* sm = [[mm itemAtIndex: i] submenu]; 
     sm.title = [self translateMenu: sm.title withDictionary: d]; 
     for (int j = 0; j < sm.numberOfItems; j++) { 
      NSMenuItem* mi = [sm itemAtIndex: j]; 
      mi.title = [self translateMenu: mi.title withDictionary: d]; 
     } 
    } 
} 

- (NSString*) translateMenu: (NSString*) key withDictionary: (NSDictionary*) dictionary { 
    for (NSString* lang in dictionary) { 
     NSDictionary* translation = dictionary[lang]; 
     NSString* t = translation[key]; 
     if (t != null) { 
      return t; 
     } 
    } 
    return key; 
} 

- (NSDictionary*) loadMenuTranslations: (NSString*) app { 
    NSArray* langs = [NSUserDefaults.standardUserDefaults objectForKey: @"AppleLanguages"]; 
    NSURL* url = [NSBundle.mainBundle URLForResource:@"MainMenuTranslations.plist" withExtension: null]; 
    NSMutableDictionary* r = NSMutableDictionary.new; 
    NSDictionary* translations = [NSDictionary dictionaryWithContentsOfURL: url]; 
    for (NSString* lang in langs) { 
     NSString* locale = [NSString stringWithFormat:@"%@.lproj", lang]; 
     NSDictionary* translation = translations[locale]; 
     NSMutableDictionary* d = [NSMutableDictionary.alloc initWithCapacity: translations.count * 3/2]; 
     for (NSString* k in translation) { 
      NSString* v = translation[k]; 
      NSString* key = k; 
      if ([k indexOf: @"APPLICATIONNAME"] >= 0) { 
       key = [k stringByReplacingOccurrencesOfString: @"APPLICATIONNAME" withString: app]; 
      } 
      if ([v indexOf: @"APPLICATIONNAME"] >= 0) { 
       v = [v stringByReplacingOccurrencesOfString: @"APPLICATIONNAME" withString: app]; 
      } 
      d[key] = v; 
     } 
     if (d.count > 0) { 
      r[lang] = d; 
     } 
    } 
    return r; 
} 

बस से

- (void) applicationDidFinishLaunching: (NSNotification*) n { 
    // ... 
    [self processMenu: @"<your app name>"]; 
} 

इसे कहते काश एक UniversalTranslation.plist कहीं नहीं है (शायद का रचनात्मक उपयोग के माध्यम से स्वचालित रूप से एकत्र किया जा सकता है जो translate.google.com)

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