2011-12-01 11 views
12

मैं पुर्तगाली में एक आईओएस प्रोजेक्ट का अनुवाद कर रहा हूं और मैंने एक pt.lproj/Localizable.strings फ़ाइल बनाई है, और मैंने स्रोत कोड में NSLocalizedString() को जोड़ा है। यह सब काम करता है! एक मामूली समस्या के साथ - XIB फ़ाइलों के भीतर तारों का अनुवाद नहीं होता है ... मुझे पता है कि यह डिज़ाइन द्वारा है।आईओएस Localizable.strings फ़ाइल?

मैंने देखा है कि ibtool कमांड का उपयोग XIB फ़ाइल से स्ट्रिंग को चिपकाने के लिए किया जा सकता है जिसे x कहा जाता है और इसे x.strings नामक फ़ाइल में डाल दिया जाता है ... लेकिन मेरा सवाल यह है कि स्ट्रिंग को खींचने का कोई तरीका है सभी xib फ़ाइलों से और उन्हें सभी को एक .strings फ़ाइल में डाल दें (जैसे Localizable.strings? या XIBs.strings नामक एक और भी ठीक होगा?)

उत्तर

10

आपके पास xib फ़ाइलों का अनुवाद करने के दो विकल्प हैं। एक आप यूआई तत्वों को आउटलेट से कनेक्ट करते हैं और NSLocalizedString मैक्रोज़ का उपयोग करके अपने दृश्य को अपने दृश्य में सेट करते हैं।

दूसरा विकल्प आपके ऐप का समर्थन करने वाली प्रत्येक भाषा के लिए एक अलग xib प्रदान करना है। आप आप ibtool आदेश का उपयोग कर सकते हैं, उन्हें मैन्युअल रूप से बनाने के लिए की जरूरत नहीं है (मैं मान अपने स्रोत भाषा अंग्रेजी है और लक्ष्य पुर्तगाली है):

ibtool --strings-file pt.lproj/Example.strings en.lproj/Example.xib –write pt.lproj/Example.xib 

अपनी परियोजना आप genstrings आदेश का उपयोग कर सकते हैं में पाया तार को इकट्ठा करने के लिए - हालांकि मैं इस python script का उपयोग करना चाहिये अपने सभी तार इकट्ठा करने के लिए - यह अच्छी तरह से स्थिति को संभाल सकता है जब आप अनुवाद करने के लिए और/या मैन्युअल रूप से विलय सभी पिछले तार

होने संपादित

बिना जोड़ने/अपने अनुप्रयोग के लिए तार को हटाने की जरूरत

ओह और मुझे article मिला कि मैंने

+0

ठीक है, तो ऐसा करने का एक बहुत आसान तरीका नहीं है! मुझे लगता है कि मैं आईबीओटलेट्स रूट करने जा रहा हूं, क्योंकि लगभग 40 निब फाइलें हैं, लेकिन कुछ तार उनके बीच साझा किए जाते हैं (और हम अंततः लगभग 10 भाषाओं को चाहते हैं, इसलिए मुझे लगता है कि लंबे समय तक यह बेहतर होगा!) मुझे लगता है कि मैं बस एनआईबी के माध्यम से जाना होगा और सुनिश्चित करें कि लेबल आदि अन्य भाषाओं के लिए थोड़ा और पाठ समायोजित कर सकते हैं (अन्यथा लेआउट समान होगा)! वैसे भी, मदद के लिए धन्यवाद !! – Javawag

0

से यह चाल सीखा है यह ऐप और स्थानीयकरण की संख्या पर निर्भर करेगा, लेकिन आम तौर पर मैं अलग .xib फ़ाइलों को पसंद करता हूं, क्योंकि लेआउट बदल सकता है। स्थानीय फाइलों को pt.lproj/में रखें।

@implementation UIView (Localise) 

- (void)localise 
{ 
    [self.subviews enumerateObjectsUsingBlock:^(UIView *view, NSUInteger idx, BOOL *stop) { 
     [view localise]; 
     if ([view isKindOfClass:[UILabel class]]) { 
      UILabel *label = (UILabel *)view; 
      [label setText:NSLocalizedString(label.text, nil)]; 
     } 
    }]; 
} 
फिर अपने विचारों में

:

3

मैं यह करने के एक वर्ग बना

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 
    [self localise]; 
} 

आप (अन्य UI तत्व के लिए समर्थन textField.placeholder = NSLocal जोड़ने की आवश्यकता होगी .. .blah blah), लेकिन वह UILabel और बच्चों के लिए चाल करेंगे।

शायद शानदार प्रदर्शन-वार नहीं बल्कि नौकरी करता है।

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