簡易正體中文化方法研究

By Ryzen Master Traditional Chinese Translation

Ryzen Master

最近把自己的AMD平台升級到 Ryzen R7 5800x。赫然發現 AMD Ryzen Master 竟然不支援正(繁)體中文的使用。於是,開始研究如何讓 AMD Ryzen Master (以下簡稱 RM) 支持正體中文顯示。

我們將介紹如何分析UI、如何使用中文翻譯工具來替我們實現自動中文化的過程。所有的 CODE 可以在我Github上找到。

研究UI的建構方式

首先要理解一個 UI 程式中文化方式最好的方法就是分析他的UI建構方法。每個 UI 建構方法都有其特徵。常見 UI 框架,QT、WFP、WxWidget、Chrome Based 都可以很容易得由 Win32 Window Class 來理解。此外,經常使用的自動化工具也能協助完成這些工作。

這邊推薦幾個常用的分析工具:

  • Inspect
    這個工具可以說是老牌中的老牌工具。功能強的的分析工具。也是Windows自動化的核心工具。可以在Visual Studio 或是 Windows SDK中取得。連結中有詳細的說明。WinAppDriver也有說明。
Inspect
  • Spy++
    Spy相信大家都不陌生。這是一個用來分析與攔截 Windows Message 的一個重要工具。過在大家用 Win32 GDI 開發 UI 的時候,這是一個不可或缺的工具程式。同樣的,這也能在Visual Studio中取得。
SPY++
  • Dependencies
    這是一個 Dependency Walker 的改良版本。就類似 ELF 中,我們分析 dependency 的 Lib工具一樣。nm、objdump、ldd 那樣可以解析相關的依賴,這也能幫助我們理解UI的構成。
Dependencies

Ryzen Master UI 分析

前面說了這幾個工具是我們自動化與分析UI常見的工具組合。那麼 RM 的UI呢?基本上直接就能看出他所採用的UI框架了。

Ryzen Master Files

可以很清楚的看出他使用到 QT5 的 runtime library。但是這樣必不意味著RM 就真的使用QT。我們藉由前面介紹的 Dependencies 可以清楚的看到 QT5 Core。到此我們就完全理解 RM 的 UI 設計方式。所以接下來我們只要研究 QT5 常見中文化方式就有機會做出一個正體中文化版本。

研究QT中文化的方式

QT i18n相關資訊可以在 Internationalization with Qt 中找到很多資源。QT 使用 .QM 檔案作為資源檔案。QT的程式可以載入QM檔案,並實現i18n的語言翻譯功能。所以我們有以下重點:

  1. 取得一個翻譯範本。
  2. 研究 RM 支持 i18n 的方式是符合 QT 的規範。
  3. 根據這個範本創造屬於正體中文的版本。
  4. 使用工具實現自動翻譯。

取得一個翻譯範本

我可以在 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 的下載方式,我推薦幾個方法。

  1. 安裝 QT。
    https://www.qt.io/download
  2. 使用 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 (簡體中文)

linguist

接下我只要將 .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 Function
ConvertedContent = 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)'

最終的翻譯,步驟為:

  1. 經過兩次的 opencc
    一次對簡正(繁)的翻譯的最佳化。一次對台灣用語的最佳化。
  2. 經過一次的 office word
    這個過程中,有些opencc沒考量的本地用語在一次被強化。
  3. 最後再套用修正。
    將覺得翻譯不好,或是不適合的翻譯作最終替換。

翻譯的成果比較:

左邊為最後結果,右邊則只簡轉正(繁)

至此,翻譯完成的檔案 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

最終的成果

Ryzen Master 基本檢視
Ryzen Master 高階檢視

結論

雖然本篇文章中以 AMD Ryzen Master 作為工作對象,但是學習分析應用的方法與工具,還有整個中文化的過程,才是真正更具意義的。

中文字體轉換已經越來越精準與方便。透過 opencc 與 TCSCConverter 都讓我們得到不錯的翻譯結果。如果我們再結合諸如 Deep Translate 這種雲端AI翻譯。藉由強大的後台運算能力,要得到一個好的翻譯成果應該是可以期待。 分析Application的建構方式很多,那些自動化工具完全適合我們用於控制或是理解 UI的組成方法。善用這些工具,我們也能做到不採用侵入式的方式來達成中文化。

下次不妨把你寫好的中文文章,利用本篇文章的語意翻譯校準過程,然後比對一下兩者的差別,你或許也會感覺的一驚奇之處。

這是本篇文章校準的比較結果。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store