邮件翻译
Fuchsia 的本地化服务提供的第一项功能是传递消息
翻译。从概念上讲,这让程序能够
以用户选择的语言向用户显示的消息。这是通过使用
语言区域敏感的格式设置工具输出。程序需要保持
"本地化上下文"存储用户的本地化偏好设置的位置。时间
在程序执行过程中,需要显示“Hello, World!”
世界!”需要以用户的母语显示在屏幕上
例如,西班牙语应编码为“es”,对于欧洲西班牙语,编码为“es-419”
美洲使用的西班牙语),程序可以通过
提供包含原始消息和[Lookup]
所需的翻译。从概念上讲,这相当于代码中的一行
符合以下常规模式:
[Lookup].String({locale-ids=["es-419"]}, MSG_Hello_World) ⇒ (yields the translation)
在上面的示例中,[Lookup]
可以是任何类型的可调用端点:它可以是
是库公开的函数,也可以是
用于提取内容的 RPC 存根
通过网络进行翻译。“从网页获取
翻译好的消息"在这里称为String
,以便与其他
可能会调用类型化数据,例如 StringArray
或其他。
请注意,消息可能比这复杂得多,这就是我们 通常不希望程序作者直接处理它们,而是 通过邮件 ID 发送。
另外还有两点需要注意:
- 语言标识符以 Unicode 语言区域形式指定
ID(因此
命名参数
locale-ids
),以及多个此类语言区域 ID 可同时提供多项资源这是因为用户可能有多个 首选语言,并且可以按偏好设置语言层次结构。 这样,本地化系统就可以选择最佳的可用消息, 可能会以多种语言提供 - 这些消息未在代码中指定为其字符串表示形式。
而是通过唯一的消息标识符来引用。在示例中
被任意命名为
MSG_Hello_World
。虽然 对于字符串是内化还是外化, 我们选择了后者主要原因是保留了源代码 没有语言问题,这使得翻译工具链 更易于维护,而且大规模翻译也更容易 管理。
上述示例涉及两个主要问题:
[Lookup]
服务的具体接口是什么样的 所选程序员的语言?此外,- 我的程序如何才能提供翻译 该怎么办?
我们会在介绍 Lookup API 时依次回答这些问题。