Bringing It Together —- Exercise
在本练习中,您将运用之前所学的全部知识,添加一项全新的 Chromium 功能。
The Brief from Product Management
在偏僻的热带雨林中,发现住着一群小精灵。我们务必尽快创建一款精灵版 Chromium,交付给他们。
要求是将 Chromium 的所有界面字符串翻译为精灵语。
由于时间紧迫,无法等待准确的翻译。但幸运的是,精灵语与英语非常接近,然后我们发现有一个 Rust crate 可以执行此翻译任务。
事实上,您已经 在上一个练习中导入了该 crate。
(显然,对 Chrome 进行准确恰当的翻译,需要做到极度细致和全力以赴。请勿交付此产品!)
步骤
修改 ResourceBundle::MaybeMangleLocalizedString
,在显示之前对所有字符串进行 uwu 处理。在这个特殊的 Chromium 版本中,无论 mangle_localized_strings_
的设置如何,都应该始终执行此操作。
如果您正确完成了这些练习中的所有操作,那么恭喜您已经成功创建了一款精灵版 Chrome!
Students will likely need some hints here. Hints include:
- UTF16 与 UTF8。学生应注意,Rust 字符串始终采用 UTF8 编码,它们可能会决定在 C++ 端使用
base::UTF16ToUTF8
进行转换,然后再进行反向转换。 - 如果学生决定在 Rust 端进行转换,则需要考虑使用 String::from_utf16 方法,同时注意错误处理,并确定哪些 CXX 支持的类型可以传输大量 u16s。
- 学生可以通过多种方式设计 C++/Rust 边界,例如按值传递和返回字符串,或对字符串采取可变引用。如果使用可变引用,CXX 可能会提示学生需要使用 Pin 方法。您可能需要解释“Pin”的用途,以及为何 CXX 需要它来对 C++ 数据进行可变引用:原因是 C++ 数据无法像 Rust 数据那样自由移动,它可能包含自引用指针。
- 对于包含
ResourceBundle::MaybeMangleLocalizedString
的 C++ 目标,需要依赖于rust_static_library
目标。学生可能已经执行了此操作。 rust_static_library
目标需要依赖于//third_party/rust/uwuify/v0_2:lib
。