若要稽核 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 中的實際操作路徑。請參閱預覽本地化。

只有在每個必要的「訊息–本地化」配對都有記錄處理狀態,且所有必要分支都已檢查後,才能結束稽核。請將清單、測試路徑和未解決的發現保存在一起。如此一來,下次稽核便能直接著手:每則變更過的訊息都有已知位置、預期引數、必要變體,以及可重複檢查其顯示方式的方法。

來源