若要稽核 Mac App 中的每個本地化鍵,請建置相關目標、逐一檢查每個字串表是否涵蓋所有支援的語言,然後在執行中的 App 測試訊息變體。目錄是否完整與執行時是否正確顯示,需要分開檢查。
此工作流程適用於使用 Xcode 維護 Mac 桌面 App 的開發者。具體任務是產生可追蹤的記錄,列出缺少的訊息、未完成的翻譯、不正確的引數和顯示問題。範例使用合成標籤與計數;它們說明的是可套用至自己專案的稽核方法。
定義完整訊息的判準
先建立一份簡單的稽核工作表。記錄 App 目標、資源套件、字串表、鍵、支援的本地化、必要變體、翻譯狀態和執行時結果。將每個「套件–字串表–鍵」組合視為個別的訊息識別項,避免不同資源中相同的鍵文字掩蓋遺漏。
Apple 說明,可本地化的 API 能指定字串表和套件,而主套件以外的資源需要使用適當的套件來查找。因此,只檢查預設的 Localizable.xcstrings 檔案,可能會漏掉 App 其他位置的訊息。請參閱準備 App 文字以供翻譯。
在專案編輯器中查看專案支援的本地化:在 Project 下選取專案,開啟 Info,然後檢查 Localizations。也要檢查哪些資源會納入這些本地化。Apple 的新增語言與地區支援說明了這些專案設定與資源選取方式。
在工作表中,可以使用本地化 A、本地化 B 和本地化 C 等合成別名。請在工作記錄中保留這些別名與專案實際本地化識別項的對應關係。這些別名是工作表標籤,不是要輸入 Xcode 的值。
稽核時採用下列完成條件。這是建議的檢視方法,不是 Apple 定義的完成狀態。
| 檢查項目 | 要記錄的證據 |
|---|---|
| 清查 | 訊息已標明目標、套件、字串表和鍵。 |
| 探索 | 訊息是從程式碼擷取,或經過刻意的人工維護。 |
| 涵蓋範圍 | 每個必要本地化都有所需的訊息變體。 |
| 引數 | 每個引數都保留預期含義,且型別相容。 |
| 執行時 | 正確訊息與值會顯示在相關的 Mac 介面中。 |
| 處理狀態 | 每項發現都已修正、有理由地排除,或仍待處理。 |
檢視翻譯前先建立目錄清單
開啟專案現有的字串目錄。如果某個目標沒有目錄,Apple 文件所述的建立路徑是 File > New > File from Template,接著選取 String Catalog。預設名稱是 Localizable;請使用程式碼預期的字串表名稱。選擇 Product > Build 以填入並更新目錄。請參閱使用字串目錄本地化文字並設定文字變體。
請建置每個相關的 Mac scheme,不要把一次成功的建置當成完整清單。Apple 說明,字串擷取會探索目前 scheme 和平台的字串。若某則訊息未出現在某次建置中,在判定它未使用之前,應先調查原因。詳情請見探索字串目錄。
檢查 Use Compiler to Extract Swift Strings 建置設定。Apple 明確要求啟用此設定,才能將所有可本地化的 Swift 文字納入本地化匯出。如果需要翻譯工作的交換副本,請選取專案並選擇 Product > Export Localizations,然後選取所需的本地化。匯出的 .xcloc 套件是 Xcode 本地化目錄,與個別 .xcstrings 字串表不同。請參閱匯出本地化。
接著逐一查看 App 常用的桌面介面:主視窗、選單、工具列、設定、面板、空白狀態,以及依計數變化的標籤。對每則遇到的 App 自有訊息,找出對應的工作表項目。這種從可見介面反向核對清單的方式,有助於找出從未進入目錄的文字。
不要假設擷取能發現所有任意字串運算式。Apple 說明的是透過可本地化 API 進行擷取。若預期訊息未出現,請先檢查程式碼建立與傳遞該訊息的方式,再決定是否手動新增第二筆項目。請參閱準備 App 文字以供翻譯。
區分擷取、查找和執行時格式化
這些操作回答的是不同問題。擷取要確認 Xcode 在開發期間能否探索到訊息。查找要確認執行中的 App 會要求哪個本地化資源。執行時格式化則提供所選訊息要顯示的變動內容。
對 SwiftUI 而言,引數型別很重要。像 Text("Open collection") 這樣的字面值會參與本地化查找。將一般 String 變數傳給對應的初始化方法,通常會直接顯示該變數,不會進行本地化。Apple 在LocalizedStringKey中說明了這項差異。
從變數明確建立 LocalizedStringKey 會要求進行查找,但這不代表建置時擷取已找到每一種可能的變數值。對於動態選取的鍵,請將完整的允許鍵集合與目錄比對。逐一調查所有不相符的值,不要只依賴測試時碰巧出現的值。
插值也會影響訊息本身。SwiftUI 能查找包含格式指定子的本地化訊息,並在呈現前代入插入的值。Apple 在Text 文件中建議使用插值組合可本地化的文字。
以一則回報項目數量的示意訊息為例。目錄會儲存可本地化的訊息結構與變體;變動的數量則屬於執行時行為。測試 1 和 24 兩個數量時,不應只因數字不同就需要維護兩個獨立鍵。
看起來合理的標籤並不是成功查找的有力證據。Apple 指出,SwiftUI 找不到本地化值時,可能會顯示鍵本身。如果鍵是易讀的原始碼文字,查找問題看起來就像一般標籤。請將所選本地化和目錄項目與顯示結果一併確認。請參閱準備檢視畫面以供本地化。
檢查每種語言與每個必要變體
一次處理一個字串表和一種本地化。逐則訊息檢查翻譯狀態、文字、引數和展開的變體。即使周圍的訊息都已完成,也要保留尚未完成的列。
Apple 的目錄工作流程區分 New、Needs Review、已翻譯項目和 Stale 字串。過期項目表示程式碼中已找不到該字串;人工管理的項目不會在同步期間自動更新或移除。刪除翻譯前,請確認過期鍵確實不再需要。請參閱探索字串目錄。
對於依計數變化的訊息,請按住 Control 鍵並按一下插入的鍵,然後選擇 Vary by Plural。檢查 Xcode 為每種本地化提供的所有形式。所需形式可能因語言而異,因此列數與來源本地化相同,並不足以作為檢查依據。如果目錄包含裝置變體,請檢查 Mac 專用值與一般值。Apple 在使用字串目錄本地化文字並設定文字變體中說明了這兩種控制項。
檢查引數時,除了外觀也要確認含義。以一則回報多個群組中項目數量的合成訊息為例,請確認哪個引數代表項目數,哪個代表群組數。翻譯可以調整它們的位置,但仍須保留各自的含義。Apple 的目錄工作階段在探索字串目錄中說明了引數位置、型別指定子和複數代換。
若短標籤有歧義,請補上說明。例如,Open 的註解可以指出它是集合列上的操作。SwiftUI 的 comment 參數會將這項背景資訊帶入本地化輸出;Apple 在準備檢視畫面以供本地化中說明了這點。
使用能呈現未完成工作的涵蓋矩陣
單一百分比有助於追蹤目錄進度,但稽核需要分別記錄涵蓋範圍與行為。以下範例說明原因。數字是合成資料,代表「訊息–本地化」配對,並非某個 App 的實際測量值。
假設清單中有 48 則必要訊息,並支援三種本地化。這會產生 144 個必要配對:48 乘以 3。每個配對還可能包含複數或裝置分支,這些也需要個別檢查。
| 本地化 | 必要配對 | 已完成目錄檢查 | 已完成執行時檢查 |
|---|---|---|---|
| 本地化 A | 48 | 48 | 48 |
| 本地化 B | 48 | 46 | 44 |
| 本地化 C | 48 | 48 | 45 |
| 總計 | 144 | 142 | 137 |
在此例中,還有兩個配對需要處理目錄,另有七個配對尚未完成執行時檢查。兩組可能重疊,因此相加後無法得出未完成訊息的可靠總數。請將兩項發現都記在各自的實際列上。
對每個未完成的列,記錄具體的後續行動:找到缺少的來源訊息、完成複數分支、驗證引數、調查套件選取,或在較窄的寬度下重新檢查介面。如此一來,矩陣就會成為修復待辦清單,而不是裝飾性的進度報告。
在每種支援的本地化中執行 Mac App
使用 Xcode 的 scheme 設定,讓 App 層級的檢查可重複執行。選擇 Product > Scheme > Edit Scheme,選取 Run,開啟 Options,然後選擇 App Language 和 App Region。關閉對話框,選取 Mac 執行目的地,然後執行 App。依照稽核需要,逐一測試支援的組合。Apple 在執行 App 時測試本地化中記錄了這個步驟。
每次執行時都沿著相同路徑操作介面。針對每則訊息測試相關狀態:空集合、單一項目、多個項目,以及較長的合成標籤。對複數訊息,請選擇該本地化需要的其他數值以測試其分支;少數固定的計數值不足以證明已涵蓋所有分支。
檢查完整句子、代入的值、換行、截斷,以及選單或控制項的寬度。如果訊息包含兩個數量,請分別調整。例如,固定群組數量、只改變項目數量,有助於發現引數對應錯誤。
SwiftUI 預覽可縮短修正流程。Apple 支援設定預覽的 locale 環境值,並在新增或匯入本地化後建立多種本地化預覽。使用預覽重新檢查有問題的檢視畫面,再確認 App 中的實際操作路徑。請參閱預覽本地化。
只有在每個必要的「訊息–本地化」配對都有記錄處理狀態,且所有必要分支都已檢查後,才能結束稽核。請將清單、測試路徑和未解決的發現保存在一起。如此一來,下次稽核便能直接著手:每則變更過的訊息都有已知位置、預期引數、必要變體,以及可重複檢查其顯示方式的方法。
來源
- 使用字串目錄本地化文字並設定文字變體 — Apple Developer
- 準備 App 文字以供翻譯 — Apple Developer
- 新增語言與地區支援 — Apple Developer
- 探索字串目錄 — Apple Developer
- 匯出本地化 — Apple Developer
- LocalizedStringKey — Apple Developer
- Text — Apple Developer
- 準備檢視畫面以供本地化 — Apple Developer
- 執行 App 時測試本地化 — Apple Developer
- 預覽本地化 — Apple Developer