未來的作業

Fuchsia 的本地化子系統的開發,主要取決於平台的即時需求。另一方面,本地化領域的歷史長久,也有許多廣為人知的問題需要解決。我們採用開發方式,專門處理平台在短期內需要處理的問題,例如開發使用無障礙管理工具 (a11y) 和螢幕閱讀器所需的功能。因此,我們會謹慎處理問題,直到有需要使用這些子系統的子系統為止。

本節列出 (尚未實作) 的工作內容,作為日後使用的記錄,或讓有興趣的單位接受一些工作,並將其提供給開放原始碼 Fuchsia 存放區。郵寄清單 intl-dev@fuchsia.dev 是用來討論此處所公開任何主題的討論內容。

日後的作品會按區域劃分。

API

  1. C++ 以外沒有 API 支援。Rust 提供低階支援,但由於目前沒有 Rust 用戶端,因此目前並未使用。理想情況下 只採用單一實作 (Rust)

  2. 訊息並未採用類型的安全 API。在理想情況下,我們可以根據 strings.xml 的內容,在目標程式設計語言中產生類型安全的程式碼。目前我們尚未實作這個做法,讓作者可以透過自動測試或其他方式,驗證訊息格式和引數順序與本地化訊息預期的相符。這是因為基礎 API 無法辨識類型,而且只能即時產生自訂程式碼才能修正。

安全性

  1. 載入的訊息會儲存在堆積上,並可寫入。這可能會有潛在的安全風險。更好的做法是將訊息載入連續記憶體區域,該區域隨後會標示為唯讀。這可以防止任何試圖利用格式 API 的基礎類型不受安全性的攻擊,讓有心人士難以分辨不應公開的資訊。

語言代碼備用

下列所需屬性目前未內建於備用機制中,但十分方便。

  1. 系統不支援動態變更語言代碼。呼叫程式必須監聽 OnChange 事件,並視情況更新 Lookup

    一般來說,程式作者可以自行決定是否以正確的方式實作語言代碼變更。但既然 Lookup API 的使用者已經與 fuchsia.intl 整合,您應該就能瞭解使用者的語言代碼偏好設定,因此這應該不用大費周章。

套裝

  1. 您需要在 BUILD.gn 檔案中註冊本地化資源,才能手動產生及封裝這些資源。原則上來說,這項作業可以自動執行,因為資源的來源、目標位置及其各自的語言代碼都都能透過建構系統得知。此工作尚未完成。

  2. 我們目前未實作隨選載入本地化資源的功能。透過今天的實作,您無法將本地化資源納入獨立於「主要」二進位套件之外的套件。對於空間有限的裝置,以及使用許多語言本地化的應用程式 (例如 Gmail 應用程式或 Chrome 瀏覽器) 來說,這會成為重大使用障礙的一項重要因素。

    以量計價載入將僅允許下載使用者實際在裝置上使用的本地化資源。

  3. 目前第三方貢獻尚未實行。這項功能 (如有) 可讓第三方為非自己維護的應用程式提供本地化資源。這樣一來,獨立支援多種語言的長尾語言,因為原始作者並沒有維護的動機。

    除了將現有的 Fuchsia 套件分割成「正確」和獨立「語言套件」資料集的明確機制支援以外,功能差距還包括解決軟體發行各方之間的信任和程式碼驗證問題。這已成為 Fuchsia 軟體目前不可或缺的要素。