#json #i18n #static #rocket #multi-language

json-gettext

A library for getting text from JSON usually for internationalization

29 stable releases

3.1.0 May 30, 2019
3.0.2 May 30, 2019
2.2.0 May 22, 2019
2.1.0 Nov 17, 2018
1.5.2 Aug 30, 2018

#19 in Internationalization (i18n)

Download history 30/week @ 2019-03-27 23/week @ 2019-04-03 9/week @ 2019-04-10 25/week @ 2019-04-24 27/week @ 2019-05-01 27/week @ 2019-05-08 53/week @ 2019-05-15 232/week @ 2019-05-22 141/week @ 2019-05-29 45/week @ 2019-06-05 79/week @ 2019-06-12 115/week @ 2019-06-19 214/week @ 2019-06-26 153/week @ 2019-07-03

272 downloads per month
Used in 4 crates (3 directly)

MIT license

47KB
1K SLoC

JSON Get Text

Build Status Build status

This is a library for getting text from JSON usually for internationalization.

Example

#[macro_use] extern crate json_gettext;

let ctx = static_json_gettext_build!(
    "en_US",
    "en_US", "langs/en_US.json",
    "zh_TW", "langs/zh_TW.json"
).unwrap();

assert_eq!("Hello, world!", get_text!(ctx, "hello").unwrap());
assert_eq!("哈囉,世界!", get_text!(ctx, "zh_TW", "hello").unwrap());

Rocket Support

This crate supports the Rocket framework. In order to reload changed json files instead of recompiling the program you have to enable the rocketly feature for this crate.

[dependencies.json-gettext]
version = "*"
features = ["rocketly"]

Then, use the static_json_gettext_build_rocketly macro instead of the static_json_gettext_build macro to build a JSONGetText(JSONGetTextManager).

#[macro_use] extern crate json_gettext;

#[macro_use] extern crate rocket;

use rocket::State;
use rocket::response::Redirect;

use json_gettext::JSONGetTextManager;

#[get("/")]
fn index(ctx: State<JSONGetTextManager>) -> Redirect {
    Redirect::temporary(uri!(hello: lang = ctx.get_default_key()))
}

#[get("/<lang>")]
fn hello(ctx: State<JSONGetTextManager>, lang: String) -> String {
    format!("Ron: {}", get_text!(ctx, lang, "hello").unwrap().as_str().unwrap())
}

fn main() {
    rocket::ignite()
        .attach(JSONGetTextManager::fairing(|| {
            static_json_gettext_build_rocketly!("en_US",
                "en_US", "langs/en_US.json",
                "zh_TW", "langs/zh_TW.json"
            )
        }))
        .mount("/", routes![index, hello])
        .launch();
}

If you are not using the release profile, JSONGetTextManager can reload the json files automatically if needed.

Crates.io

https://crates.io/crates/json-gettext

Documentation

https://docs.rs/json-gettext

License

MIT

Dependencies

~4MB
~65K SLoC