tr 0.1.3

tr! macro for localisation
Documentation

Internationalisation helper

This crate maily expose a macro that wraps gettext in a convinient ways. See the documentation of the tr! macro.

To translate a rust crate, simply wrap your string within the tr! macro. One can then use the xtr binary to extract all the translatable from a crate in a .po file. GNU gettext tools can be used to process and translate these strings.

The tr! macro also support support rust-like formating.

Example:

#[macro_use]
extern crate tr;
fn main() {
// use the tr_init macro to tell gettext where to look for translations
#   #[cfg(feature = "gettext-rs")]
tr_init!("/usr/share/locale/");
let folder = if let Some(folder) = std::env::args().nth(1) {
folder
} else {
println!("{}", tr!("Please give folder name"));
return;
};
match std::fs::read_dir(&folder) {
Err(e) => {
println!("{}", tr!("Could not read directory '{}'\nError: {}",
folder, e));
}
Ok(r) => {
// Singular/plural formating
println!("{}", tr!(
"The directory {} has one file" | "The directory {} has {n} files" % r.count(),
folder
));
}
}
}

Optional Features

You can change which crate is used as a backend for the translation by setting the features

  • gettext-rs (enabled by default) - This crate wraps the gettext C library
  • gettext - A rust re-implementation of gettext. That crate does not take care of loading the right .mo files, so one must use the (set_translator!)[macro.set_translator.html] macro with a gettext::Catalog object