まとめ --- 演習
この演習では、Chromium の新しい機能を追加しながら、これまで学んだことをまとめます。
プロダクト マネジメント部門からのブリーフィング
人里離れた熱帯雨林に生息するピクシー(妖精の一種)の村が発見されました。ピクシー向けの Chromium をできるだけ早く提供することが重要です。
要件は、Chromium のすべての UI 文字列をピクシーの言語に翻訳することです。
正式な翻訳を行っている時間はありませんが、幸いにもピクシーの言語は英語に非常に近く、その翻訳を行う Rust クレートがあることがわかりました。
(言うまでもなく、Chrome を実際に翻訳するには細心の注意と努力が必要ですので、これは公開しないでください)。
手順
表示前にすべての文字列を翻訳するように ResourceBundle::MaybeMangleLocalizedString
を変更します。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
の利用、エラー処理、多くの u16s を転送可能な CXX でサポートされている型 はどれかを検討する必要があります。 - 受講者はいくつかの異なる方法で C++ と Rust の境界を設計できます。たとえば、文字列を値で取得して返す、または文字列への可変参照を取得するなどです。可変参照が使用されている場合は、おそらく CXX は
Pin
を使用する必要がある旨のメッセージを表示します。Pin
の機能を説明し、C++ データへの可変参照のために CXX でPin
が必要になる理由を説明する必要があるかもしれません。答えは、C++ データには自己参照ポインタが含まれている可能性があるため、Rust データのように移動できないためです。 ResourceBundle::MaybeMangleLocalizedString
を含む C++ ターゲットは、rust_static_library
ターゲットに依存する必要があります。受講者はすでにこれを行っているはずです。rust_static_library
ターゲットは//third_party/rust/uwuify/v0_2:lib
に依存する必要があります。