融會貫通 - 練習
在本練習中,您會加入全新的 Chromium 功能,一併應用目前學到的所有內容。
產品管理提要
我們在偏遠的雨林中發現一群精靈,務必盡快將精靈專用 Chromium 提供給他們。
目前要求是將所有 Chromium 的 UI 字串翻譯成精靈語。
現在沒時間取得適當的翻譯,但幸好精靈語非常接近英文,也找到能負責翻譯的 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 支援的型別可傳輸大量 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
。