r18 is a crate intends to simplify the internationalisation of Rust projects.
r18 as your project dependency:
 = "*"
JSON translation file whose filename follows IETF BCP 47 language tag, like below
(you can generate it by CLI Tool):
// PATH: ./tr/zh-CN.json
r18::init! to the global scope of your code with the directory where translation files in (in following example is
After initialising the
auto_detect! to detect locale and load translation model automatically.
If you want, you can use
set_locale! to set locale manually.
After above process, use
tr! to get your text which has been translated.
You can find a complete example here. You can run the example with following command:
cargo run -p example
CLI Tool Usage
Run the below command to install
cargo install cargo-r18
After creating the translation directory and writing code as above, you can run the following command to generate translation files (eg. TODO.zh-CN.json):
cargo r18 generate zh-CN
Additionally, you can generate todo files of untranslated texts after changing your source by:
cargo r18 update
cargo r18 is only scanning macros named
tr that it can NOT recognise which belong to
r18 or not,
you should make sure that no similar macros are named in your source before using
cargo r18 -h for more options.