2011-12-06 10 views
7

मैं अपना पहला स्थानीयकृत एप्लिकेशन बनाने की कोशिश कर रहा हूं। मेरे पास NSLocalizedString (genstrings टूल के साथ उपयोग के लिए) का उपयोग करके अनुवादित कोड में सभी तार हैं। अब मैं ibtool में कूद रहा हूं। वृद्धिशील स्थानीयकरण कैसे काम करता है? मैनुअल पेज के बारे में, मुझे कुछ इस तरह लिखना चाहिए:वृद्धिशील स्थानीयकरण कैसे काम करता है?

$ ibtool --previous-file path/to/prev.xib \ 
--incremental-file path/to/inc.xib --localize-incremental \ 
--write path/to/new.xib mod.xib 

मुझे वृद्धिशील फ़ाइल कहां मिलती है? मेरी समझ के लिए यदि मैं वर्जन कंट्रोल (गिट/एसवीएन) का उपयोग कर रहा हूं, तो "पुरानी" फाइल कुछ कम समय पहले होती है, वृद्धिशील फ़ाइल diff और path/to/new.xib नव निर्मित xib फ़ाइल है। mod.nib मेरे लिए एक रहस्य है। क्या कोई मुझे समझा सकता है कि यह कैसे काम करता है? इसके अलावा - अगर कोई पिछले संस्करण उपलब्ध नहीं है (यानी वृद्धिशील नहीं है, लेकिन प्रारंभिक स्थानीयकरण) तो मैं xib के स्थानीयकरण को कैसे शुरू करूं?

उत्तर

12

मुझे लगता है कि विशेष रूप से --incremental-file के लिए शब्दावली की उनकी पसंद भ्रम पैदा कर रही है। विचार यह है कि आपके पास दो भाषाओं (स्रोत और लक्ष्य) में आपके xib का पुराना संस्करण है और आपने बाद में इसे अपनी स्रोत-भाषा में बदल दिया है और मिलान करने के लिए लक्ष्य-भाषा संस्करण को अपडेट करना चाहते हैं।

चलो एक उदाहरण लें। आपके पास पहले अंग्रेजी (स्रोत भाषा) में home.xib था और किसी को इसे फ्रेंच (लक्षित भाषा) में अनुवाद करने के लिए मिला। आपने तब से एक नई सुविधा विकसित की है और अब आपके पास अंग्रेजी में home.xib का एक अद्यतन संस्करण है जिसमें आपने एक UILabel और UITextField जोड़ा और चीजों को चारों ओर ले जाया। आपके द्वारा दिखाया गया आदेश आपको फ्रेंच में home.xib का एक अद्यतन संस्करण प्राप्त करने में मदद कर सकता है ताकि उसके पास नया UILabel और UITextField हो और वह चीजें अंग्रेजी की तरह घूमती रहें। ध्यान दें कि आपके नए UILabel और UITextField में आपके द्वारा सेट की गई किसी भी पाठ सामग्री को अंग्रेजी में जोड़ा जाएगा और फिर फ़्रेंच xib में अनुवाद करने की आवश्यकता होगी (लेकिन आप इसे --import-strings-file जोड़कर और एक और फ़ाइल में अनुवाद प्रदान करके स्वचालित कर सकते हैं)।

तो हम आदेश आप इस उदाहरण से पता चला नक्शा यदि:

  • --previous-file path/to/prev.xib निर्दिष्ट करता है पुरानी अंग्रेजी xib
  • --incremental-file path/to/inc.xib पुराने फ्रेंच xib
  • --write path/to/new.xib नई फ्रेंच xib कि बनाया जाएगा निर्दिष्ट करता है निर्दिष्ट करता है
  • mod.xib नया अंग्रेजी xib
निर्दिष्ट करता है

प्रक्रिया शुरू करने के तरीके के बारे में आपके अन्य प्रश्न के लिए, वास्तव में यह निर्भर करता है कि आप अपने xibs को कैसे स्थानांतरित करेंगे। आप स्पष्ट रूप से xibs के नए भाषा संस्करण बनाएंगे (एक्सकोड में, आप केवल xib की भाषा सूची में एक भाषा जोड़ते हैं और स्थानीयकृत xibs स्वचालित रूप से बनाए जाते हैं)। और फिर यदि आप उन्हें इंटरफ़ेस बिल्डर में स्वयं स्थानीयकृत करते हैं, तो आप स्थानीयकृत xibs में प्रासंगिक परिवर्तन (टेक्स्ट का अनुवाद और किसी भी आवश्यक आकार बदलने) को आसानी से कर देंगे। या आप xibs में टेक्स्ट को .strings फ़ाइलों में निकालें, उन्हें अनुवादित करें, और इन xibs के प्रासंगिक भाषा संस्करण में उन्हें इंजेक्ट करें। इसके लिए, आप ibtool का उपयोग करेंगे, लेकिन निकास चरण के लिए --generate-strings-file और इंजेक्शन चरण के लिए --import-strings-file के साथ।

+0

"पुराने अंग्रेजी xib" संस्करण नियंत्रण करता है, तो मैं उपयोग के उत्पादन पर कोई युक्ति? – Eimantas

+0

मान लें कि आपके सभी xibs संस्करण नियंत्रण में हैं (वे निश्चित रूप से होना चाहिए!), पुरानी अंग्रेज़ी xib आपके संस्करण इतिहास में आपके लिए उपलब्ध है। हम इस धारणा पर काम कर रहे हैं कि अंग्रेजी आपकी मूल भाषा है, जिसे आप अनुवाद करने जा रहे हैं। – Clafou

+0

ठीक है, तो बस उस पुरानी अंग्रेजी फ़ाइल को पाने के लिए मुझे इसे अंतिम अद्यतन अनुवाद से संस्करण नियंत्रण से देखना चाहिए। यह थोड़ा थकाऊ लगता है। मुझे लगता है कि मैं कुछ और नहीं कर सकता। आपके उत्तर के लिए धन्यवाद! – Eimantas

3

मैंने गिट परियोजनाओं के लिए एक स्क्रिप्ट लिखी जो आवश्यक चरणों को स्वचालित करता है (जैसा ऊपर answer में वर्णित है) एक अलग भाषा में परिवर्तन माइग्रेट करने के लिए।

उपयोग:

migrate_changes.sh <target_language> <xib file without ending> 

उदाहरण:

के बाद आप अंग्रेज़ी xib फ़ाइल में अपने परिवर्तन के लिए प्रतिबद्ध किया है उन्हें अपने संसाधन फ़ोल्डर की जड़ में स्क्रिप्ट चलाने।

migrate_changes.sh de MyViewController 

स्रोत:

#!/bin/sh 

LANG_FROM='en' 
LANG_TO=$1 
XIB_FILE=$2 

FROM_FILE=${LANG_FROM}.lproj/${XIB_FILE}.xib 
PREV_FILE=${LANG_FROM}.lproj/${XIB_FILE}_old.xib 
TO_FILE=${LANG_TO}.lproj/${XIB_FILE}.xib 

# checkout old version of xib file 
git show `git log -2 --format="%H" $FROM_FILE | tail -n 1`:./$FROM_FILE > $PREV_FILE 

# merge changes 
ibtool --previous-file $PREV_FILE --incremental-file $TO_FILE --localize-incremental --write $TO_FILE $FROM_FILE 

# remove previous version 
rm $PREV_FILE 
संबंधित मुद्दे