訊息翻譯

Fuchsia 本地化提供的首要功能是「訊息」 翻譯工作概念上來說,這讓程式能夠顯示 顯示向使用者顯示的訊息。方法是使用 依據語言代碼區分的格式設定工具。程式需要保留「本地化內容」的「本地化內容偏好設定」儲存位置。在程式執行期間,如果需要以使用者的母語在畫面上顯示「Hello, world!」訊息 (例如,西班牙文會編碼為「es」,代表歐洲西班牙文,而「es-419」則代表美洲使用的西班牙文),程式可以透過提供抽象 [Lookup] 服務,搭配原始訊息和所需翻譯,查詢翻譯內容。概念上,這會影響程式碼中的一行 符合以下一般模式:

[Lookup].String({locale-ids=["es-419"]}, MSG_Hello_World) ⇒ (yields the translation)

在上述範例中,[Lookup] 可以是任何可呼叫的端點:可能是程式庫公開的函式,也可能是 RPC 輔助程式介面點,可透過網路擷取翻譯內容。此處的「擷取已翻譯的訊息」抽象作業稱為 String,以便與其他可能對型別資料的呼叫 (例如 StringArray 或其他) 有所區別。

請注意,訊息可能會比這更複雜,因此我們通常不希望程式作者直接處理訊息,而是透過訊息 ID 處理。

還有兩點要注意:

  1. 語言識別碼指定為 Unicode 語言代碼 編號 (因此 範例中的具名參數 locale-ids) 和多個這類語言代碼 ID 可以一次提供這是因為使用者可能不只一個 並依偏好使用語言階層 如此一來,本地化系統就能選擇最適合的訊息 可能會為單一工作階段提供多種語言版本。
  2. 在程式碼中,訊息不會指定為字串表示的字串。 這些郵件會由專屬訊息 ID 提供。在上述範例中,這個值的名稱為 MSG_Hello_World。雖然不同學派對字串應內部化或外部化有不同的看法,但我們選擇後者。我們的主要原因是保留原始碼 不會有語言問題,這導致翻譯工具鍊 較易於維護,而且還能更輕鬆地大規模翻譯 管理。

上方範例出現了兩個主要問題:

  1. 在程式設計師選擇的語言中,[Lookup] 服務的具體介面會是什麼樣子?此外,
  2. 翻譯如何將翻譯提供給我的程式,以便提供這些翻譯 使用嗎?

我們會在討論 Lookup API 時依序回答這些問題。