2008-10-10 57 views
2

我們正試圖優化我們的本地化測試。本地化測試,使用XXXXX格式化所有字符串

我們的QA小組建議採用一種特殊模式,強制資源中的所有字符串完全包含X.我們已經API劫持LoadString和MFC的實現,所以它不應該是一個主要的障礙。

我的問題是你將如何解決格式化問題?

Examples - 

CString str ; 
str . LoadString (IDS_MYSTRING) ; 

where IDS_MYSTRING is "Hello World", should return "XXXXX XXXXX" 
where IDS_MYSTRING is "Hello\nWorld", should return "XXXXX\nXXXXX" 
where IDS_MYSTRING is "Hello%dWorld", should return "XXXXX%dXXXXX" 
where IDS_MYSTRING is "Hello%.2fWorld", should return "XXXXX%.2fXXXXX" 
where IDS_MYSTRING is "Hello%%World", should return "XXXXX%%XXXXX" 

因此總之,如果在printf或Format語句中使用字符串,它應該能夠工作,它應該兌現轉義字符。

所以這是一個純代碼問題,C++/MFC,

CString ConvertStringToXXXX (const CString& aSource) 
{ 
    CString lResult = aSource ; 

    // Insert your code here 

    return lResult ; 
} 

我知道這可以用在.RC文件的工具來完成,但我們要建立英文,然後運行像這樣 -

應用-L10NTEST

+0

將文本轉換爲Xes的目標是什麼?確定任何缺少的(非資源綁定)字符串? – RobS 2008-10-10 06:43:29

+0

是的,我們想運行一些基本的自動化測試來檢查沒有硬編碼字符串被引入。 – titanae 2008-10-10 07:32:16

回答

3

如果此方法是突出顯示應用程序中格式化的字符串(或格式序列)(即出現在XXXX以外的所有文本),你可以找到轉義序列(可能使用正則表達式)並在格式化(替代)值周圍插入塊引號,例如
某些\ ntext文本

您獲得可讀性(所有字符串作爲XXX可能很難使用該應用程序)並且還可以檢測非資源(硬編碼)字符串。儘管如此,如果你想檢測非資源加載字符串(硬編碼字符串),而不是用X代替,爲什麼不只是在字符串前加上?您可以輕鬆地從硬編碼字符串中輕鬆地告訴資源加載的字符串,例如
Some \ ntext - > [ZH] Some \ ntext

希望它有幫助嗎?

+0

其實前綴是一個好主意,我會在下週嘗試這個,簡單的解決方案總是更好。 – titanae 2008-10-10 07:32:49

0

你可以在這裏申請編譯原理和使用產生flex/bison(法/ yacc的,或任何工具)掃描儀和解析器。您可以將\ w +定義爲單詞,它可以匹配「Hello」和「World」等。

0

我認爲你需要的是一個XXXX語言環境,如果你的軟件支持語言環境。

您用英語開發它,然後切換到XXXX區域設置以確保一切都可以翻譯。

1

appTranslator的僞本地化功能可以幫助你:它修改未翻譯的字符串使用變音符號,文本擴大或縮短等。到目前爲止,你不感興趣。變得有趣的地方在於它可以將這些字符串括在括號內。這個想法是讓一個字符串是僞本地化的更明顯。你可以用它來檢測字符串是否來自字符串表而不是代碼。

當然,由於僞本地化程序必須正常運行,appTranslator會保留所有格式化程序(包括類似printf和FormatMessage的格式化程序)和特殊字符(如%或\ n)。這是你在找什麼。

您甚至不需要修改代碼:只需創建一個「虛擬」翻譯。 「虛擬」是指你不打算翻譯你的應用的語言。將應用程序的語言首選項設置爲該語言。 等等,這更好:QA的人可以完全靠自己做。他們甚至不必打擾你! :-)

聲明:我是appTranslator的作者。

編輯:回覆您的評論: 很高興看到你已經使用appTranslator。 爲了避免由於對話框或字符串不在L10N DLL中導致的問題,您可以簡單地重新構建DLL(例如,使用VS項目中的後鏈接步驟)。該進程會自動重新掃描源exe文件,並在構建的資源dll中合併新文本和修改後的文本(不會影響appTranslator項目文件,而不是「更新源」)。這有助於確保您的資源DLL始終與您的exe同步。

0

我的最終解決方案是在字符串前添加「* [resource instance name] original string」。它運行得非常好,它顯示了可能不適合德語的字符串。

示例:從appres.dll

原始字符串, 「我的應用」

從appres.dll新建字符串 「* [appres]我的應用」。

感謝您的所有建議。

0

我更喜歡當我在微軟進行僞本地化時使用的一種機制,它涉及在每個本地化資源周圍放置大括號。例如,Resource => [-Resource-]。然後你總是可以告訴你有一個組合的字符串,並且格式通常不會改變,除非有斷行規則。我們通常還做了一些字符串擴展(在原始字符串周圍添加各種字符),以及一些基於字典或隨機化的字符替換(將「o」轉換爲「ö」)。

有些團隊還將文字資源標識符(名稱)作爲本地化資源的值,對於本地化人員比對測試人員更有用,因爲他們可以看到資源在UI中實際使用的位置。