perf(i18n): update translate function to use Cow to aovid allocate

This commit is contained in:
Tunglies
2025-12-30 18:32:19 +08:00
parent cf08628200
commit 9ce343fb45
2 changed files with 17 additions and 16 deletions

View File

@@ -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
}

View File

@@ -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);
}
}
}