diff --git a/src/apps/desktop/src/api/i18n_api.rs b/src/apps/desktop/src/api/i18n_api.rs index 55564dec..4d09c81e 100644 --- a/src/apps/desktop/src/api/i18n_api.rs +++ b/src/apps/desktop/src/api/i18n_api.rs @@ -1,7 +1,8 @@ //! I18n API use crate::api::app_state::AppState; -use log::{error, info}; +use bitfun_core::service::i18n::{get_global_i18n_service, LocaleId}; +use log::{error, info, warn}; use serde::{Deserialize, Serialize}; use serde_json::Value; use tauri::State; @@ -60,6 +61,20 @@ pub async fn i18n_set_language( { Ok(_) => { info!("Language set to: {}", request.language); + + // Sync the in-memory I18nService so bot/remote-connect responses + // use the newly selected language without requiring an app restart. + if let Some(locale_id) = LocaleId::from_str(&request.language) { + if let Some(i18n_service) = get_global_i18n_service().await { + if let Err(e) = i18n_service.set_locale(locale_id).await { + warn!( + "Failed to sync I18nService locale after language change: language={}, error={}", + request.language, e + ); + } + } + } + #[cfg(target_os = "macos")] { let has_workspace = state.workspace_path.read().await.is_some(); diff --git a/src/apps/desktop/src/lib.rs b/src/apps/desktop/src/lib.rs index 2ee700ba..77661670 100644 --- a/src/apps/desktop/src/lib.rs +++ b/src/apps/desktop/src/lib.rs @@ -88,6 +88,22 @@ pub async fn run() { return; } + // Initialize global I18nService so bot/remote-connect language is always in sync. + { + use bitfun_core::service::config::get_global_config_service; + use bitfun_core::service::i18n::initialize_global_i18n_service; + match get_global_config_service().await { + Ok(config_service) => { + if let Err(e) = initialize_global_i18n_service(Some(config_service)).await { + log::error!("Failed to initialize global I18nService: {}", e); + } + } + Err(e) => { + log::error!("Failed to get config service for I18nService init: {}", e); + } + } + } + let startup_log_level = resolve_runtime_log_level(log_config.level).await; if let Err(e) = AIClientFactory::initialize_global().await {