fix: add more lang and lang fix for tray

This commit is contained in:
blagodaren
2024-12-28 10:05:30 +03:00
parent fc925ea032
commit 8461046a4f
11 changed files with 1069 additions and 15 deletions

View File

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

View File

@@ -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(&current_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 {