翻譯郵件

Fuchsia 本地化提供的第一項功能是訊息翻譯。概念上來說,這可讓程式以使用者選擇的語言顯示使用者看到的訊息。方法是使用區分大小寫的格式化工具列印。程式必須保留儲存使用者本地化偏好設定的「本地化內容」。在程式執行過程中,如果畫面上有「Helloworld!」訊息需要以使用者的母語顯示 (例如,西班牙文的編碼為「es」,歐洲西班牙文則編碼為「es-419」),程式可提供抽象的翻譯,提供原始訊息和美國使用的 [Lookup] 服務來查詢翻譯。從概念上來說,這指的是程式碼中與這個一般模式相符的一行:

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

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

請注意,訊息可能會比訊息更加詳細,因此我們通常不想讓程式作者直接處理訊息,而不是透過訊息 ID。

另外還有兩點注意事項:

  1. 語言 ID 會指定為「萬國碼 (Unicode) 語言代碼 ID」 (因此範例中的命名參數 locale-ids),且可一次提供多個這類語言代碼 ID。這是因為使用者可能擁有多個偏好的語言,且可能有偏好的語言階層。這可讓本地化系統選擇最佳的訊息,或許能在單一工作階段中以多種語言使用。
  2. 在程式碼中,訊息不會指定為字串表示法。而是以專屬郵件 ID 代表。在上述範例中,其名稱任意命名為 MSG_Hello_World。雖然學校會考慮字串是否應內部化或外部化,但我們選擇採用後者。我們主要是因為要避免原始碼在語言方面有疑慮,而這也使得翻譯工具鍊較容易維護,並且讓大規模翻譯更容易管理。

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

  1. [Lookup] 服務的「具體」介面如何以程式設計師選擇的語言呈現?接著
  2. 翻譯如何使我的程式能夠使用?

我們會在討論 Lookup API 時提供相關解答。