融會貫通 - 練習

在本練習中,您會加入全新的 Chromium 功能,一併應用目前學到的所有內容。

產品管理提要

我們在偏遠的雨林中發現一群精靈,務必盡快將精靈專用 Chromium 提供給他們。

目前要求是將所有 Chromium 的 UI 字串翻譯成精靈語。

現在沒時間取得適當的翻譯,但幸好精靈語非常接近英文,也找到能負責翻譯的 Rust Crate。

其實,您已經在先前的練習中匯入這個 Crate

(想當然耳,實際翻譯 Chrome 時必須非常審慎認真。千萬別發布這些內容!)

步驟

修改 ResourceBundle::MaybeMangleLocalizedString,讓所有字串在顯示前 uwu 化。在這個特殊版本的 Chromium 中,無論 mangle_localized_strings_ 的設定為何,一律應執行這項轉換。

如果您順利完成所有練習,那麼恭喜您成功為精靈打造了 Chrome!

Chromium UI screenshot with uwu language
Students will likely need some hints here. Hints include:
  • UTF16 與 UTF8:學生應瞭解 Rust 字串一律為 UTF8,且可能判斷出較適合在 C++ 端使用 base::UTF16ToUTF8 完成轉換再返回。
  • 如果學生決定在 Rust 端完成轉換,就需考慮 String::from_utf16、錯誤處理方式,以及哪些 CXX 支援的型別可傳輸大量 u16
  • 學生可透過多種不同的方式設計 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