rustdesk 2022-06-30 01:19:38 +08:00
parent 397fafb1c1
commit c745bf4111
19 changed files with 89 additions and 13 deletions

View File

@ -1,21 +1,43 @@
use serde_json::{json, value::Value};
use std::ops::Deref; use std::ops::Deref;
mod cn; mod cn;
mod cs; mod cs;
mod da; mod da;
mod sk;
mod de; mod de;
mod en; mod en;
mod es;
mod eo; mod eo;
mod es;
mod fr; mod fr;
mod id; mod id;
mod it; mod it;
mod ptbr; mod ptbr;
mod ru; mod ru;
mod sk;
mod tr; mod tr;
mod tw; mod tw;
lazy_static::lazy_static! {
pub static ref LANGS: Value =
json!(vec![
("en", "English"),
("it", "Italiano"),
("fr", "Français"),
("de", "Deutsch"),
("cn", "简体中文"),
("tw", "繁體中文"),
("pt", "Português"),
("es", "Español"),
("ru", "Русский"),
("sk", "Slovenčina"),
("id", "Indonesia"),
("cs", "Čeština"),
("da", "Dansk"),
("eo", "Esperanto"),
("tr", "Türkçe"),
]);
}
#[cfg(not(any(target_os = "android", target_os = "ios")))] #[cfg(not(any(target_os = "android", target_os = "ios")))]
pub fn translate(name: String) -> String { pub fn translate(name: String) -> String {
let locale = sys_locale::get_locale().unwrap_or_default().to_lowercase(); let locale = sys_locale::get_locale().unwrap_or_default().to_lowercase();

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "退出"), ("Turned off", "退出"),
("In privacy mode", "进入隐私模式"), ("In privacy mode", "进入隐私模式"),
("Out privacy mode", "退出隐私模式"), ("Out privacy mode", "退出隐私模式"),
("Language", "语言"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Vypnutý"), ("Turned off", "Vypnutý"),
("In privacy mode", "v režimu soukromí"), ("In privacy mode", "v režimu soukromí"),
("Out privacy mode", "mimo režim soukromí"), ("Out privacy mode", "mimo režim soukromí"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Slukket"), ("Turned off", "Slukket"),
("In privacy mode", "I databeskyttelsestilstand"), ("In privacy mode", "I databeskyttelsestilstand"),
("Out privacy mode", "Databeskyttelsestilstand fra"), ("Out privacy mode", "Databeskyttelsestilstand fra"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Ausgeschaltet"), ("Turned off", "Ausgeschaltet"),
("In privacy mode", "im Datenschutzmodus"), ("In privacy mode", "im Datenschutzmodus"),
("Out privacy mode", "Datenschutzmodus aus"), ("Out privacy mode", "Datenschutzmodus aus"),
("Language", "Sprache"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", ""), ("Turned off", ""),
("In privacy mode", ""), ("In privacy mode", ""),
("Out privacy mode", ""), ("Out privacy mode", ""),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Apagado"), ("Turned off", "Apagado"),
("In privacy mode", "En modo de privacidad"), ("In privacy mode", "En modo de privacidad"),
("Out privacy mode", "Fuera del modo de privacidad"), ("Out privacy mode", "Fuera del modo de privacidad"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Éteindre"), ("Turned off", "Éteindre"),
("In privacy mode", "en mode privé"), ("In privacy mode", "en mode privé"),
("Out privacy mode", "hors mode de confidentialité"), ("Out privacy mode", "hors mode de confidentialité"),
("Language", "Langue"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -158,7 +158,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Allow using clipboard", "Izinkan menggunakan papan klip"), ("Allow using clipboard", "Izinkan menggunakan papan klip"),
("Allow hearing sound", "Izinkan mendengarkan suara"), ("Allow hearing sound", "Izinkan mendengarkan suara"),
("Allow file copy and paste", "Izinkan penyalinan dan tempel file"), ("Allow file copy and paste", "Izinkan penyalinan dan tempel file"),
("File transfer", "Transfer file"),
("Connected", "Terkoneksi"), ("Connected", "Terkoneksi"),
("Direct and encrypted connection", "Koneksi langsung dan terenkripsi"), ("Direct and encrypted connection", "Koneksi langsung dan terenkripsi"),
("Relayed and encrypted connection", "Koneksi relai dan terenkripsi"), ("Relayed and encrypted connection", "Koneksi relai dan terenkripsi"),
@ -280,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Matikan"), ("Turned off", "Matikan"),
("In privacy mode", "Dalam mode privasi"), ("In privacy mode", "Dalam mode privasi"),
("Out privacy mode", "Keluar dari mode privasi"), ("Out privacy mode", "Keluar dari mode privasi"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Spegni"), ("Turned off", "Spegni"),
("In privacy mode", "In modalità privacy"), ("In privacy mode", "In modalità privacy"),
("Out privacy mode", "Fuori modalità privacy"), ("Out privacy mode", "Fuori modalità privacy"),
("Language", "Linguaggio"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Desligado"), ("Turned off", "Desligado"),
("In privacy mode", "No modo de privacidade"), ("In privacy mode", "No modo de privacidade"),
("Out privacy mode", "Fora do modo de privacidade"), ("Out privacy mode", "Fora do modo de privacidade"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -263,9 +263,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("android_version_audio_tip", "Текущая версия Android не поддерживает захват звука, обновите ее до Android 10 или выше."), ("android_version_audio_tip", "Текущая версия Android не поддерживает захват звука, обновите ее до Android 10 или выше."),
("android_start_service_tip", "Нажмите [Запуск промежуточного сервера] или ОТКРЫТЬ разрешение [Захват экрана], чтобы запустить службу демонстрации экрана."), ("android_start_service_tip", "Нажмите [Запуск промежуточного сервера] или ОТКРЫТЬ разрешение [Захват экрана], чтобы запустить службу демонстрации экрана."),
("Account", "Аккаунт"), ("Account", "Аккаунт"),
("Quit", "Выйти"),
("Overwrite", "Перезаписать"), ("Overwrite", "Перезаписать"),
("This file exists, skip or overwrite this file?", "Этот файл существует, пропустить или перезаписать этот файл?"), ("This file exists, skip or overwrite this file?", "Этот файл существует, пропустить или перезаписать этот файл?"),
("Quit", "Выйти"),
("doc_mac_permission", "https://rustdesk.com/docs/ru/manual/mac/#включение-разрешений"), ("doc_mac_permission", "https://rustdesk.com/docs/ru/manual/mac/#включение-разрешений"),
("Help", "Помощь"), ("Help", "Помощь"),
("Failed", "Неуспешный"), ("Failed", "Неуспешный"),
@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Выключен"), ("Turned off", "Выключен"),
("In privacy mode", "В режиме конфиденциальности"), ("In privacy mode", "В режиме конфиденциальности"),
("Out privacy mode", "Выход из режима конфиденциальности"), ("Out privacy mode", "Выход из режима конфиденциальности"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Vypnutý"), ("Turned off", "Vypnutý"),
("In privacy mode", "V režime súkromia"), ("In privacy mode", "V režime súkromia"),
("Out privacy mode", "Mimo režimu súkromia"), ("Out privacy mode", "Mimo režimu súkromia"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -264,7 +264,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("android_start_service_tip", ""), ("android_start_service_tip", ""),
("Account", ""), ("Account", ""),
("Overwrite", ""), ("Overwrite", ""),
("This file exists, skip or overwrite this file?", "") ("This file exists, skip or overwrite this file?", ""),
("Quit", ""), ("Quit", ""),
("doc_mac_permission", ""), ("doc_mac_permission", ""),
("Help", ""), ("Help", ""),
@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", ""), ("Turned off", ""),
("In privacy mode", ""), ("In privacy mode", ""),
("Out privacy mode", ""), ("Out privacy mode", ""),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -279,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "Kapalı"), ("Turned off", "Kapalı"),
("In privacy mode", "Gizlilik modunda"), ("In privacy mode", "Gizlilik modunda"),
("Out privacy mode", "Gizlilik modu dışında"), ("Out privacy mode", "Gizlilik modu dışında"),
("Language", ""),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -262,13 +262,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("android_stop_service_tip", "關閉服務將自動關閉所有已建立的連接。"), ("android_stop_service_tip", "關閉服務將自動關閉所有已建立的連接。"),
("android_version_audio_tip", "目前的 Android 版本不支持音訊錄製,請升級至 Android 10 或以上版本。"), ("android_version_audio_tip", "目前的 Android 版本不支持音訊錄製,請升級至 Android 10 或以上版本。"),
("android_start_service_tip", "點擊 「啟動服務」 或啟用 「畫面錄製」 權限以開啟手機畫面共享服務。"), ("android_start_service_tip", "點擊 「啟動服務」 或啟用 「畫面錄製」 權限以開啟手機畫面共享服務。"),
("Account", "帳號"), ("Account", "帳戶"),
("Quit", "退出"),
("Overwrite", "覆寫"), ("Overwrite", "覆寫"),
("This file exists, skip or overwrite this file?", "此檔案/資料夾已存在,要跳過或是覆寫此檔案嗎?"), ("This file exists, skip or overwrite this file?", "此檔案/資料夾已存在,要跳過或是覆寫此檔案嗎?"),
("Quit", "退出"),
("doc_mac_permission", "https://rustdesk.com/docs/zh-tw/manual/mac/#啟用權限"), ("doc_mac_permission", "https://rustdesk.com/docs/zh-tw/manual/mac/#啟用權限"),
("Help", "幫助"), ("Help", "幫助"),
("Account", "帳戶"),
("Failed", "失敗"), ("Failed", "失敗"),
("Succeeded", "成功"), ("Succeeded", "成功"),
("Someone turns on privacy mode, exit", "其他用戶開啟隱私模式,退出"), ("Someone turns on privacy mode, exit", "其他用戶開啟隱私模式,退出"),
@ -280,5 +279,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Turned off", "退出"), ("Turned off", "退出"),
("In privacy mode", "開啟隱私模式"), ("In privacy mode", "開啟隱私模式"),
("Out privacy mode", "退出隱私模式"), ("Out privacy mode", "退出隱私模式"),
("Language", "語言"),
].iter().cloned().collect(); ].iter().cloned().collect();
} }

View File

@ -3,9 +3,9 @@ mod cm;
mod inline; mod inline;
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
mod macos; mod macos;
pub mod remote;
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
pub mod win_privacy; pub mod win_privacy;
pub mod remote;
use crate::common::SOFTWARE_UPDATE_URL; use crate::common::SOFTWARE_UPDATE_URL;
use crate::ipc; use crate::ipc;
use hbb_common::{ use hbb_common::{
@ -753,6 +753,10 @@ impl UI {
self.get_option_("custom-rendezvous-server"), self.get_option_("custom-rendezvous-server"),
) )
} }
fn get_langs(&self) -> String {
crate::lang::LANGS.to_string()
}
} }
impl sciter::EventHandler for UI { impl sciter::EventHandler for UI {
@ -829,6 +833,7 @@ impl sciter::EventHandler for UI {
fn discover(); fn discover();
fn get_lan_peers(); fn get_lan_peers();
fn get_uuid(); fn get_uuid();
fn get_langs();
} }
} }

View File

@ -163,8 +163,43 @@ class AudioInputs: Reactor.Component {
} }
this.toggleMenuState(); this.toggleMenuState();
} }
};
class Languages: Reactor.Component {
function render() {
var langs = JSON.parse(handler.get_langs());
var me = this;
self.timer(1ms, function() { me.toggleMenuState() });
return <li>{translate('Language')}
<menu #languages key={langs.length}>
<li id="default"><span>{svg_checkmark}</span>Default</li>
<div .separator />
{langs.map(function(lang) {
return <li id={lang[0]}><span>{svg_checkmark}</span>{lang[1]}</li>;
})}
</menu>
</li>;
} }
function toggleMenuState() {
var cur = handler.get_local_option("lang") || "default";
for (var el in this.$$(menu#languages>li)) {
var selected = cur == el.id;
el.attributes.toggleClass("selected", selected);
}
}
event click $(menu#languages>li) (_, me) {
var v = me.id;
if (v == "default") v = "";
handler.set_local_option("lang", v);
app.update();
this.toggleMenuState();
}
}
function getUserName() { function getUserName() {
try { try {
return JSON.parse(handler.get_local_option("user_info")).name; return JSON.parse(handler.get_local_option("user_info")).name;
@ -223,6 +258,7 @@ class MyIdMenu: Reactor.Component {
<div .separator /> <div .separator />
<li #allow-darktheme><span>{svg_checkmark}</span>{translate('Dark Theme')}</li> <li #allow-darktheme><span>{svg_checkmark}</span>{translate('Dark Theme')}</li>
<div .separator /> <div .separator />
<Languages />
<li #about>{translate('About')} {" "}{handler.get_app_name()}</li> <li #about>{translate('About')} {" "}{handler.get_app_name()}</li>
</menu> </menu>
</popup>; </popup>;

View File

@ -1955,11 +1955,11 @@ impl Remote {
let mut config: PeerConfig = self.handler.load_config(); let mut config: PeerConfig = self.handler.load_config();
let mut transfer_metas = TransferSerde::default(); let mut transfer_metas = TransferSerde::default();
for job in self.read_jobs.iter() { for job in self.read_jobs.iter() {
let json_str = serde_json::to_string(&job.gen_meta()).unwrap(); let json_str = serde_json::to_string(&job.gen_meta()).unwrap_or_default();
transfer_metas.read_jobs.push(json_str); transfer_metas.read_jobs.push(json_str);
} }
for job in self.write_jobs.iter() { for job in self.write_jobs.iter() {
let json_str = serde_json::to_string(&job.gen_meta()).unwrap(); let json_str = serde_json::to_string(&job.gen_meta()).unwrap_or_default();
transfer_metas.write_jobs.push(json_str); transfer_metas.write_jobs.push(json_str);
} }
log::info!("meta: {:?}", transfer_metas); log::info!("meta: {:?}", transfer_metas);