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
//! [Fluent](https://projectfluent.org/) helper for [Handlebars](https://docs.rs/handlebars).
//!
//! This crate provides a Handlebars helper that can load Fluent strings.
//!
//!
//! # Setting up the fluent helper with handlebars
//!
//! The easiest way to use this is to use the [`simple_loader!()`] macro:
//!
//! ```rust
//! use handlebars_fluent::*;
//! use handlebars::*;
//! use serde_json::*;
//!
//! simple_loader!(create_loader, "./locales/", "en-US");
//!
//! fn init(handlebars: &mut Handlebars) {
//! let loader = create_loader();
//! let helper = FluentHelper::new(loader);
//! handlebars.register_helper("fluent", Box::new(helper));
//! }
//!
//! fn render_page(handlebars: &Handlebars) -> String {
//! let data = json!({"lang": "zh-CN"});
//! handlebars.render_template("{{fluent \"foo-bar\"}} baz", &data).unwrap()
//! }
//! ```
//!
//! You should have a `locales/` folder somewhere with one folder per language code,
//! containing all of your FTL files. See the [`simple_loader!()`] macro for more options.
//!
//! Make sure the [`handlebars::Context`] has a toplevel "lang" field when rendering.
//!
//!
//! # Using the fluent helper in your templates
//!
//! The main helper provided is the `{{fluent}}` helper. If you have the following Fluent
//! file:
//!
//! ```fluent
//! foo-bar = "foo bar"
//! placeholder = this has a placeholder { $variable }
//! ```
//!
//! You can include the strings in your template with
//!
//! ```hbs
//! {{fluent "foo-bar"}} <!-- will render "foo bar" -->
//! {{fluent "placeholder" variable="baz"}} <!-- will render "this has a placeholder baz" -->
//!```
//!
//! You may also use the `{{fluentparam}}` helper to specify [variables], especially if you need
//! them to be multiline, like so:
//!
//! ```hbs
//! {{#fluent "placeholder"}}
//! {{#fluentparam "variable"}}
//! first line
//! second line
//! {{/fluentparam}}
//! {{/fluent}}
//! ```
//!
//! Multiple `{{fluentparam}}`s may be specified
//!
//! [variables]: https://projectfluent.org/fluent/guide/variables.html
//! [`simple_loader!()`]: ./macro.simple_loader.html
#[doc(hidden)]
pub extern crate lazy_static;
#[doc(hidden)]
pub extern crate fluent_bundle;
pub use helper::FluentHelper;
pub use loader::{Loader, SimpleLoader};
mod helper;
pub mod loader;