Expand description
§es-fluent-manager-bevy
Seamless Bevy integration for es-fluent.
This plugin connects es-fluent’s type-safe localization with Bevy’s ECS and Asset system. It allows you to use standard #[derive(EsFluent)] types as components that automatically update when the game’s language changes.
es-fluent-manager-bevy | bevy |
|---|---|
| crates.io | |
0.18.x | 0.18.x |
0.17.x | 0.17.x |
§Features
- Asset Loading: Loads
.ftlfiles via Bevy’sAssetServer. - Hot Reloading: Supports hot-reloading of translations during development.
- Reactive UI: The
FluentTextcomponent automatically refreshes text when the locale changes. - Global Hook: Integrates with
es-fluent’s global state.
§Quick Start
§1. Setup
Add the plugin to your App and define your I18n module:
use bevy::prelude::*;
use es_fluent_manager_bevy::I18nPlugin;
use unic_langid::langid;
// a i18n.toml file must exist in the root of the crate
es_fluent_manager_bevy::define_i18n_module!();
fn main() {
App::new()
.add_plugins(DefaultPlugins)
// Initialize with default language
.add_plugins(I18nPlugin::with_language(langid!("en-US")))
.run();
}§2. Using in UI
Use the FluentText component wrapper for any type that implements ToFluentString (which #[derive(EsFluent)] provides).
use es_fluent::EsFluent;
use es_fluent_manager_bevy::FluentText;
#[derive(EsFluent, Clone, Component)]
pub enum UiMessage {
StartGame,
Settings,
}
fn spawn_menu(mut commands: Commands) {
commands.spawn((
// This text will automatically update if language changes
FluentText::new(UiMessage::StartGame),
Text::new(""),
));
}§3. Registering Components
For FluentText to work, you must register the specific inner type with the app so the plugin knows to update it:
app.register_fluent_text::<UiMessage>();§es-fluent-lang integration
If your type contains fields that use es_fluent_lang (for the Languages enum), you must implement RefreshForLocale and use register_fluent_text_from_locale instead:
use es_fluent_manager_bevy::RefreshForLocale;
#[derive(EsFluent, Clone, Component)]
pub enum UiMessage {
LanguageHint { current_language: Languages },
}
impl RefreshForLocale for UiMessage {
fn refresh_for_locale(&mut self, lang: &unic_langid::LanguageIdentifier) {
match self {
UiMessage::LanguageHint { current_language } => {
*current_language = Languages::from(lang);
}
}
}
}
// Register with:
app.register_fluent_text_from_locale::<UiMessage>();Re-exports§
pub use bevy;pub use inventory;pub use unic_langid;pub use components::*;pub use plugin::*;pub use systems::*;
Modules§
Macros§
- define_
i18n_ module - Defines a Bevy i18n module.
- langid
Structs§
- Current
Language Id - A Bevy resource that holds the currently active
LanguageIdentifier. - EsFluent
Bevy Plugin - A plugin that initializes the
es-fluentBevy integration. - FtlAsset
- A Bevy asset representing a Fluent Translation List (
.ftl) file. - FtlAsset
Loader - An
AssetLoaderfor loading.ftlfiles asFtlAssets. - I18n
Assets - A Bevy resource that manages the loading of
FtlAssets. - I18n
Bundle - A Bevy resource containing the
FluentBundlefor each loaded language. - I18n
Resource - The main resource for handling localization.
- Locale
Change Event - A Bevy
Messagesent to request a change of the current locale. - Locale
Changed Event - A Bevy
Messagesent after the current locale has been successfully changed.
Traits§
- Bevy
Fluent Text Registration - Trait for auto-registering FluentText systems with Bevy.
- Fluent
Display - This trait is similar to
std::fmt::Display, but it is used for formatting types that can be displayed in a Fluent message. - Fluent
Text Registration - An extension trait for
Appto simplify the registration ofFluentTextcomponents. - From
Locale - A trait for types that can be constructed from a
LanguageIdentifier. - Refresh
ForLocale - A trait for types that can be updated in place when the locale changes.
- ToFluent
String - This trait is automatically implemented for any type that implements
FluentDisplay.
Functions§
- localize
- A convenience function for localizing a message by its ID.
- primary_
language - Returns the primary language subtag from a
LanguageIdentifier. - update_
values_ on_ locale_ change - A Bevy system that listens for
LocaleChangedEvents and updates components that implementRefreshForLocale.
Derive Macros§
- Bevy
Fluent Text - Registers a type for use with
FluentText<T>in Bevy.