在关于消息翻译的讨论中,有两个主要问题:
- 在程序员所选的语言中,
[Lookup]
服务的具体接口是什么样的?而且, - 译文如何在我的程序中可供使用?
我们将依次回答这些问题。
Lookup API
Lookup API 库用于获取已翻译的字符串。采用 C++ 的 Lookup API 的简化视图如下所示:
class Lookup {
public:
enum class Status {
// No error.
OK = 0,
// The resource was unavailable as requested.
UNAVAILABLE = 1,
};
static fpromise::result<std::unique_ptr<Lookup>, Lookup::Status>
New(const std::vector<std::string>& locale_ids);
fpromise::result<std::string_view, Lookup::Status> String(uint64_t message_id);
};
目前,Lookup API 仅支持 C++ API。进行扩展以支持其他语言不存在概念性问题。
实际的 API 可以在文件 lookup.h
中看到,它与上面所示的 API 基本相同,只不过它包含文档、构建和测试开销。在撰写本文时,只能使用高级 C++ API。我们将根据需要添加其他语言的高级 API。可使用低层级 C API 作为基础,以其他语言编写针对此功能的 FFI 绑定。一种特殊情况是,rust 不需要 FFI 绑定,因为低级别实现是 Rust,并且可以直接与 Rust API 连接;但是实际的 Rust API 尚未形成。
Lookup API 的基本用法如下所示:
std::vector<std::string> locale_ids = {"nl-NL"};
auto result = Lookup::New(locale_ids);
if (result.is_error()) {
return;
}
auto lookup = result.value();
auto lookup_result = lookup.string(42);
if (lookup_result.is_error()) {
// handle error
return;
}
std::string_view message = lookup_result.value();
// Use `message`.
该示例取自 lookup.h
文档。知道该 API 之后,此示例相当简单,只不过一点:调用 lookup.string(...)
会使用魔数 42
查找消息。作为程序员,可以问问这个数字从何而来。下一部分将解决这个问题。