1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//! # Internationalization
//! [](https://crates.io/crates/internationalization)
//! 
//! [](https://coveralls.io/github/terry90/internationalization-rs?branch=master)
//!
//! An simple compile time i18n implementation in Rust.
//! It throws a compilation error if the translation key is not present, but since the `lang` argument is dynamic it will panic if the language has not been added for the matching key.
//! > API documentation [https://crates.io/crates/internationalization](https://crates.io/crates/internationalization)
//! ## Usage
//! Have a `locales/` folder somewhere in your app, root, src, anywhere. with `.json` files, nested in folders or not.
//! It uses a glob pattern: `**/locales/**/*.json` to match your translation files.
//! the files must look like this:
//! ```json
//! {
//! "err.answer.all": {
//! "fr": "Échec lors de la récupération des réponses",
//! "en": "Failed to retrieve answers"
//! },
//! "err.answer.delete.failed": {
//! "fr": "Échec lors de la suppression de la réponse",
//! "en": "Failed to delete answer"
//! }
//! }
//! ```
//! Any number of languages can be added, but you should provide them for everything since it will panic if a language is not found when queried for a key.
//! In your app, jsut call the `t!` macro
//! ```rust
//! fn main() {
//! let lang = "en";
//! let res = t!("err.not_allowed", lang);
//! assert_eq!("You are not allowed to do this", res);
//! }
//! ```
//! ## Installation
//! Internationalization is available on [crates.io](https://crates.io/crates/internationalization), include it in your `Cargo.toml`:
//! ```toml
//! [dependencies]
//! internationalization = "0.0.2"
//! ```
//! Then include it in your code like this:
//! ```rust
//! #[macro_use]
//! extern crate internationalization;
//! ```
//! Or use the macro where you want to use it:
//! ```rust
//! use internationalization::t;
//! ```
//! ## Note
//! Internationalization will not work if no `PWD` env var is set at compile time.
include!;