# dioxus-i18n 🌍

i18n integration for Dioxus apps based on the [Project Fluent](https://github.com/projectfluent/fluent-rs).

> This crate used to be in the [Dioxus SDK](https://github.com/DioxusLabs/sdk).

## Support

- **Dioxus v0.6** 🧬
- Renderers:
  - [web](https://dioxuslabs.com/learn/0.6/guides/web/),
  - [desktop](https://dioxuslabs.com/learn/0.6/guides/desktop/),
  - [freya](https://github.com/marc2332/freya)
- Both WASM and native targets

## Example:

```ftl
# en-US.ftl

hello = Hello, {$name}!
```

```rs
// main.rs

fn app() -> Element {
    let i18 = use_init_i18n(|| {
        I18nConfig::new(langid!("en-US"))
            // implicit [`Locale`]
            .with_locale(( // Embed
                langid!("en-US"),
                include_str!("./en-US.ftl")
            ))
            .with_locale(( // Load at launch
                langid!("es-ES"),
                PathBuf::from("./es-ES.ftl"),
            ))
            .with_locale((     // Locales will share duplicated locale_resources
                langid!("en"), // which is useful to assign a specific region for
                include_str!("./en-US.ftl") // the primary language
            ))
            // explicit [`Locale`]
            .with_locale(Locale::new_static( // Embed
                langid!("en-US"),
                include_str!("./en-US.ftl"),
            ))
            .with_locale(Locale::new_dynamic( // Load at launch
                langid!("es-ES"),
                PathBuf::from("./es-ES.ftl"),
            ))
    });

    rsx!(
        label { { t!("hello", name: "World") } }
    )
}
```

## Further examples

The examples folder contains a number of working examples:

* Desktop examples:
  * [Dioxus](./examples/dioxus-desktop.rs)
  * [Freya](./examples/freya.rs)
* Configuration variants:
  * [Auto locales](./examples/config-auto-locales.rs)
  * [Dynamic (PathBuf)](./examples/config-dynamic-pathbuf.rs)
  * [Static (include_str!)](./examples/config-static-includestr.rs)
* Fluent grammer:
  * [Application](./examples/fluent-grammar.rs)
  * [FTL file](./examples/data/fluent/en.ftl)

## Development

```bash
# Checks clean compile against `#[cfg(not(target_arch = "wasm32"))]`
cargo build --target wasm32-unknown-unknown

# Runs all tests
cargo test
```

[MIT License](./LICENSE.md)
