まとめ --- 演習

この演習では、Chromium の新しい機能を追加しながら、これまで学んだことをまとめます。

プロダクト マネジメント部門からのブリーフィング

人里離れた熱帯雨林に生息するピクシー(妖精の一種)の村が発見されました。ピクシー向けの Chromium をできるだけ早く提供することが重要です。

要件は、Chromium のすべての UI 文字列をピクシーの言語に翻訳することです。

正式な翻訳を行っている時間はありませんが、幸いにもピクシーの言語は英語に非常に近く、その翻訳を行う Rust クレートがあることがわかりました。

実は、前の演習でそのクレートをインポートしています

(言うまでもなく、Chrome を実際に翻訳するには細心の注意と努力が必要ですので、これは公開しないでください)。

手順

表示前にすべての文字列を翻訳するように ResourceBundle::MaybeMangleLocalizedString を変更します。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の利用、エラー処理、多くの 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 に依存する必要があります。