國際化偏好設定

Fuchsia 對 i18n 偏好、 相關元件或元件

本指南涵蓋下列項目:

語言代碼 ID

i18n 偏好設定的 Keystone 是語言代碼 ID,即字串 可簡潔地傳達資訊,例如:

  • 語言 (例如英文、法文、阿拉伯文)
  • 國家/地區或區域 (例如英國、摩洛哥、韓國)
  • 指令碼 (例如:拉丁文、斯拉夫文、繁體中文、簡體中文)

語言代碼 ID 也能提供更詳盡的資訊,例如:

  • 日曆 (例如希臘文、日文、希伯來文)
  • 一週的第一天
  • 定序 (排序順序、將搜尋字串分組)
  • 數字樣式 (例如 "阿拉伯文" 012345, "Eastern 阿拉伯文" 首選)
  • 數字格式 (十進位分隔符、數字分組)
  • 貨幣格式
  • 時間和日期格式
  • 諸如此類

覆寫預設值時,指定這些詳細資料會特別實用 特定語言和地區的值 (請參閱下一節)。

Unicode BCP-47 語言代碼 ID

Fuchsia 使用 Unicode BCP-47 語言代碼 ID

舉例來說,下列語言代碼 ID 會將塞爾維亞語言 (sr) 指定為 以斯拉夫文 (Cyrl) 使用的語言,在塞爾維亞 (RS) 中:

"sr-Cyrl-RS"

別擔心!您可以使用 Unicode 擴充功能子標記, 以便新增覆寫值。請參考以下範例:

"sr-Cyrl-RS-u-ca-hebrew-fw-monday-ms-ussystem-nu-deva-tz-usnyc"

這個範例會指定以下項目:

子標記 意義
sr 指定塞爾維亞語言。
Cyrl 指定斯拉夫文字集。
RS 指定塞爾維亞做為國家/地區。
u 標示 Unicode 擴充功能資料的開頭。
ca-hebrew 指定希伯來日曆。
fw-monday 將星期一指定為一週的第一天。
ms-ussystem 將測量系統指定為「US」,例如英尺、盎司 依此類推
nu-deva 指定天城文數字。
tz-usnyc 將時區指定為 America/New_York

並非所有想要傳達的國際性屬性都具有 對應的 Unicode 副檔名。舉例來說,我們目前並未推出延期 因此無法表示「使用公制單位」, 華氏溫度」。

存取 i18n 偏好設定

在 Fuchsia 之間傳送 i18n 偏好設定 元件 ,請使用 fuchsia.intl.Profile FIDL 資料表:

type Profile = table {
    1: locales vector<LocaleId>;
    2: calendars vector<CalendarId>;
    3: time_zones vector<TimeZoneId>;
    4: temperature_unit TemperatureUnit;
};

語言代碼 ID 只是 Profile 中的一個構成元素。個人資料包含 地區 ID 排名清單 (用於表示相對偏好、優先順序或角度) 支援;請參閱語言代碼,瞭解 以及其他無法在 單一語言代碼 ID。發生衝突時,「Profile」中的明確設定 會覆寫語言代碼 ID 中的值 (例如,以地區為單位指定美國測量單位)。 語言代碼 ID,但 temperature_unit 欄位中卻傳回 CELSIUS)。

當元件需要為其他元件提供 i18n 偏好設定時, 應該將 fuchsia.intl.PropertyProvider敬上 通訊協定,用於提供 Profile 以及變更通知:

closed protocol PropertyProvider {
    strict GetProfile() -> (struct {
        profile Profile;
    });
    strict -> OnChange();
};

這個通訊協定提供國際化設定檔的唯讀檢視畫面。 視服務實作和 運作範圍 後,國際化設定檔的內容可能會衍生自 使用者設定、產品工廠設定、特定元件的 需求,或同時採用上述兩者的組合。

不要假設環境語言代碼

Fuchsia 沒有環境或系統語言代碼,語言代碼和其他 i18n 偏好設定 取決於元件的執行環境。相對於 其他作業系統 (可能擁有 API 以取得全域或預設語言代碼) 並遵循 Fuchsia 的設計原則 無環境權

在標準程式庫提供某些預設語言代碼存取權的執行階段中, runner 來擷取 所需值。在大多數的情況下, 執行元件應呼叫 fuchsia.intl.PropertyProvider.GetProfile

多個 i18n Profile

視產品的設計而定,有可能有兩個元件執行個體 在同一部機器在不同運作範圍中並行執行 不同的 PropertyProvider 執行個體,並接收不同的 Profile

例如,顯示西班牙文元件的百科全書元件 (es-ES) 請參閱關於 Mallorca 的文章,選擇使用 es-ES UI 啟動地圖元件。 與此同時,英文版 (en-US) 的文章與 卻設定為顯示 en-US UI。我們可以 假設有兩條個人 子領域 接收不同的 PropertyProvider 例項

intl_services 程式庫

您可以在以下位置找到實作 fuchsia.intl.PropertyProvider 的基本 C++ 程式庫: //src/lib/intl/intl_property_provider_impl

core敬上 產品設定包括 intl_services, 元件。

整合

網路 (例如Chrome 和WebEngine)

Profile 的偏好語言代碼清單會傳送至 HTTP 中的網路伺服器 要求標頭 Accept-Language,由於可供存取 JavaScript 傳送方式 navigator.languagesnavigator.language

儲存 i18n 使用者設定

如同 Fuchsia 的其他使用者設定,國際化設定 修改過 fuchsia.settings FIDL 通訊協定

具體來說 fuchsia.settings.Intl敬上 用於編寫及監控國際化相關設定。

closed protocol Intl {
    strict Watch() -> (struct {
        settings IntlSettings;
    });
    strict Set(struct {
        settings IntlSettings;
    }) -> () error Error;
};
type IntlSettings = table {
    1: locales vector<fuchsia.intl.LocaleId>:10;
    2: temperature_unit fuchsia.intl.TemperatureUnit;
    3: time_zone_id fuchsia.intl.TimeZoneId;
    4: hour_cycle HourCycle;
};

此通訊協定專門用於需要直接存取的元件 使用者設定,例如系統控制台、工作列語言代碼選取器或 fuchsia.intl.PropertyProvider實作器。適用於 Fuchsia 的一般產品 ,這項存取權應限縮為限縮的許可清單。

大部分的用戶端元件會改用提供的唯讀檢視畫面fuchsia.intl.PropertyProvider

導入作業:setui_service

通訊協定 fuchsia.settings.Intl 是由 setui_service (以及 fuchsia.settings)。這項服務會做為以下項目的 UI 後端: Fuchsia 產品。