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.

Chromium UI screenshot with uwu language
Students will likely need some hints here. Hints include:
  • 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é hace Pin 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 elemento rust_static_library. Seguramente los alumnos ya lo hayan hecho.
  • rust_static_library deberá depender de //third_party/rust/uwuify/v0_2:lib.