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
.