Poner en práctica todo lo aprendido: ejercicio
En este ejercicio, vas a añadir una función de Chromium completamente nueva que pondrá en práctica todo lo que hemos aprendido.
Resumen de la gestión de productos
Se ha descubierto una comunidad de hadas que habita en una selva tropical remota. Es importante que les enviemos la versión Chromium para hadas lo antes posible.
El requisito es traducir todas las cadenas de la IU de Chromium al idioma de las hadas.
No hay tiempo para obtener las traducciones adecuadas pero, por suerte, el lenguaje de las hadas se parece mucho al inglés y hay un crate de Rust que hace las traducciones.
De hecho, ya importamos ese crate en el ejercicio anterior.
(Obviamente, las traducciones reales de Chrome requieren mucha atención y diligencia. No envíes nada de esto).
Pasos
Modifica ResourceBundle::RSMangleLocalizedString
para que traduzca todas las cadenas antes de que se muestren. En esta compilación especial de Chromium, siempre se debe hacer esto independientemente de la configuración de mangle_localized_strings_
.
Si has hecho correctamente los ejercicios, habrás creado Chrome para hadas.
- UTF16 y UTF8. Los alumnos deben tener en cuenta que las cadenas de Rust siempre son UTF8. Probablemente decidirán que es mejor hacer la conversión en C++ usando
base::UTF16ToUTF8
y viceversa. - Si los participantes deciden hacer la conversión en Rust, deberán tener en cuenta
String::from_utf16
, la gestión de errores y los tipos compatibles con CXX que pueden transferir un gran número de u16s. - Los alumnos pueden diseñar el límite de C++ o Rust de varias formas diferentes, por ejemplo, tomando y devolviendo cadenas por valor o colocando una referencia mutable en una cadena. Si se utiliza una referencia mutable, es probable que CXX indique que se debe usar
Pin
. Puede que debas explicar qué hacePin
y, a continuación, explicar por qué CXX lo necesita para referencias mutables a datos de C++. La respuesta es que los datos de C++ no se pueden mover como los datos de Rust, ya que pueden contener punteros de autorreferencia. - El elemento de destino de C++ que contiene
ResourceBundle::MaybeMangleLocalizedString
deberá depender de un elementorust_static_library
. Seguramente los alumnos ya lo hayan hecho. rust_static_library
deberá depender de//third_party/rust/uwuify/v0_2:lib
.