翻譯郵件
Fuchsia 本地化提供的第一項功能是訊息翻譯。概念上來說,這可讓程式以使用者選擇的語言顯示使用者看到的訊息。方法是使用區分大小寫的格式化工具列印。程式必須保留儲存使用者本地化偏好設定的「本地化內容」。在程式執行過程中,如果畫面上有「Helloworld!」訊息需要以使用者的母語顯示 (例如,西班牙文的編碼為「es」,歐洲西班牙文則編碼為「es-419」),程式可提供抽象的翻譯,提供原始訊息和美國使用的 [Lookup]
服務來查詢翻譯。從概念上來說,這指的是程式碼中與這個一般模式相符的一行:
[Lookup].String({locale-ids=["es-419"]}, MSG_Hello_World) ⇒ (yields the translation)
在上述範例中,[Lookup]
可以是任何類型的可呼叫端點:可能是程式庫公開的函式,或是遠端程序呼叫 (RPC) 虛設常式,透過網路擷取翻譯。此處稱為「擷取翻譯的訊息」的抽像作業稱為 String
,以便與可能的其他可能對類型資料的呼叫 (例如 StringArray
或其他) 有所區別。
請注意,訊息可能會比訊息更加詳細,因此我們通常不想讓程式作者直接處理訊息,而不是透過訊息 ID。
另外還有兩點注意事項:
- 語言 ID 會指定為「萬國碼 (Unicode) 語言代碼 ID」 (因此範例中的命名參數
locale-ids
),且可一次提供多個這類語言代碼 ID。這是因為使用者可能擁有多個偏好的語言,且可能有偏好的語言階層。這可讓本地化系統選擇最佳的訊息,或許能在單一工作階段中以多種語言使用。 - 在程式碼中,訊息不會指定為字串表示法。而是以專屬郵件 ID 代表。在上述範例中,其名稱任意命名為
MSG_Hello_World
。雖然學校會考慮字串是否應內部化或外部化,但我們選擇採用後者。我們主要是因為要避免原始碼在語言方面有疑慮,而這也使得翻譯工具鍊較容易維護,並且讓大規模翻譯更容易管理。
以上範例出了兩個主要問題:
[Lookup]
服務的「具體」介面如何以程式設計師選擇的語言呈現?接著- 翻譯如何使我的程式能夠使用?
我們會在討論 Lookup API 時提供相關解答。