邮件翻译

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 语言区域形式指定 ID(因此 命名参数 locale-ids),以及多个此类语言区域 ID 可同时提供多项资源这是因为用户可能有多个 首选语言,并且可以按偏好设置语言层次结构。 这样,本地化系统就可以选择最佳的可用消息, 可能会以多种语言提供
  2. 这些消息未在代码中指定为其字符串表示形式。 而是通过唯一的消息标识符来引用。在示例中 被任意命名为 MSG_Hello_World。虽然 对于字符串是内化还是外化, 我们选择了后者主要原因是保留了源代码 没有语言问题,这使得翻译工具链 更易于维护,而且大规模翻译也更容易 管理。

上述示例涉及两个主要问题:

  1. [Lookup] 服务的具体接口是什么样的 所选程序员的语言?此外,
  2. 我的程序如何才能提供翻译 该怎么办?

我们会在介绍 Lookup API 时依次回答这些问题。