2012-12-18 62 views
13

我想開始看到我們在本地化字符串時在我們的iOS代碼中有多全面。我們還沒有準備好去翻譯,但我想用pseudo localization開始測試。在Localizable.strings文件中自動執行此過程應該很簡單,但似乎找不到任何可以執行此操作的工具。坦率地說,我會滿足於一個腳本,只是把我的所有字符串改爲「不是英文!」如果存在這樣的事情。iOS僞定位有沒有好的工具?

+0

+1,即使其他人可能將此作爲[購物](http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-購物/)問題。 – newenglander

回答

18

的字符串部分解釋您可以通過Translate Toolkit實現此目的。

首先,你需要的.strings文件轉換爲PO使用prop2po轉換器:

$ prop2po Localizable.strings en.po 

這將創建一個PO文件與Localizable.strings文件的字符串作爲源字符串(在這種情況下,我使用英語作爲源)。

一旦您擁有PO文件,請使用desired rewrite format中的podebug進行重寫。

$ podebug --rewrite=unicode en.po en_rewritten.po 

最後將其轉換回.strings格式(請注意,你需要通過原Localizable.strings文件作爲模板):

$ po2prop en_rewritten.po rewritten.strings -t Localizable.strings 

生成的文件看起來像這樣:

"Account: %@" = "Ȧƈƈǿŭƞŧ: %@"; 

"Add command" = "Ȧḓḓ ƈǿḿḿȧƞḓ"; 

"Add connection." = "Ȧḓḓ ƈǿƞƞḗƈŧīǿƞ." 
+0

是的!這正是我所期待的。如果有人在某個時候看到了這一點,並且在安裝(我做過)時遇到問題,說明中使用「su ./setup.py install」時,請使用「sudo python ./setup.py install」。 – Mike

+0

如此接近,我得到了前兩步工作,但不是第三: '%po2prop -t Localizable.strings en_rewritten.po rewritten.strings'' 處理1個文件...' 'po2prop:警告:錯誤處理:輸入en_rewritten.po,輸出rewritten.strings,模板Localizable.strings:'ascii'編解碼器不能編碼位置10-11中的字符:序號不在範圍內(128) [######## ###################################] 100%' –

+0

您的PO文件中是否包含非ascii字符位置評論?如果是這樣,[bug 2101](http://bugs.locamotion.org/show_bug.cgi?id=2101)可能是相關的。 – julen

-1

您可以使用Apple提供的genstrings工具。這一切都在Resource Programming Guide

+0

'genstrings'會生成我的Localizable.strings文件,我已經這樣做了,但是它可以用鍵或值作爲默認值。我正在尋找一些將採用生成器輸出的東西,然後更改僞制本地化的值。 – Mike

1

我們提供僞本地化作爲我們在Tethras服務的一部分(www.tethras.com)。僞本地化是免費的。我們強調字符串中的所有字符,並將文本的長度延長30%。這將幫助您測試不僅是硬編碼的字符串,還會讓您看到由於翻譯過程中的文本擴展而導致佈局會發生什麼。

實例:

純文本

我們提供僞翻譯由於零件ôƒ我們的服務在Tèthrás (www.tèthrás.çôm)。 ôñètwôthrèèƒôúrƒïvèsïxPsèúdôlôçálïzátïñïïšï ƒrèè。 ôñètwôthrèèWèççèñtállôƒthèçháráçtèrsÍñ¥ôrstrïñgs áñdèxtèñdthèlèñgthôƒthètèxtb¥30%。一二三ƒôúrƒïvè六 這將有助於¥OU測試不ONL¥ƒôr硬編碼的字符串,而且還會 讓¥歐看看會發生什麼¥對La¥出局由於文本擴展期間 翻譯。 ôñètwôthrèèƒôúrƒïvèsèvèñèèghtñïñètèñ

可本地化。字符串

"Bring All to Front" = "Brïñg Áll tô ƒrôñt ôñè twô"; 
"Hide" = "Hïdè 12"; 
"Quit" = "Qúït 12"; 
"Hide Others" = "Hïdè Óthèrs ôñè "; 

想要在翻譯之前測試您的應用程序的本地化的可能性。這將在實際翻譯過程中爲您節省大量時間和精力。

3

儘管Translate Toolkit可以提供解決方案我已經使用bash腳本尋找更簡單的方法。 創建[changesDictionary.txt]文件(請參閱本崗位的末端格式),並用語言文件作爲參數運行下面的腳本:

# This script translate iOS strings file into pseudo languge for texting usage. 
# the script create a sed change and replace file based on [changesDictionary.txt]. 
# the loop run across the input string file (ie. myFyle.strings) 
# and replace the secong strings with the dictionary values. 
# since the strings file is in BOM format (http://en.wikipedia.org/wiki/Byte_order_mark) 
# the input is converted from UTF16 to UTF8. 
sed -e 's/^"\(.*\)" = "\(.*\)"$/s\/\1\/\2\/g/' changesDictionary.txt > changesDictionary.sed 

FILENAME=$1 

while read -r; do 
if [[ $REPLY = '/*'* ]] ; then 
    echo "$REPLY" 
else 
    if [[ $REPLY = '' ]] ; then 
     echo "$REPLY" 
    else 
     if [[ $REPLY = '"'* ]] ; then 
      changes2=$(echo "$REPLY" | cut -d= -f2 | sed -f changesDictionary.sed) 
      changes1=$(echo "$REPLY" | cut -d= -f1) 
      echo "$changes1=$changes2" 
         echo "$REPLY" 
     fi 
    fi 
fi 
done < <(iconv -f UTF-16 -t UTF-8 $FILENAME) | iconv -f UTF-8 -t UTF-16 >$FILENAME.new 

將腳本修改爲在A [changeDictionary.txt]文件格式如下:

"a" = "á" 
"b" = "β" 
"c" = "ç" 
"d" = "δ" 
"e" = "è" 
"f" = "ƒ" 
"g" = "ϱ" 
"h" = "λ" 
"i" = "ï" 
"j" = "J" 
"k" = "ƙ" 
"l" = "ℓ" 
"m" = "₥" 
"n" = "ñ" 
"o" = "ô" 
"p" = "ƥ" 
"q" = "9" 
"r" = "ř" 
"s" = "ƨ" 
"t" = "ƭ" 
"u" = "ú" 
"v" = "Ʋ" 
"w" = "ω" 
"x" = "ж" 
"y" = "¥" 
"z" = "ƺ" 
"\ñ" = "\n" 
"$δ" = "$d" 
"$ï" = "$i" 

,你可以用這個例子也可以創建自己,請注意TP文件中的最後3個變化的字符串。這是爲了將行結束和參數恢復到正常狀態。我選擇了這種方法來簡化腳本(我認爲性能沒有優化)。

3

我跨尚未這裏所說的兩種解決方案來:

+1

Babble-on的免費服務的優點是可以獲得兩個文件:ASIAN(帶中文字符),可以更輕鬆地找到未翻譯的字符串,以及EUROPEAN,這比模擬法語和德語等語言要長30% 。這對於測試GUI非常棒。 – Localizer

+0

另一種快速和免費的工具是http://www.pseudolocalize.com - 一次點擊即可獲得pseudolocalized版本 – JerSchneid

+0

@JerSchneid無法與Localizable.strings文件一起使用 –

相關問題