2012-08-02 17 views
9

मेरे पास वर्तमान में semi-automated way है जो मेरे विचारों को स्थानीयकृत करने के लिए है। हालांकि, आज मुझे आईबी में एक दिलचस्प अनुभाग मिला, जो ऐसा लगता है कि मैं इंटरफेस बिल्डर के भीतर से अपने विचारों को स्थानीयकृत कर सकता हूं।"उपयोगकर्ता परिभाषित रनटाइम विशेषताओं" का उपयोग करके स्टोरीबोर्ड के भीतर एक दृश्य को स्थानीयकृत करें

तो आईबी में आप पहचान निरीक्षक में किसी चयनित ऑब्जेक्ट के लिए रनटाइम विशेषताओं को परिभाषित कर सकते हैं। तो मेरे UILabel के लिए मैं अपने लेबल के text कीपैथ को स्ट्रिंग Hello World पर सेट कर सकता हूं।

हालांकि, जब मैं Type = Localized String चुनता हूं और फिर मेरे Localized.strings में एक कुंजी का नाम मुझे अनुवादित स्ट्रिंग नहीं मिलती है बल्कि आईबी में दर्ज की गई मान (इसलिए कुंजी) है।

मुझे समझ में नहीं आता कि यह तंत्र कैसे काम करता है। मैं प्यार इस तरह के मेरे विचारों का अनुवाद करने में सक्षम होने के लिए, कोई विचार?

+1

मैं बिल्कुल एक ही बिंदु पर हूं। क्या आपको इसके बारे में कुछ मिला है? –

उत्तर

4

"उपयोगकर्ता परिभाषित रनटाइम विशेषताएँ" खराब दस्तावेज हैं। मैं जो कुछ पुस्तक पढ़ता हूं उससे मुझे याद है, कि यूडीआरए को पहली बार मैकॉक्स प्रोग्रामिंग के लिए लागू किया गया था, इसलिए टाइप "लोकलाइज्ड स्ट्रिंग" एक ऐसी सुविधा हो सकती है जो अब आईओएस में पूरी तरह समर्थित नहीं है।

मजाकिया बात यह है कि वह स्टोरीबोर्ड पूर्वावलोकन (xCode 4.5.1) में स्ट्रिंग का अनुवाद कर रहा है, लेकिन बाद में संकलित आईओएस ऐप में, वह सिर्फ कुंजी स्ट्रिंग इंजेक्शन कर रहा है।

एक समाधान जो मैं अभी सोच रहा हूं, एक छोटी सहायक वर्ग बनाना है, जो "कुंजी" जैसे कीवर्ड के लिए viewDidLoad पर विचारों के शीर्षक/पाठ तारों की जांच कर रहा है, उदा। "XYControllerTitleKey", और फिर उस पर NSLocalizedString-Method बनाते हैं।

+1

डाउनवॉटेड क्योंकि उत्तर सटीक नहीं है (कम से कम एक्सकोड के वर्तमान संस्करण में): "लोकलाइज्ड स्ट्रिंग" प्रकार का अर्थ है कि रनटाइम विशेषता स्थानीयकरण प्रक्रिया में भाग लेगी, एक सादा "स्ट्रिंग" प्रकार का उपयोग करने के विपरीत। यदि आप स्टोरीबोर्ड से स्ट्रिंग फ़ाइल जेनरेट करते हैं तो आप इसे देख सकते हैं: यदि आप "स्ट्रिंग" का उपयोग करते हैं तो मूल्य जेनरेट स्ट्रिंग फ़ाइल में शामिल नहीं किया जाएगा; यदि आप "लोकलाइज्ड स्ट्रिंग" का उपयोग करेंगे तो यह होगा। –

+0

जैसा कि मेरी दूसरी टिप्पणी में बताया गया है: स्थानीयकरण प्रक्रिया के लिए उपकरण यूडीआरए का ख्याल रखते हैं, हालांकि, आईओएस रनटाइम नहीं करता है। UDRA के लिए मान .strings फ़ाइल से नहीं लिया गया है। –

1

मेरे लिए, आईओएस 6 का उपयोग करके, यदि आप अपने बेस स्थानीयकृत स्टोरीबोर्ड से अपने तार उत्पन्न करते हैं (एक्सकोड उत्पन्न करके या ibtool --generate-strings-file का उपयोग करके आप इस तरह दिखने वाले स्वत: उत्पन्न स्ट्रिंग प्राप्त करेंगे (उदाहरण के लिए MainStoryBoard.strings में जाना चाहिए) :

/* Class = "IBUITextField"; b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Event Name"; ObjectID = "b4a-O4-bNZ"; */ 
"b4a-O4-bNZ.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Event Name"; 

दुर्भाग्य से, यह है उन्हें कुंजी पथ से पहचान के लिए अच्छा होगा, लेकिन कम से कम आप स्थान है जहाँ आपका उपयोगकर्ता परिभाषित तार स्थानीय होना चाहिए

6

"स्थानीयकृत के प्रयोजन। स्ट्रिंग "प्रकार आपको रनटाइम विशेषता मान को परिभाषित करने देता है जो लो में भाग लेगा कैलाइजेशन प्रक्रिया (आधार स्थानीयकरण का उपयोग कर)। यह आसान है अगर उदाहरण के लिए आप कस्टम नियंत्रण को परिभाषित करते हैं, तो इसे स्टोरीबोर्ड में शामिल करें और अपनी संपत्तियों में से एक को स्थानीयकरण योग्य स्ट्रिंग असाइन करना चाहते हैं। हालांकि यह केवल आईओएस पर नहीं, मैक ओएस पर काम करता है।

आप आसानी से निम्नलिखित प्रयोग करने की पुष्टि कर सकते हैं: अपने स्टोरीबोर्ड में एक UILabel/NSTextField डालें और उपयोगकर्ता परिभाषित रनटाइम विशेषता का उपयोग करके "टेक्स्ट"/"stringValue" प्रॉपर्टी सेट करें। यदि आप विशेषता के प्रकार के रूप में "स्ट्रिंग" का उपयोग करते हैं और संबंधित स्ट्रिंग फ़ाइल जेनरेट करते हैं तो आप इसे फ़ाइल में कहीं भी नहीं देख पाएंगे। इसके विपरीत, यदि आप प्रकार के "स्थानीयकृत स्ट्रिंग" बदल सकते हैं और उत्पन्न तार फ़ाइल आप इस तरह एक प्रवेश मिल जाएगा:

/* Class = "IBUILabel"; wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0] = "Localized value"; ObjectID = "wij-Kq-q92"; */ 
"wij-Kq-q92.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "Localized value"; 

तो फिर तुम इसी भाषा तार फ़ाइल में इस मूल्य स्थानीयकरण कर सकते हैं। फिर, यह मैक ओएस पर काम करता है, लेकिन आईओएस पर नहीं।

+0

क्या यह केवल मैक ओएस पर काम करता है और 2016 में आईओएस पर नहीं? – helloB

+0

मुझे नहीं पता, मैंने हाल ही में कोशिश नहीं की है। वैसे भी आप उत्तर में वर्णित प्रक्रिया का उपयोग करके इसे आसानी से देख सकते हैं। अगर आप इसे करते हैं तो हमें बताएं :) –

+0

मैं यह कहने के बारे में कह रहा था कि रनटाइम विशेषताएँ यहां एक बेहतर विकल्प हैं और केपैथ के लिए सेटवैल्यू के एक साधारण ओवरराइड के साथ काम करते हैं, इसलिए यह विकल्प मैं साथ जा रहा हूं। इस जवाब में मुझे सबसे अधिक रास्ता मिला: http://stackoverflow.com/questions/21870950/localized-string-with-interface-builder-user-defined-runtime-attributes – helloB

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