Fuchsia 對 i18n 偏好、 相關元件或元件
本指南涵蓋下列項目:
- 使用 Unicode BCP-47 語言代碼 ID 來為語言代碼 ID 進行編碼。
- 在元件中使用
fuchsia.intl.PropertyProvider
: 查看國際化偏好設定。請確保產品 設定包含intl_services
或其他 每個通訊協定都有一個 IP 位址 - 如要實作設定 UI,請使用
fuchsia.settings.Intl
以 撰寫國際化設定。
語言代碼 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.languages
和 navigator.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 產品。