diff --git a/crates/clash-verge-i18n/src/lib.rs b/crates/clash-verge-i18n/src/lib.rs index 7be0ad271..f837f0f8c 100644 --- a/crates/clash-verge-i18n/src/lib.rs +++ b/crates/clash-verge-i18n/src/lib.rs @@ -65,8 +65,8 @@ pub fn set_locale(language: &str) { } #[inline] -pub fn translate(key: &str) -> String { - rust_i18n::t!(key).to_string() +pub fn translate(key: &str) -> Cow<'_, str> { + rust_i18n::t!(key) } #[macro_export] @@ -78,7 +78,7 @@ macro_rules! t { { let mut _text = $crate::translate(&$key); $( - _text = _text.replace(&format!("{{{}}}", stringify!($arg_name)), &$arg_value.to_string()); + _text = _text.replace(&format!("{{{}}}", stringify!($arg_name)), &$arg_value); )* _text } diff --git a/src-tauri/src/utils/notification.rs b/src-tauri/src/utils/notification.rs index bb9d502dd..33ae195c5 100644 --- a/src-tauri/src/utils/notification.rs +++ b/src-tauri/src/utils/notification.rs @@ -1,3 +1,5 @@ +use std::borrow::Cow; + use crate::core::handle; use clash_verge_i18n; use tauri_plugin_notification::NotificationExt as _; @@ -16,56 +18,55 @@ pub enum NotificationEvent<'a> { AppHidden, } -fn notify(title: &str, body: &str) { +fn notify(title: Cow<'_, str>, body: Cow<'_, str>) { let app_handle = handle::Handle::app_handle(); app_handle.notification().builder().title(title).body(body).show().ok(); } pub async fn notify_event<'a>(event: NotificationEvent<'a>) { - // It cause to sync set-local everytime notify, so move it outside - // i18n::sync_locale().await; - match event { NotificationEvent::DashboardToggled => { let title = clash_verge_i18n::t!("notifications.dashboardToggled.title"); let body = clash_verge_i18n::t!("notifications.dashboardToggled.body"); - notify(&title, &body); + notify(title, body); } NotificationEvent::ClashModeChanged { mode } => { let title = clash_verge_i18n::t!("notifications.clashModeChanged.title"); - let body = clash_verge_i18n::t!("notifications.clashModeChanged.body").replace("{mode}", mode); - notify(&title, &body); + let body = clash_verge_i18n::t!("notifications.clashModeChanged.body") + .replace("{mode}", mode) + .into(); + notify(title, body); } NotificationEvent::SystemProxyToggled => { let title = clash_verge_i18n::t!("notifications.systemProxyToggled.title"); let body = clash_verge_i18n::t!("notifications.systemProxyToggled.body"); - notify(&title, &body); + notify(title, body); } NotificationEvent::TunModeToggled => { let title = clash_verge_i18n::t!("notifications.tunModeToggled.title"); let body = clash_verge_i18n::t!("notifications.tunModeToggled.body"); - notify(&title, &body); + notify(title, body); } NotificationEvent::LightweightModeEntered => { let title = clash_verge_i18n::t!("notifications.lightweightModeEntered.title"); let body = clash_verge_i18n::t!("notifications.lightweightModeEntered.body"); - notify(&title, &body); + notify(title, body); } NotificationEvent::ProfilesReactivated => { let title = clash_verge_i18n::t!("notifications.profilesReactivated.title"); let body = clash_verge_i18n::t!("notifications.profilesReactivated.body"); - notify(&title, &body); + notify(title, body); } NotificationEvent::AppQuit => { let title = clash_verge_i18n::t!("notifications.appQuit.title"); let body = clash_verge_i18n::t!("notifications.appQuit.body"); - notify(&title, &body); + notify(title, body); } #[cfg(target_os = "macos")] NotificationEvent::AppHidden => { let title = clash_verge_i18n::t!("notifications.appHidden.title"); let body = clash_verge_i18n::t!("notifications.appHidden.body"); - notify(&title, &body); + notify(title, body); } } }