mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
fix: add more lang and lang fix for tray
This commit is contained in:
@@ -323,7 +323,7 @@ fn create_tray_menu(
|
||||
let app_version = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"app_version",
|
||||
format!("Version {version}"),
|
||||
format!("{} {version}", t("Verge Version")),
|
||||
true,
|
||||
None::<&str>,
|
||||
).unwrap();
|
||||
@@ -339,7 +339,7 @@ fn create_tray_menu(
|
||||
let quit = &MenuItem::with_id(
|
||||
app_handle,
|
||||
"quit",
|
||||
t("Quit"),
|
||||
t("Exit"),
|
||||
true,
|
||||
Some("CmdOrControl+Q"),
|
||||
).unwrap();
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
use std::{fs, path::Path};
|
||||
use std::{fs, path::Path, collections::HashMap};
|
||||
use serde_json::Value;
|
||||
use once_cell::sync::Lazy;
|
||||
use crate::config::Config;
|
||||
use sys_locale;
|
||||
|
||||
@@ -32,15 +34,48 @@ pub fn get_supported_languages() -> Vec<String> {
|
||||
vec!["en".to_string(), "ru".to_string(), "zh".to_string(), "fa".to_string()]
|
||||
}
|
||||
|
||||
pub fn t(text: &str) -> String {
|
||||
static TRANSLATIONS: Lazy<HashMap<String, Value>> = Lazy::new(|| {
|
||||
let project_dir = Path::new(env!("CARGO_MANIFEST_DIR")).parent().unwrap();
|
||||
let locales_dir = project_dir.join("src/locales");
|
||||
let mut translations = HashMap::new();
|
||||
|
||||
for lang in ["en", "ru", "zh", "fa", "tt"] {
|
||||
let file_path = locales_dir.join(format!("{}.json", lang));
|
||||
if let Ok(content) = fs::read_to_string(file_path) {
|
||||
if let Ok(json) = serde_json::from_str(&content) {
|
||||
translations.insert(lang.to_string(), json);
|
||||
}
|
||||
}
|
||||
}
|
||||
translations
|
||||
});
|
||||
|
||||
pub fn t(key: &str) -> String {
|
||||
let config = Config::verge();
|
||||
let verge = config.latest();
|
||||
let current_lang = verge.language.as_ref().map_or_else(
|
||||
|| get_system_language(),
|
||||
|lang| lang.to_string()
|
||||
);
|
||||
|
||||
text.to_string()
|
||||
|
||||
if let Some(translations) = TRANSLATIONS.get(¤t_lang) {
|
||||
if let Some(text) = translations.get(key) {
|
||||
if let Some(text) = text.as_str() {
|
||||
return text.to_string();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to English
|
||||
if let Some(translations) = TRANSLATIONS.get("en") {
|
||||
if let Some(text) = translations.get(key) {
|
||||
if let Some(text) = text.as_str() {
|
||||
return text.to_string();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
key.to_string()
|
||||
}
|
||||
|
||||
fn get_system_language() -> String {
|
||||
|
||||
Reference in New Issue
Block a user