#handlebars #fluent #run-time #template #substitution #helper #resolve

fluent-handlebars-runtime

使用 Fluent 模板在 Handlebars 中进行运行时变量替换

2 个不稳定版本

0.2.0 2022 年 3 月 19 日
0.1.0 2020 年 8 月 8 日

#540 in 模板引擎

MIT/Apache

9KB
105

Fluent Handlebars 运行时助手:Fluent 模板的扩展 Crates

fluent_templates Crates 包含一个用于 Handlebars 模板框架的助手,允许你在构建时为 Fluent 可替换文本 提供值。 fluent-handlebars-runtime 添加了一个助手,它使用传递给 Handlebars render_template 方法的数据哈希来解决可替换文本。

例如,如果你的 FTL 文件看起来像这样

into-place = One does not simply walk into {$place}

into-place = On ne marche pas simplement à {$place}

然后你可以在运行时传递替换值

#
let data = serde_json::json!({
    "lang": "en-US",
    "place": "Mordor"
});

let mut handlebars = Handlebars::new();
handlebars.register_helper("t", Box::from(FluentHandlebars::new(&loader)));
assert_eq!(
    format!("{}", handlebars.render_template(r#"{{t "into-place"}}"#, &data).unwrap()),
    "One does not simply walk into Mordor"
);

let data = serde_json::json!({
    "lang": "fr",
    "place": "Mordor"
});

assert_eq!(
    format!("{}", handlebars.render_template(r#"{{t "into-place"}}"#, &data).unwrap()),
    "On ne marche pas simplement à Mordor"
);

这允许你在运行时只能知道的地方将值替换到本地化字符串中。

按照惯例,我们称这个助手为 "t",以保持模板简洁,但如果你发现更详细的标识符(例如 "translate" 或 "localize")更易读,你也可以使用它。

#
#
handlebars.register_helper("translate", Box::from(FluentHandlebars::new(&loader)));
assert_eq!(
    format!("{}",
        handlebars.render_template(r#"{{translate "into-place"}}"#, &data).unwrap()
    ),
    "One does not simply walk into Mordor"
);

依赖关系

~8–17MB
~233K SLoC