Juntando Tudo — Exercício
Neste exercício, você vai adicionar um novo recurso completo do Chromium, juntando tudo o que você já aprendeu.
O Resumo da Gerência de Produto
Uma comunidade de duendes foi descoberta vivendo em uma floresta tropical remota. É importante que entreguemos o Chromium para Duendes a eles o mais rápido possível.
O requisito é traduzir todas as strings de IU do Chromium para o idioma dos Duendes.
Não há tempo para esperar por traduções adequadas, mas, felizmente, o idioma dos duendes é muito próximo do inglês, e descobriu-se que há um crate Rust que faz a tradução.
Na verdade, você já importou esse crate no exercício anterior.
(Obviamente, as traduções reais do Chrome exigem cuidado e diligência incríveis. Não lance isso!)
Passos
Modifique ResourceBundle::MaybeMangleLocalizedString
para que ele uwuifique todas as strings antes da exibição. Nesta compilação especial do Chromium, ele deve sempre fazer isso, independentemente da configuração de mangle_localized_strings_
.
Se você fez tudo certo em todos esses exercícios, parabéns, você deve ter criado o Chrome para duendes!

- UTF16 vs UTF8. Os alunos devem estar cientes de que as strings Rust são sempre UTF8 e provavelmente decidirão que é melhor fazer a conversão no lado C++ usando
base::UTF16ToUTF8
e vice-versa. - Se os alunos decidirem fazer a conversão no lado Rust, eles precisarão considerar
String::from_utf16
, considerar o tratamento de erros e considerar quais tipos suportados pelo CXX podem transferir muitos u16s. - Os alunos podem projetar o limite C++/Rust de várias maneiras diferentes, por exemplo, pegando e retornando strings por valor ou pegando uma referência mutável a uma string. Se uma referência mutável for usada, o CXX provavelmente dirá ao aluno que ele precisa usar
Pin
. Você pode precisar explicar o quePin
faz e, em seguida, explicar por que o CXX precisa dele para referências mutáveis a dados C++: a resposta é que os dados C++ não podem ser movidos como dados Rust, porque eles podem conter ponteiros auto-referenciais. - O alvo C++ contendo
ResourceBundle::MaybeMangleLocalizedString
precisará depender de um alvorust_static_library
. O aluno provavelmente já fez isso. - O alvo
rust_static_library
precisará depender de//third_party/rust/uwuify/v0_2:lib
.