fluent 0.3.1

A localization library designed to unleash the entire expressive power of natural language translations.
Documentation
extern crate fluent;

use self::fluent::context::MessageContext;

#[test]
fn variant_expression() {
    let mut ctx = MessageContext::new(&["x-testing"]);

    ctx.add_messages(
        "
-foo = Foo
-bar =
    {
       *[nominative] Bar
        [genitive] Bar's
    }
bar = { -bar }

use-foo = { -foo }
use-foo-missing = { -foo[missing] }

use-bar = { -bar }
use-bar-nominative = { -bar[nominative] }
use-bar-genitive = { -bar[genitive] }
use-bar-missing = { -bar[missing] }

missing-missing = { -missing[missing] }
",
    );

    let value = ctx.get_message("bar").and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Bar".to_string()));

    let value = ctx
        .get_message("use-foo")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Foo".to_string()));

    let value = ctx
        .get_message("use-foo-missing")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Foo".to_string()));

    let value = ctx
        .get_message("use-bar")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Bar".to_string()));

    let value = ctx
        .get_message("use-bar-nominative")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Bar".to_string()));

    let value = ctx
        .get_message("use-bar-genitive")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Bar's".to_string()));

    let value = ctx
        .get_message("use-bar-missing")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("Bar".to_string()));

    let value = ctx
        .get_message("missing-missing")
        .and_then(|msg| ctx.format(msg, None));
    assert_eq!(value, Some("___".to_string()));
}