2011-07-15 16 views
5

मैंने स्थानीय तारों के साथ एक अजीब समस्या से मुलाकात की है। मेरे पास 'en.lproj' फ़ोल्डर में केवल 'Localizable.strings' है और यह ठीक काम करता है। सभी तार डिवाइस पर दिखाए जाते हैं। लेकिन अगली बार जब मैं इसे संकलित करता हूं और चलाता हूं, तो यह केवल तारों की आईडी दिखाता है। भले ही मैं कुछ भी नहीं बदलूं और केवल & डीबग पर क्लिक करें। और अगली बार यह फिर से ठीक काम करता है और अगली बार फिर आईडी के साथ दिखाया जाता है।एक्सकोड स्थानीयकृत स्ट्रिंग लोड नहीं

तो क्या कोई जानता है कि यह क्यों हो रहा है? यह कष्टप्रद है कि मुझे हमेशा दो बार निर्माण करने की आवश्यकता होती है।

+0

क्या यह कोई त्रुटि दिखाता है? किसी भी तरह फाइल कॉपी नहीं हो रही है। –

+0

कोई भी त्रुटि संदेश नहीं है। – boreas

उत्तर

3

जांचें कि क्या आपके पास अपनी परियोजना में एक से अधिक Localizable.strings हैं। उन्हें एक में विलय कर मेरे लिए हल किया।

मैं एक ही समस्या में चल रहा है:

+0

यदि आपके पास एकाधिक भाषाएं हैं तो यह समस्या का समाधान नहीं करेगा। आपको प्रत्येक भाषा के लिए एकाधिक .lproj फ़ोल्डरों को "Localized.strings" फ़ाइल (+ वांछित अगर InfoPlist.strings वांछित) आवास की आवश्यकता है। यदि आप उन्हें सभी विलय करते हैं, तो आपके पास कई डुप्लिकेट कुंजी होंगी। – GtotheB

+0

@GtotheB अगर मैं आपको सही ढंग से समझता हूं तो आप सभी भाषाओं को एक साथ मर्ज करना चाहते हैं? नहीं, ऐसा मत करो! केवल उन्हीं फ़ाइलों को मर्ज करें जो समान भाषा का उपयोग करते हैं (उदाहरण के लिए सभी en.lproj के साथ Localizable.strings को मर्ज करें और सभी de.lproj से सभी Localizable.strings को अलग करें) – Reggian

+0

मुझे लगता है कि आपका मतलब यही है। हां, भाषा तालिका विलय करने से खराब परिणाम मिलेगा। लेकिन, संयोजन (उदा।) अंग्रेजी तालिकाओं के परिणामस्वरूप डुप्लिकेट कुंजी भी हो सकती है। इसलिए, यदि ऐसा किया जाता है, तो सुनिश्चित करें कि कुंजी पूरी [अब] एकल तालिका में अद्वितीय हैं। – GtotheB

4

मेरे समाधान नीचे स्थित है (किसी भी बाहरी कोड का उपयोग जैसे ShareKit की जाँच करें) एकांतर रन उपज (केवल अंग्रेज़ी के लिए हालांकि) सही है, तो गलत अनुवाद।

अनुप्रयोग के लिए एक तर्क के रूप "-NSShowNonLocalizedStrings हाँ" जोड़ना झुकेंगे:

Localizable string "MyKey" not found in strings table "Localizable" of bundle CFBundle 

तो, मैं कुंजी फ़ाइल सीधे लोड हो रहा है एक स्ट्रिंग के रूप बंडल से और यह डंपिंग की कोशिश की। खैर, यह समय सही ढंग से काम नहीं करता था, यह अंतर्निहित आईओएस संदेशों का एक समूह प्रदर्शित कर रहा था। तो, मैं बनाया गया एपीपी फ़ाइल गया, पैकेज सामग्री खोला, और en.lproj/Localizable.strings फ़ाइल को देखा ... और voila !!! फ़ाइल ऐप्पल आईओएस कुंजी/मूल्य जोड़े से भरा गया था। अगले निर्माण पर, यह उम्मीद के रूप में भरा गया था।

बेशक, इसका फाइलों के एन्कोडिंग (जो यूटीएफ -16 होना चाहिए) के साथ कुछ लेना देना नहीं है। मैं इस विशिष्ट समस्या के उल्लेख के साथ कुछ भी पता लगाने में सक्षम नहीं हूं।

मेरा समाधान:

मैं वैध अंग्रेज़ी Localizable.strings की सामग्री को एप्लिकेशन पैकेज से फाइल कॉपी किया (नहीं मेरे स्रोत से) एक XML फ़ाइल में (जब संकलित, .strings फ़ाइल में बदला जाता है एक्सएमएल) और मेरी परियोजना में जोड़ा गया। फिर मैंने स्टार्टअप पर इस फ़ाइल को एक शब्दकोश में लोड किया, और यदि NSLocalizedString को कॉल ने मूल्य के बदले कुंजी वापस कर दी, तो मैंने लोड किए गए शब्दकोश पर एक लुकअप किया। सिद्धांत रूप में, आप यह सभी भाषाओं के लिए कर सकते हैं, लेकिन मुझे केवल अंग्रेजी के साथ समस्या थी।

हां, यह समस्या का उत्तर नहीं है, लेकिन यह एक कामकाज है।

+0

क्या यह समस्या केवल सिम्युलेटर पर होती है? या दोनों सिम्युलेटर और डिवाइस पर? – JAHelia

+0

यह दोनों में हो रहा था। हालांकि, मैंने अंततः समस्या की पहचान की। आईओएस डेटा के रूप में जो दिखाई दिया वह वास्तव में एक तृतीय पक्ष पुस्तकालय के लिए एक अच्छी तरह से छिपी हुई अंग्रेजी स्थानीयकरण तालिका थी।क्यों दो टेबल के बीच एक्सकोड वैकल्पिक है मेरे बाहर है, लेकिन इसे खत्म करने से समस्या हल हो गई है। – GtotheB

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