Translatable es una librería para cargar traducciones de archivos en el proyecto, la librería genera optimizaciones dependiendo del nivel de dinamismo en la llamada de la macro, esta todo documentado en el README.MD.
Al instalarla de crates.io la libreria te permite por defecto, y de forma configurable, tener una carpeta de translations/ en el root de tu proyecto. Esa carpeta contendrá archivos .toml en cualquiera de sus sub-carpetas y organizados como requiera el proyecto.
Un ejemplo de un archivo es
[actions.users.roles.add]
es = "Se agrego un rol a {target}."
en = "A role was added to {target}."
Y esto se puede obtener de la siguiente manera
use translatable::translation;
fn main() {
let target = "Juan";
// devuelve un String.
translation!("es", static actions::users::roles::add, target);
// devuelve un Result<String, translatable::Error>
translation!(Language::ES, vec!["actions", "users", "roles", "add"], target);
}
Los argumentos se pueden mezclar, siendo que el idioma sea dinámico y la ruta estática o viceversa. Los argumentos también se pueden asignar en la propia macro como target = "Juan" en la invocación directamente.
Esto es completamente de código abierto y esta disponible en GitHub.
https://github.com/FlakySL/translatable
https://crates.io/crates/translatable
Gracias.
-# la librería fue creada por mi junto a @bright sapphire