2008-09-03 33 views
9

我試圖將我編寫的任何應用程序中使用的所有字符串(以及其他常量)進行外部化,原因很多,可能是大多數堆棧溢出器的第二性質,但有一件事我希望能夠自動化拼寫檢查任何用戶可見的字符串。這帶來了幾個問題:將拼寫檢查器與構建過程結合的最佳方法

  • 並不是所有的字符串是用戶可見的,這是不平凡的spearate他們,並保持該分離到位(但可能
  • 大多數,如果不是我使用的所有字符串外部化方法都涉及不會通過拼寫檢查程序的重要文本,例如aspell/ispell(例如:theStrName =「some string。」和註釋)
  • 許多拼寫檢查程序(再一次,aspell/ispell)不要處理很多單詞(通常是技術術語,專有名詞,或只是'新'術語,如元數據)。

如何將這樣的東西加入到構建過程/測試套件中?在某個應用程序每次更改時手動拼寫檢查所有字符串是不可行的 - 並且沒有機會他們將在第一次拼寫正確。

+1

我從來沒有見過這種自動化的,但如果你這樣做,使它成爲一個建立警告,而不是一個錯誤。你想在你的手中的最後一件事是構建失敗,因爲有些字典只知道「電子郵件」,而不是「電子郵件」 – slf 2009-09-09 15:35:37

+0

啊,非常好點! – rcreswick 2009-09-09 23:44:07

回答

1

我們手動完成,如果在測試過程中沒有找到錯誤,那麼它們會被質量檢查團隊或翻譯人員在本地化過程中或在本地化質量檢查過程中收集。然後我們提出一個錯誤。

我們的大部分開發人員不是英語爲母語的人,所以對我們來說這並不罕見。穿過裂縫的數量非常少,這對我們來說是一個令人滿意的解決方案。

沒有超過幾百行是完全沒有錯誤的(好吧......也許是一塊奇怪的嵌入式代碼),只要把錯誤看成錯誤,不要浪費太多時間就可以了。

只要您的應用程序成熟,超過90%的字符串在發佈之間不會發生變化,並且比較兩個版本的資源,找出新的(先檢查它們)是一個相當簡單的練習,什麼改變/更新(檢查下一個)和什麼沒有改變(不需要檢查這些)

所以想想它更像是我需要手動檢查所有這些,第一次,我只會去下次必須檢查其中的10%。現在問自己,你是否真的需要自動化拼寫檢查。

-1

使用aspell。這是一個程序,它可用於unixoids和cygwin,它可以運行多種源代碼。用它。

-2

第一點,不要把它放到你的建造過程中。如果我(意思是我的電腦)每次嘗試調試或構建新功能時都必須拼寫檢查網站上的所有內容,我纔會成爲報復性編碼器。我甚至不認爲這種操作屬於單元測試(你正在測試人機界面,而不是電腦化的)。

第二點,不要寫腳本。你將會有太多的誤報會通過人們會停止閱讀報告的裂縫,而且你比起步時好不了多少。

第三點,這可能是最容易通過人類來解決的問題:QA團隊,複製作家,測試人員,翻譯人員等。我建立的所有擁有國際化內容的大型網站都有相同的流程:我們從副本編寫者那裏獲得副本,將其發送給翻譯服務/代理機構,將其放入持久層並部署。測試人員(QA,開發人員,PM,設計師等)會發現拼寫或語法錯誤並提交錯誤報告。 有太多的繁文and節和眼睛,許多拼寫/語法錯誤滑過。

第四點,您的網頁上總會出現拼寫和語法錯誤。即使是主要的報紙網站也沒有涉及到這一點,他們的整個辦公樓都是編輯。

1

我能想到的兩種方法這個半自動化的方法:

讓編譯器幫你其他地方使用的UI使用的字符串和字符串之間進行區分。根據它的用途重載字符串數據類型的不同變體,並將輸出方法重載爲只接受該類型 - 這樣您就可以創建一個僅輸出UI字符串的假UI,並對其進行拼寫檢查。

如果這是可行的,當然取決於平臺和應用程序的整體架構。

另一種方法可能是簡單地將更新拼寫檢查器數據庫與出現在代碼中的所有字符串 - 註釋,xpaths,表名稱,您的名稱 - 並將它們視爲完美córiculent。這當然會降低拼寫檢查的精確度。

1

關於字符串外化的第一件事 - GNU GetText(如果使用正確)創建的字符串文件幾乎不包含文本,除了字符串的實際內容(有一些頭文件但很容易導致拼寫檢查程序忽略他們)。

第二件事,我會做的是在持續集成環境中運行拼寫檢查器,並且可能通過Web界面向外部提供錯誤,但電子郵件也可以工作。然後,開發人員可以查看錯誤,要麼解決這些問題的代碼或使用一些簡單的界面,讓拼寫檢查知道,一個拼寫錯誤應該被忽略(網絡接口可以整合兩種錯誤觀點和拼寫檢查器接口)。

1

如果您正在使用java並將您的本地化字符串存儲在資源包中,那麼您可以檢查Bundle.properties文件並驗證包字符串。您還可以添加一個特殊註釋註釋,您的處理器可以使用它來確定是否應該跳過一個條目。

此方法將允許您提供有關語言環境的提示,並提供在一個構建過程中檢查多種語言的方法。

我不能回答你將如何執行實際的拼寫檢查本身,但我想我已經提出了將你的GUID作爲進行拼寫檢查的方法是什麼。