簡易正體中文化方法研究
By Ryzen Master Traditional Chinese Translation
最近把自己的AMD平台升級到 Ryzen R7 5800x。赫然發現 AMD Ryzen Master 竟然不支援正(繁)體中文的使用。於是,開始研究如何讓 AMD Ryzen Master (以下簡稱 RM) 支持正體中文顯示。
我們將介紹如何分析UI、如何使用中文翻譯工具來替我們實現自動中文化的過程。所有的 CODE 可以在我Github上找到。
Update:
已經針對 Ryzen Master 2.9.0.2093 更新。
研究UI的建構方式
首先要理解一個 UI 程式中文化方式最好的方法就是分析他的UI建構方法。每個 UI 建構方法都有其特徵。常見 UI 框架,QT、WFP、WxWidget、Chrome Based 都可以很容易得由 Win32 Window Class 來理解。此外,經常使用的自動化工具也能協助完成這些工作。
這邊推薦幾個常用的分析工具:
- Inspect
這個工具可以說是老牌中的老牌工具。功能強的的分析工具。也是Windows自動化的核心工具。可以在Visual Studio 或是 Windows SDK中取得。連結中有詳細的說明。WinAppDriver也有說明。
- Spy++
Spy相信大家都不陌生。這是一個用來分析與攔截 Windows Message 的一個重要工具。過在大家用 Win32 GDI 開發 UI 的時候,這是一個不可或缺的工具程式。同樣的,這也能在Visual Studio中取得。
- Dependencies
這是一個 Dependency Walker 的改良版本。就類似 ELF 中,我們分析 dependency 的 Lib工具一樣。nm、objdump、ldd 那樣可以解析相關的依賴,這也能幫助我們理解UI的構成。
Ryzen Master UI 分析
前面說了這幾個工具是我們自動化與分析UI常見的工具組合。那麼 RM 的UI呢?基本上直接就能看出他所採用的UI框架了。
可以很清楚的看出他使用到 QT5 的 runtime library。但是這樣必不意味著RM 就真的使用QT。我們藉由前面介紹的 Dependencies 可以清楚的看到 QT5 Core。到此我們就完全理解 RM 的 UI 設計方式。所以接下來我們只要研究 QT5 常見中文化方式就有機會做出一個正體中文化版本。
研究QT中文化的方式
QT i18n相關資訊可以在 Internationalization with Qt 中找到很多資源。QT 使用 .QM 檔案作為資源檔案。QT的程式可以載入QM檔案,並實現i18n的語言翻譯功能。所以我們有以下重點:
- 取得一個翻譯範本。
- 研究 RM 支持 i18n 的方式是符合 QT 的規範。
- 根據這個範本創造屬於正體中文的版本。
- 使用工具實現自動翻譯。
取得一個翻譯範本
我可以在 RM 的目錄中找告若干語言檔案。幸運的是 chinese_simplified.qm 能夠在 Languages 中被找到。因為由簡體轉正(繁)體來說對中文化而言是最輕鬆的。很多時候簡正之間的轉換是一對一的。所以多數而言這樣中文化質量是最好的。
如何確保 RM 採用標準的 QT i18n 規範
要知道 RM 是否使用 QT i18n 的規範,最簡易的方式就是 Try & Error。嘗試將 chinese_simplified.qm 命名為 chinese_traditional.qm。然後嘗試看看是否 RM UI 介面會產生變化! Bingo! 真的改變了。也就是說真的是用這種方式就能提供中文化。如此一來,接下來的努力才有意義。
這裡我也推薦一個分析 Windows Process 的工具。Procmon 這是一個由微軟併購的 Sysinternals 所研發的工具。Procmon下載位址:
利用 Procmon 我們可以監控 Process 讀取 Network, Registry Database, Filesystem 等等等的行為。以 RM 為例,我們可以輕鬆的知道 RM 讀取檔案的方式,我們看看他是否嘗試讀去任何名為 Chinese 或是 Traditional 的字眼。如此一來,即便我們無法用 Try & Error 方式猜出 UI 的行為,也能用分析工具來正確找出方法。
創造一個正體中文的翻譯 QM 檔案
在 QT i18n 文章中我們知道 .qm 檔案是夠被被反編譯的。QT 提供名為:linguist 的工具用來編輯qm檔案。linguist 的下載方式,我推薦幾個方法。
- 安裝 QT。
https://www.qt.io/download - 使用 vcpkg 方式安裝。
我有篇文章介紹vcpkg。Vcpkg 簡介。一個讓你快速引用開源的超強工具
.\vcpkg install qt5
.\vcpkg\installed\x86-windows\tools\qt5-tools\bin\linguist.exe
安裝好後,便可以用 QT linguist 直接打開 chinese_simplified.qm 檔案。選擇用 Taiwan Region, Language為 Chinese (簡體中文)
接下我只要將 .qm 轉成純文字檔案,以方便 後的編輯。選擇 File -> Save As ->取名 chinese_traditional.ts 並存檔。
使用工具來做中文字體轉換
我們取得了文字翻譯檔後,接下來我們要選擇工具來轉換中文。常見中文轉換工具中,公認轉得最好的大概就是 opencc 與 微軟 office 的 TCSCConverter轉換工具。
- opencc
這大概是已經最好最知名的中文轉換工具。轉換效果非常的好。在我們的案例中,我們目標是正體中文並且轉換台灣習慣用語。在測試過程中發現了奇妙的狀況,當輸入檔案為簡體中文時,必須呼叫opencc兩次才能真正的得到最好效果。詳細原因可以要深入研究才能知道。我的工具程式 opencc_conv.ps1 負責完成這個工作。
opencc.exe -c s2twp.json -i inputfile -o outputfile
- TCSCConverter
這是微軟office中使用的轉換工具。這也是一個具有常用詞轉換的工具,而不是單純只是簡繁之間的變換。效果也是非常得不錯。不過效率上就不那麼好。畢竟這是基於 Office COM automation 的功能,運行過程中必須把 Office 的 COM Server運行起來才能工作。但是因為我們並不需要大量轉換,這個工具也很好用。我們採用VBScript來寫這個轉換工具。因為VB, VBA 與 VBS 都是 Office的好朋友。使用他們來操作 Office 可以說是渾然天成。msword_convert.vbs 提供了樣的功能。
此外,這個工具參考了網友 Demo’s VBS Code,並對內容加以修正。詳見開源內容。
Public Function SC2TC2(str)
Set Doc = Word.Documents.Add
Set Content = Doc.Content
Content.Text = str
Content.TCSCConverter 0, True, True
SC2TC2 = Replace(Content.Text, vbCr, vbCrLf)
SC2TC2 = Left(SC2TC2, Len(SC2TC2) - 2)
Doc.Saved = True
Doc.Close
Set Doc = Nothing
End FunctionConvertedContent = SC2TC2(InputContent)
Windows內建的 LCMapString 與 .Net StrConv 都能轉換簡繁。但是不具有詞彙轉換能力,所以不在考慮之內。
結合兩者的轉換功能與自己的翻譯修正
經過多次的測試,要達到最好翻譯結果,採用多重翻譯能力算法,得出結果看來最好也最正確。此外,有些明顯的錯誤,或是覺得可以達到更好的修正結果的功能,就由最終的更新腳本來修正。
replace_zhtw_idiomatic.ps1 這個 powershell 腳本 會替換最終的字串。有些字串是 DDR 中 SPD 的資訊。不過有些情況覺得不翻譯才是最好的。但因為遠本RM既然已經翻譯了,只好寫些註解,並免更多詞彙上的誤解。
比方這些SPD 專業用語:
'行週期' = '行週期(tRC)';
'行地址啟用時間' = '行地址啟用時間(tRAS)';
'讀取行列地址延遲' = '讀取行列地址延遲(tRCD R)';
'列地址選通脈衝延遲' = '列地址選通脈衝延遲(tCL)';
'行地址預充電延遲' = '行地址預充電延遲(tRP)';
'寫入行列地址延遲' = '寫入行列地址延遲(tRCD W)';
'寫入 CAS 延遲' = '寫入 CAS 延遲(tWCL)'
最終的翻譯,步驟為:
- 經過兩次的 opencc
一次對簡正(繁)的翻譯的最佳化。一次對台灣用語的最佳化。 - 經過一次的 office word
這個過程中,有些opencc沒考量的本地用語在一次被強化。 - 最後再套用修正。
將覺得翻譯不好,或是不適合的翻譯作最終替換。
翻譯的成果比較:
至此,翻譯完成的檔案 chinese_traditional.ts 完全符合我們的需求。最終,我們再度使用 QT linguist 開啟此 .ts 檔案。然後執行 File -> Release。得到最終的 chinese_traditional.qm。並且將這些翻譯好的.qm 放到 RM 檔案目錄中。 安裝方式為:
Installation:
copy chinese_traditional.qm to
%ProgramFiles%\AMD\RyzenMaster\bin\Languages
copy chinese_traditional.qm to
%ProgramFiles%\AMD\RyzenMaster\bin\translations
最終的成果
結論
雖然本篇文章中以 AMD Ryzen Master 作為工作對象,但是學習分析應用的方法與工具,還有整個中文化的過程,才是真正更具意義的。
中文字體轉換已經越來越精準與方便。透過 opencc 與 TCSCConverter 都讓我們得到不錯的翻譯結果。如果我們再結合諸如 Deep Translate 這種雲端AI翻譯。藉由強大的後台運算能力,要得到一個好的翻譯成果應該是可以期待。 分析Application的建構方式很多,那些自動化工具完全適合我們用於控制或是理解 UI的組成方法。善用這些工具,我們也能做到不採用侵入式的方式來達成中文化。
下次不妨把你寫好的中文文章,利用本篇文章的語意翻譯校準過程,然後比對一下兩者的差別,你或許也會感覺的一驚奇之處。