2011-12-06 41 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 

我從哪裏得到增量文件?爲了我的理解,如果我使用版本控制(git/svn),「舊」文件在幾次提交之前,增量文件是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指定古老的英國廈門國際銀行
  • --incremental-file path/to/inc.xib指定歲的法國廈門國際銀行
  • --write path/to/new.xib指定將要創建的新法國廈門國際銀行
  • mod.xib指定新英文xib

關於你如何開始這個過程的其他問題,真的取決於你將如何本地化你的xib。顯然,您將創建xib的新語言版本(在XCode中,您只需將語言添加到xib的語言列表中,並且會自動創建本地化的xib)。然後,如果您自己將它們本地化到Interface Builder中,那麼您只需在本地化的xib中進行相關更改(文本翻譯和任何必要的調整大小)即可。或者您可以將xib中的文本解壓縮到.strings文件中,並將它們翻譯並注入這些xib的相關語言版本中。爲此,您將再次使用ibtool,但--generate-strings-file用於萃取階段,--import-strings-file用於注入階段。

+0

於生產 「老廈門國際銀行英國」 如果我使用的版本控制的任何提示? – Eimantas

+0

假設你所有的xib都在版本控制中(他們絕對應該是!),舊版本的英文版xib在你的版本歷史中可以使用。我們正在設想英語是您的基本語言,您將從中翻譯。 – Clafou

+0

對,爲了得到那個舊的英文文件,我應該從最後更新的翻譯版本控制中檢查出來。這似乎有點乏味。我想我沒有別的辦法可以做。感謝您的回答! – Eimantas

3

我爲git項目編寫了一個腳本,可以自動執行必要的步驟(如上面的answer所述),以便將更改遷移到其他語言。

用法:

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

例子:

你致力於英語廈門國際銀行文件的更改後,運行在你的資源文件夾的根目錄下的腳本。

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