用途:在 Bevy 0.19 应用中接入基于 Fluent 的国际化,依赖 es-fluent-manager-bevy(0.19.2)。
主要能力:用 #[derive(EsFluent)] 与 #[derive(BevyFluentText)] 定义类型化 UI 消息;用 FluentText<T> 包裹 UI 文本实体,使其随语言变化自动刷新;通过 LocaleChangeEvent 在运行时切换语言;用 RequestedLanguageId 读取当前语言。
必要用法:在 Cargo.toml 添加依赖 bevy = "0.19"、es-fluent = { version = "0.18.1", features = ["derive"] }、es-fluent-manager-bevy = { version = "0.19.2", features = ["macros"] }、unic-langid = "0.9"。在 crate 根目录放置 i18n.toml,设置 fallback_language 和 assets_dir(编译期读取)。在 src/lib.rs 中通过 es_fluent_manager_bevy::define_i18n_module!() 定义 i18n 模块,并用派生宏声明消息枚举(如 UiMessage),附 #[fluent(namespace = "ui")]。用 I18nPlugin::with_language(langid!("en")) 构建插件,在 App 中添加该插件,并在实体上 spawn (FluentText::new(UiMessage::StartGame), Text::new(""))。切换语言时用 MessageWriter<LocaleChangeEvent> 写入事件。
限制与注意:cargo es-fluent generate 只识别 lib target,仅写在 src/main.rs 的消息枚举不会被 CLI 看到,会生成空的 .ftl 且不报错,须把派生类型放入 src/lib.rs 或其可达模块。BevyFluentText 是派生宏,FluentText<T> 是组件;0.19.2 中消息类型需满足 FluentMessage + Clone + Send + Sync + 'static,本身不派生 Component。最低 rustc 1.96,旧工具链会报难以理解的 trait 解析错误,可用 rust-toolchain.toml 固定版本。事件即消息,应使用 MessageWriter/MessageReader(Bevy 0.17 起重命名),而非 EventWriter/EventReader。其余配置细节与 CLI 工作流可参考技能内的 references 文档。