From e00eaee4b56b7c00bfb00b316089b360099b587d Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 19:10:37 +0800 Subject: [PATCH 01/11] win, install cert Signed-off-by: fufesou --- Cargo.lock | 1 + Cargo.toml | 3 +- flutter/lib/desktop/pages/install_page.dart | 18 +++ src/platform/windows.rs | 164 ++++++++++++++++++++ 4 files changed, 185 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index d0f22a0ab..1029bfed4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4943,6 +4943,7 @@ dependencies = [ "flutter_rust_bridge_codegen", "fruitbasket", "hbb_common", + "hex", "hound", "image 0.24.5", "impersonate_system", diff --git a/Cargo.toml b/Cargo.toml index ba92733ca..47c2bb0e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,6 +64,7 @@ errno = "0.2.8" rdev = { git = "https://github.com/fufesou/rdev" } url = { version = "2.1", features = ["serde"] } dlopen = "0.1" +hex = "0.4.3" reqwest = { version = "0.11", features = ["blocking", "json", "rustls-tls"], default-features=false } chrono = "0.4.23" @@ -87,7 +88,7 @@ system_shutdown = "3.0.0" [target.'cfg(target_os = "windows")'.dependencies] trayicon = { git = "https://github.com/open-trade/trayicon-rs", features = ["winit"] } winit = "0.26" -winapi = { version = "0.3", features = ["winuser"] } +winapi = { version = "0.3", features = ["winuser", "wincrypt"] } winreg = "0.10" windows-service = "0.4" virtual_display = { path = "libs/virtual_display" } diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 00ca2bb23..856430dc6 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -1,3 +1,5 @@ +import 'dart:io'; + import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hbb/common.dart'; @@ -63,6 +65,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> late final TextEditingController controller; final RxBool startmenu = true.obs; final RxBool desktopicon = true.obs; + final RxBool driverCert = false.obs; final RxBool showProgress = false.obs; final RxBool btnEnabled = true.obs; @@ -165,6 +168,20 @@ class _InstallPageBodyState extends State<_InstallPageBody> Text(translate('Create desktop icon')) ], ), + Offstage( + offstage: !Platform.isWindows, + child: Row( + children: [ + Obx(() => Checkbox( + value: driverCert.value, + onChanged: (b) { + if (b != null) driverCert.value = b; + })), + Text( + '${translate('Install driver cert')} ${translate('Virtual display requirement')}') + ], + ), + ), GestureDetector( onTap: () => launchUrlString('http://rustdesk.com/privacy'), child: Row( @@ -230,6 +247,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> String args = ''; if (startmenu.value) args += ' startmenu'; if (desktopicon.value) args += ' desktopicon'; + if (driverCert.value) args += ' driverCert'; bind.installInstallMe(options: args, path: controller.text); } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 3d8b415b5..fe91b618e 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1084,6 +1084,9 @@ copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{start_menu}\\\" app_name = crate::get_app_name(), ); } + if options.contains("driverCert") { + allow_err!(cert::install_cert("IddSampleDriver.cer")); + } let meta = std::fs::symlink_metadata(std::env::current_exe()?)?; let size = meta.len() / 1024; @@ -1236,6 +1239,7 @@ fn get_uninstall(kill_self: bool) -> String { } pub fn uninstall_me(kill_self: bool) -> ResultType<()> { + allow_err!(cert::uninstall_certs()); run_cmds(get_uninstall(kill_self), true, "uninstall") } @@ -1902,3 +1906,163 @@ pub fn user_accessible_folder() -> ResultType { } Ok(dir) } + +mod cert { + use hbb_common::{bail, log, ResultType}; + use std::{path::Path, str::from_utf8}; + use winapi::shared::{ + minwindef::{BYTE, DWORD, TRUE}, + ntdef::NULL, + }; + use winapi::um::{ + errhandlingapi::GetLastError, + wincrypt::{ + CertCloseStore, CertEnumCertificatesInStore, CertNameToStrA, CertOpenSystemStoreA, + CryptHashCertificate, ALG_ID, CALG_SHA1, CERT_ID_SHA1_HASH, CERT_X500_NAME_STR, + PCCERT_CONTEXT, + }, + winreg::HKEY_LOCAL_MACHINE, + }; + use winreg::{ + enums::{KEY_WRITE, REG_BINARY}, + RegKey, + }; + + const ROOT_CERT_STORE_PATH: &str = "SOFTWARE\\Microsoft\\SystemCertificates\\ROOT\\Certificates\\"; + const THUMBPRINT_ALG: ALG_ID = CALG_SHA1; + const THUMBPRINT_LEN: DWORD = 20; + + #[inline] + unsafe fn compute_thumbprint(pb_encoded: *const BYTE, cb_encoded: DWORD) -> (Vec, String) { + let mut size = THUMBPRINT_LEN; + let mut thumbprint = [0u8; THUMBPRINT_LEN as usize]; + if CryptHashCertificate( + 0, + THUMBPRINT_ALG, + 0, + pb_encoded, + cb_encoded, + thumbprint.as_mut_ptr(), + &mut size, + ) == TRUE + { + (thumbprint.to_vec(), hex::encode(thumbprint)) + } else { + (thumbprint.to_vec(), "".to_owned()) + } + } + + #[inline] + unsafe fn open_reg_cert_store() -> ResultType { + let hklm = winreg::RegKey::predef(HKEY_LOCAL_MACHINE); + Ok(hklm.open_subkey_with_flags(ROOT_CERT_STORE_PATH, KEY_WRITE)?) + } + + // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gpef/6a9e35fa-2ac7-4c10-81e1-eabe8d2472f1 + fn create_cert_blob(thumbprint: Vec, encoded: Vec) -> Vec { + let mut blob = Vec::new(); + + let mut property_id = (CERT_ID_SHA1_HASH as u32).to_le_bytes().to_vec(); + let mut pro_reserved = [0x01, 0x00, 0x00, 0x00].to_vec(); + let mut pro_length = (THUMBPRINT_LEN as u32).to_le_bytes().to_vec(); + let mut pro_val = thumbprint; + blob.append(&mut property_id); + blob.append(&mut pro_reserved); + blob.append(&mut pro_length); + blob.append(&mut pro_val); + + let mut blob_reserved = [0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00].to_vec(); + let mut blob_length = (encoded.len() as u32).to_le_bytes().to_vec(); + let mut blob_val = encoded; + blob.append(&mut blob_reserved); + blob.append(&mut blob_length); + blob.append(&mut blob_val); + + blob + } + + pub fn install_cert>(path: P) -> ResultType<()> { + let mut cert_bytes = std::fs::read(path)?; + unsafe { + let thumbprint = compute_thumbprint(cert_bytes.as_mut_ptr(), cert_bytes.len() as _); + log::debug!("Thumbprint of cert {}", &thumbprint.1); + + let reg_cert_key = open_reg_cert_store()?; + let (cert_key, _) = reg_cert_key.create_subkey(&thumbprint.1.to_ascii_uppercase())?; + let data = winreg::RegValue { + vtype: REG_BINARY, + bytes: create_cert_blob(thumbprint.0, cert_bytes), + }; + cert_key.set_raw_value("Blob", &data)?; + } + Ok(()) + } + + fn get_thumbprints_to_rm() -> ResultType> { + let issuers_to_rm = ["CN=\"WDKTestCert admin,133225435702113567\""]; + + let mut thumbprints = Vec::new(); + let mut buf = [0u8; 1024]; + + unsafe { + let store_handle = CertOpenSystemStoreA(0 as _, "ROOT\0".as_ptr() as _); + if store_handle.is_null() { + bail!("Error opening certificate store: {}", GetLastError()); + } + + let mut cert_ctx: PCCERT_CONTEXT = CertEnumCertificatesInStore(store_handle, NULL as _); + while !cert_ctx.is_null() { + // https://stackoverflow.com/a/66432736 + let cb_size = CertNameToStrA( + (*cert_ctx).dwCertEncodingType, + &mut ((*(*cert_ctx).pCertInfo).Issuer) as _, + CERT_X500_NAME_STR, + buf.as_mut_ptr() as _, + buf.len() as _, + ); + if cb_size != 1 { + if let Ok(issuer) = from_utf8(&buf) { + for iss in issuers_to_rm.iter() { + if issuer.contains(iss) { + let (_, thumbprint) = compute_thumbprint( + (*cert_ctx).pbCertEncoded, + (*cert_ctx).cbCertEncoded, + ); + if !thumbprint.is_empty() { + thumbprints.push(thumbprint); + } + } + } + } + } + cert_ctx = CertEnumCertificatesInStore(store_handle, cert_ctx); + } + CertCloseStore(store_handle, 0); + } + + Ok(thumbprints) + } + + pub fn uninstall_certs() -> ResultType<()> { + let thumbprints = get_thumbprints_to_rm()?; + let reg_cert_key = unsafe { open_reg_cert_store()? }; + for thumbprint in thumbprints.iter() { + reg_cert_key.delete_subkey(&hex::encode(thumbprint)).ok(); + } + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn test_install_cert() { + println!("install driver cert: {:?}", cert::install_cert("RustDeskIddDriver.cer")); + } + + #[test] + fn test_uninstall_cert() { + println!("uninstall driver certs: {:?}", cert::uninstall_certs()); + } +} From 9bb9a749798ac6d3953a5e8313db20ef8d91b4c4 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 19:43:39 +0800 Subject: [PATCH 02/11] win, install cert Signed-off-by: fufesou --- flutter/lib/desktop/pages/install_page.dart | 2 +- src/lang/ca.rs | 2 ++ src/lang/cn.rs | 2 ++ src/lang/cs.rs | 2 ++ src/lang/da.rs | 2 ++ src/lang/eo.rs | 2 ++ src/lang/es.rs | 2 ++ src/lang/fr.rs | 2 ++ src/lang/hu.rs | 2 ++ src/lang/id.rs | 2 ++ src/lang/it.rs | 2 ++ src/lang/ja.rs | 2 ++ src/lang/ko.rs | 2 ++ src/lang/kz.rs | 2 ++ src/lang/nl.rs | 2 ++ src/lang/pl.rs | 2 ++ src/lang/pt_PT.rs | 2 ++ src/lang/ptbr.rs | 2 ++ src/lang/ro.rs | 2 ++ src/lang/sk.rs | 2 ++ src/lang/sl.rs | 2 ++ src/lang/sq.rs | 2 ++ src/lang/sr.rs | 2 ++ src/lang/sv.rs | 2 ++ src/lang/template.rs | 2 ++ src/lang/th.rs | 2 ++ src/lang/tr.rs | 2 ++ src/lang/tw.rs | 2 ++ src/lang/ua.rs | 2 ++ src/lang/vn.rs | 2 ++ src/platform/windows.rs | 6 +++--- 31 files changed, 62 insertions(+), 4 deletions(-) diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 856430dc6..5dbba39d7 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -178,7 +178,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> if (b != null) driverCert.value = b; })), Text( - '${translate('Install driver cert')} ${translate('Virtual display requirement')}') + '${translate('Install driver cert(test cert)')} ${translate('Virtual display requirement')}') ], ), ), diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 1e3b4930d..8ce7c59ef 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 94f0cd2d6..4ae8cbd70 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", "安装驱动证书(测试证书)"), + ("Virtual display requirement", "虚拟显示器要求") ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index e7fb7684f..a835825db 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 08758d7d1..afa86e2d1 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 63995a918..c07f34bea 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index fb45ddcd0..ca486a753 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolución"), ("No transfers in progress", "No hay transferencias en curso"), ("Set one-time password length", "Establecer contraseña de un solo uso"), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 7cb6d1239..4f39d295d 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index f9ff3bd0f..32cf282e8 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index e210432c0..1da76479d 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 7dfc67f29..41d3000dc 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Risoluzione"), ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 48391d8f2..24dc25b08 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 91b73fc45..fc92d9642 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 9d7cf3971..cb74d04bb 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 5b959a353..900a1c4b9 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolutie"), ("No transfers in progress", "Geen overdrachten in uitvoering"), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 4d99f3be2..3665b00c7 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Rozdzielczość"), ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index e568daeb5..4f9074f02 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 54389652c..a7e831fb2 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 14675762c..0b2b1407a 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 1031fb9d2..086ef00e6 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index b1b5dbeb0..7db2a9d2f 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index a73a5f10c..c18080d98 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index c4e70bd85..30e2e7a00 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 88db1e931..6284a346f 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 2255d8aa5..19474fc19 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index e0bfe8846..06b6731a6 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index e0d1d5777..80938a70b 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 6bf0b0fa8..882a779a9 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index d5142452e..70512a713 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index c71d12d16..c7e6e8f4b 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index fe91b618e..11a8ee53f 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1084,9 +1084,6 @@ copy /Y \"{tmp_path}\\Uninstall {app_name}.lnk\" \"{start_menu}\\\" app_name = crate::get_app_name(), ); } - if options.contains("driverCert") { - allow_err!(cert::install_cert("IddSampleDriver.cer")); - } let meta = std::fs::symlink_metadata(std::env::current_exe()?)?; let size = meta.len() / 1024; @@ -1177,6 +1174,9 @@ sc delete {app_name} ); run_cmds(cmds, debug, "install")?; std::thread::sleep(std::time::Duration::from_millis(2000)); + if options.contains("driverCert") { + allow_err!(cert::install_cert(std::path::Path::new(&path).join("IddSampleDriver.cer"))); + } if !silent { std::process::Command::new(&exe).spawn()?; std::process::Command::new(&exe).arg("--tray").spawn()?; From ea44eb5380996b58c6b9745855e8611869ba9288 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 19:52:29 +0800 Subject: [PATCH 03/11] win, add idd-driver build option Signed-off-by: fufesou --- .github/workflows/flutter-nightly.yml | 2 +- build.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml index 4ae281583..c9aa01a83 100644 --- a/.github/workflows/flutter-nightly.yml +++ b/.github/workflows/flutter-nightly.yml @@ -86,7 +86,7 @@ jobs: shell: bash - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter + run: python3 .\build.py --portable --hwcodec --flutter --idd-driver - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 diff --git a/build.py b/build.py index 45fe1b132..d7e6e0edf 100755 --- a/build.py +++ b/build.py @@ -106,6 +106,12 @@ def make_parser(): action='store_true', help='Skip cargo build process, only flutter version + Linux supported currently' ) + if windows: + parser.add_argument( + '--idd-driver', + action='store_true', + help='Build idd driver for virtual display.' + ) return parser From 4f60dc952268789814010468df5e3355904e3d03 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 20:29:44 +0800 Subject: [PATCH 04/11] win,debug Signed-off-by: fufesou --- .github/workflows/flutter-nightly.yml | 2 +- build.py | 6 ------ src/platform/windows.rs | 10 +++++----- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/.github/workflows/flutter-nightly.yml b/.github/workflows/flutter-nightly.yml index c9aa01a83..2a1254e23 100644 --- a/.github/workflows/flutter-nightly.yml +++ b/.github/workflows/flutter-nightly.yml @@ -86,7 +86,7 @@ jobs: shell: bash - name: Build rustdesk - run: python3 .\build.py --portable --hwcodec --flutter --idd-driver + run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver - name: Sign rustdesk files uses: GermanBluefox/code-sign-action@v7 diff --git a/build.py b/build.py index d7e6e0edf..45fe1b132 100755 --- a/build.py +++ b/build.py @@ -106,12 +106,6 @@ def make_parser(): action='store_true', help='Skip cargo build process, only flutter version + Linux supported currently' ) - if windows: - parser.add_argument( - '--idd-driver', - action='store_true', - help='Build idd driver for virtual display.' - ) return parser diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 11a8ee53f..22896e65b 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1908,7 +1908,7 @@ pub fn user_accessible_folder() -> ResultType { } mod cert { - use hbb_common::{bail, log, ResultType}; + use hbb_common::{allow_err, bail, log, ResultType}; use std::{path::Path, str::from_utf8}; use winapi::shared::{ minwindef::{BYTE, DWORD, TRUE}, @@ -1946,7 +1946,7 @@ mod cert { &mut size, ) == TRUE { - (thumbprint.to_vec(), hex::encode(thumbprint)) + (thumbprint.to_vec(), hex::encode(thumbprint).to_ascii_uppercase()) } else { (thumbprint.to_vec(), "".to_owned()) } @@ -1988,7 +1988,7 @@ mod cert { log::debug!("Thumbprint of cert {}", &thumbprint.1); let reg_cert_key = open_reg_cert_store()?; - let (cert_key, _) = reg_cert_key.create_subkey(&thumbprint.1.to_ascii_uppercase())?; + let (cert_key, _) = reg_cert_key.create_subkey(&thumbprint.1)?; let data = winreg::RegValue { vtype: REG_BINARY, bytes: create_cert_blob(thumbprint.0, cert_bytes), @@ -2021,7 +2021,7 @@ mod cert { buf.len() as _, ); if cb_size != 1 { - if let Ok(issuer) = from_utf8(&buf) { + if let Ok(issuer) = from_utf8(&buf[..cb_size as _]) { for iss in issuers_to_rm.iter() { if issuer.contains(iss) { let (_, thumbprint) = compute_thumbprint( @@ -2047,7 +2047,7 @@ mod cert { let thumbprints = get_thumbprints_to_rm()?; let reg_cert_key = unsafe { open_reg_cert_store()? }; for thumbprint in thumbprints.iter() { - reg_cert_key.delete_subkey(&hex::encode(thumbprint)).ok(); + allow_err!(reg_cert_key.delete_subkey(thumbprint)); } Ok(()) } From cf676df976e7ed751ee8151ac663be5e7d6d79e4 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 20:34:06 +0800 Subject: [PATCH 05/11] remove unused file Signed-off-by: fufesou --- build.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.py b/build.py index 45fe1b132..0f511fc51 100755 --- a/build.py +++ b/build.py @@ -37,7 +37,7 @@ def parse_rc_features(feature): 'IddDriver': { 'zip_url': 'https://github.com/fufesou/RustDeskIddDriver/releases/download/v0.1/RustDeskIddDriver_x64.zip', 'checksum_url': 'https://github.com/fufesou/RustDeskIddDriver/releases/download/v0.1/checksum_md5', - 'exclude': ['README.md'], + 'exclude': ['README.md', 'certmgr.exe', 'install_cert_runas_admin.bat'], }, 'PrivacyMode': { 'zip_url': 'https://github.com/fufesou/RustDeskTempTopMostWindow/releases/download/v0.1' @@ -386,7 +386,7 @@ def main(): os.chdir('libs/virtual_display/dylib') system2('cargo build --release') os.chdir('../../..') - + return if flutter: build_flutter_windows(version, features) return From 28e95c0552171fad8484ac0157308473e86af24d Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 20:42:40 +0800 Subject: [PATCH 06/11] debug Signed-off-by: fufesou --- build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.py b/build.py index 0f511fc51..4a39f596d 100755 --- a/build.py +++ b/build.py @@ -386,7 +386,7 @@ def main(): os.chdir('libs/virtual_display/dylib') system2('cargo build --release') os.chdir('../../..') - return + if flutter: build_flutter_windows(version, features) return From 79934d006b3a2b83badc972a3f98a4bf5490133b Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 21:01:28 +0800 Subject: [PATCH 07/11] fix error cert file Signed-off-by: fufesou --- src/lang/cn.rs | 2 +- src/platform/windows.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 4ae8cbd70..7f579ecdd 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -462,6 +462,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", "安装驱动证书(测试证书)"), - ("Virtual display requirement", "虚拟显示器要求") + ("Virtual display requirement", "虚拟显示器需要") ].iter().cloned().collect(); } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 22896e65b..dbf30311c 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1175,7 +1175,7 @@ sc delete {app_name} run_cmds(cmds, debug, "install")?; std::thread::sleep(std::time::Duration::from_millis(2000)); if options.contains("driverCert") { - allow_err!(cert::install_cert(std::path::Path::new(&path).join("IddSampleDriver.cer"))); + allow_err!(cert::install_cert(std::path::Path::new(&path).join("RustDeskIddDriver.cer"))); } if !silent { std::process::Command::new(&exe).spawn()?; From c0257bff525b57935f77fdad9bff2fa49122af01 Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 22:38:01 +0800 Subject: [PATCH 08/11] win, install cert Signed-off-by: fufesou --- src/core_main.rs | 4 ++++ src/lang/de.rs | 2 ++ src/lang/fa.rs | 2 ++ src/lang/ru.rs | 2 ++ src/platform/windows.rs | 25 ++++++++++++++++++++++--- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/core_main.rs b/src/core_main.rs index 60a7d9c9c..76b630f88 100644 --- a/src/core_main.rs +++ b/src/core_main.rs @@ -143,6 +143,10 @@ pub fn core_main() -> Option> { #[cfg(feature = "with_rc")] hbb_common::allow_err!(crate::rc::extract_resources(&args[1])); return None; + } else if args[0] == "--install-cert" { + #[cfg(windows)] + hbb_common::allow_err!(crate::platform::windows::install_cert(&args[1])); + return None; } else if args[0] == "--portable-service" { crate::platform::elevate_or_run_as_system( click_setup, diff --git a/src/lang/de.rs b/src/lang/de.rs index 78d6d6c15..26fb727c5 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Auflösung"), ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 9c24ca6c3..a45768701 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "وضوح"), ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index adc5872a3..145700c0d 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -461,5 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Разрешение"), ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), + ("Install driver cert(test cert)", ""), + ("Virtual display requirement", "") ].iter().cloned().collect(); } diff --git a/src/platform/windows.rs b/src/platform/windows.rs index dbf30311c..696a18ab9 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -1108,6 +1108,12 @@ if exist \"{tmp_path}\\{app_name} Tray.lnk\" del /f /q \"{tmp_path}\\{app_name} ); let src_exe = std::env::current_exe()?.to_str().unwrap_or("").to_string(); + let install_cert = if options.contains("driverCert") { + format!("\"{}\" --install-cert \"RustDeskIddDriver.cer\"", src_exe) + } else { + "".to_owned() + }; + let cmds = format!( " {uninstall_str} @@ -1139,6 +1145,7 @@ sc create {app_name} binpath= \"\\\"{exe}\\\" --import-config \\\"{config_path}\ sc start {app_name} sc stop {app_name} sc delete {app_name} +{install_cert} {after_install} {sleep} ", @@ -1159,6 +1166,7 @@ sc delete {app_name} shortcuts=shortcuts, config_path=Config::file().to_str().unwrap_or(""), lic=register_licence(), + install_cert=install_cert, after_install=get_after_install(&exe), sleep=if debug { "timeout 300" @@ -1174,9 +1182,6 @@ sc delete {app_name} ); run_cmds(cmds, debug, "install")?; std::thread::sleep(std::time::Duration::from_millis(2000)); - if options.contains("driverCert") { - allow_err!(cert::install_cert(std::path::Path::new(&path).join("RustDeskIddDriver.cer"))); - } if !silent { std::process::Command::new(&exe).spawn()?; std::process::Command::new(&exe).arg("--tray").spawn()?; @@ -1907,6 +1912,20 @@ pub fn user_accessible_folder() -> ResultType { Ok(dir) } +#[inline] +pub fn install_cert(cert_file: &str) -> ResultType<()> { + let exe_file = std::env::current_exe()?; + if let Some(cur_dir) = exe_file.parent() { + allow_err!(cert::install_cert(cur_dir.join(cert_file))); + } else { + bail!( + "Invalid exe parent for {}", + exe_file.to_string_lossy().as_ref() + ); + } + Ok(()) +} + mod cert { use hbb_common::{allow_err, bail, log, ResultType}; use std::{path::Path, str::from_utf8}; From ad32eec879c135ee2eb0e7d3d8da61d2e25745bd Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 8 Mar 2023 11:14:29 +0800 Subject: [PATCH 09/11] better install prompt Signed-off-by: fufesou --- flutter/lib/common.dart | 1 - flutter/lib/desktop/pages/install_page.dart | 50 +++++++++++++++++---- src/lang/ca.rs | 3 +- src/lang/cn.rs | 3 +- src/lang/cs.rs | 3 +- src/lang/da.rs | 3 +- src/lang/de.rs | 3 +- src/lang/eo.rs | 3 +- src/lang/es.rs | 3 +- src/lang/fa.rs | 3 +- src/lang/fr.rs | 3 +- src/lang/hu.rs | 3 +- src/lang/id.rs | 3 +- src/lang/it.rs | 3 +- src/lang/ja.rs | 3 +- src/lang/ko.rs | 3 +- src/lang/kz.rs | 3 +- src/lang/nl.rs | 3 +- src/lang/pl.rs | 3 +- src/lang/pt_PT.rs | 3 +- src/lang/ptbr.rs | 3 +- src/lang/ro.rs | 3 +- src/lang/ru.rs | 3 +- src/lang/sk.rs | 3 +- src/lang/sl.rs | 3 +- src/lang/sq.rs | 3 +- src/lang/sr.rs | 3 +- src/lang/sv.rs | 3 +- src/lang/template.rs | 3 +- src/lang/th.rs | 3 +- src/lang/tr.rs | 3 +- src/lang/tw.rs | 3 +- src/lang/ua.rs | 3 +- src/lang/vn.rs | 3 +- 34 files changed, 106 insertions(+), 41 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index fce2c852f..666eab0ba 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -946,7 +946,6 @@ Widget msgboxContent(String type, String title, String text) { void msgBoxCommon(OverlayDialogManager dialogManager, String title, Widget content, List buttons, {bool hasCancel = true}) { - dialogManager.dismissAll(); dialogManager.show((setState, close) => CustomAlertDialog( title: Text( translate(title), diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 5dbba39d7..96a090b17 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -65,7 +65,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> late final TextEditingController controller; final RxBool startmenu = true.obs; final RxBool desktopicon = true.obs; - final RxBool driverCert = false.obs; + final RxBool driverCert = true.obs; final RxBool showProgress = false.obs; final RxBool btnEnabled = true.obs; @@ -242,13 +242,47 @@ class _InstallPageBodyState extends State<_InstallPageBody> } void install() { - btnEnabled.value = false; - showProgress.value = true; - String args = ''; - if (startmenu.value) args += ' startmenu'; - if (desktopicon.value) args += ' desktopicon'; - if (driverCert.value) args += ' driverCert'; - bind.installInstallMe(options: args, path: controller.text); + do_install() { + btnEnabled.value = false; + showProgress.value = true; + String args = ''; + if (startmenu.value) args += ' startmenu'; + if (desktopicon.value) args += ' desktopicon'; + if (driverCert.value) args += ' driverCert'; + bind.installInstallMe(options: args, path: controller.text); + } + + if (driverCert.isTrue) { + final tag = 'install-info-install-cert-confirm'; + final btns = [ + dialogButton( + 'Cancel', + onPressed: () => gFFI.dialogManager.dismissByTag(tag), + isOutline: true, + ), + dialogButton( + 'OK', + onPressed: () { + gFFI.dialogManager.dismissByTag(tag); + do_install(); + }, + isOutline: false, + ), + ]; + gFFI.dialogManager.show( + (setState, close) => CustomAlertDialog( + title: null, + content: SelectionArea( + child: msgboxContent( + 'info', '', 'Continue with installing cert is checked.')), + actions: btns, + onCancel: close, + ), + tag: tag, + ); + } else { + do_install(); + } } void selectInstallPath() async { diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 8ce7c59ef..7f0d902d5 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 7f579ecdd..2dad9d63e 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", "安装驱动证书(测试证书)"), - ("Virtual display requirement", "虚拟显示器需要") + ("Virtual display requirement", "虚拟显示器需"), + ("Continue with installing cert is checked.", "安装证书已选择,是否继续") ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index a835825db..d6a27eed2 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index afa86e2d1..082e0ec06 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 26fb727c5..563925391 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index c07f34bea..631d66a23 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index ca486a753..bbfce42c6 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "No hay transferencias en curso"), ("Set one-time password length", "Establecer contraseña de un solo uso"), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index a45768701..f7b609bdf 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 4f39d295d..933944fae 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 32cf282e8..557ce9439 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 1da76479d..40483bc6a 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 41d3000dc..afbf862c2 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 24dc25b08..f64e95c62 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index fc92d9642..e43df3cc1 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index cb74d04bb..636dcaf70 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 900a1c4b9..912eaec33 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Geen overdrachten in uitvoering"), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 3665b00c7..b89f2fb25 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 4f9074f02..dad48c821 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index a7e831fb2..c5d32b192 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 0b2b1407a..1a9ecd78e 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 145700c0d..f8603a44d 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 086ef00e6..3a9383497 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 7db2a9d2f..8ae15250c 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index c18080d98..77af8b5c8 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 30e2e7a00..2fb24a223 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 6284a346f..18259f32e 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index 19474fc19..f0bb91f38 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 06b6731a6..b0b31829d 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 80938a70b..81ac5cbb6 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 882a779a9..3d394307e 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 70512a713..c40452778 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index c7e6e8f4b..6ecf025a4 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -462,6 +462,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("No transfers in progress", ""), ("Set one-time password length", ""), ("Install driver cert(test cert)", ""), - ("Virtual display requirement", "") + ("Virtual display requirement", ""), + ("Continue with installing cert is checked.", "") ].iter().cloned().collect(); } From 1d85d87b402b025e9702cc92d13889a153107a95 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 8 Mar 2023 12:51:04 +0800 Subject: [PATCH 10/11] translate changes Signed-off-by: fufesou --- flutter/lib/desktop/pages/install_page.dart | 5 ++--- src/lang/ca.rs | 6 +++--- src/lang/cn.rs | 6 +++--- src/lang/cs.rs | 6 +++--- src/lang/da.rs | 6 +++--- src/lang/de.rs | 6 +++--- src/lang/el.rs | 7 +++++-- src/lang/en.rs | 1 + src/lang/eo.rs | 6 +++--- src/lang/es.rs | 6 +++--- src/lang/fa.rs | 6 +++--- src/lang/fr.rs | 6 +++--- src/lang/hu.rs | 6 +++--- src/lang/id.rs | 6 +++--- src/lang/it.rs | 6 +++--- src/lang/ja.rs | 6 +++--- src/lang/ko.rs | 6 +++--- src/lang/kz.rs | 6 +++--- src/lang/nl.rs | 6 +++--- src/lang/pl.rs | 6 +++--- src/lang/pt_PT.rs | 6 +++--- src/lang/ptbr.rs | 6 +++--- src/lang/ro.rs | 6 +++--- src/lang/ru.rs | 6 +++--- src/lang/sk.rs | 6 +++--- src/lang/sl.rs | 6 +++--- src/lang/sq.rs | 6 +++--- src/lang/sr.rs | 6 +++--- src/lang/sv.rs | 6 +++--- src/lang/template.rs | 6 +++--- src/lang/th.rs | 6 +++--- src/lang/tr.rs | 6 +++--- src/lang/tw.rs | 6 +++--- src/lang/ua.rs | 6 +++--- src/lang/vn.rs | 6 +++--- 35 files changed, 104 insertions(+), 101 deletions(-) diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 96a090b17..2334d633f 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -178,7 +178,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> if (b != null) driverCert.value = b; })), Text( - '${translate('Install driver cert(test cert)')} ${translate('Virtual display requirement')}') + '${translate('Install driver cert (test cert)')} ${translate('Virtual display need')}') ], ), ), @@ -273,8 +273,7 @@ class _InstallPageBodyState extends State<_InstallPageBody> (setState, close) => CustomAlertDialog( title: null, content: SelectionArea( - child: msgboxContent( - 'info', '', 'Continue with installing cert is checked.')), + child: msgboxContent('info', '', 'instsall_cert_tip')), actions: btns, onCancel: close, ), diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 7f0d902d5..7c238c818 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 2dad9d63e..d12071186 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", "安装驱动证书(测试证书)"), - ("Virtual display requirement", "虚拟显示器需"), - ("Continue with installing cert is checked.", "安装证书已选择,是否继续") + ("Install driver cert (test cert)", "安装驱动证书 (测试证书)"), + ("Virtual display need", "虚拟显示器需要"), + ("instsall_cert_tip", "已选择安装驱动,是否继续?") ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index d6a27eed2..622730d93 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index 082e0ec06..ce84b4805 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 563925391..37de302bd 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Auflösung"), ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 89458bec6..162218edd 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -460,6 +460,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Codec", "Κωδικοποίηση"), ("Resolution", "Ανάλυση"), ("No transfers in progress", "Δεν υπάρχει μεταφορά σε εξέλιξη"), - ("Set one-time password length", "Μέγεθος κωδικού μιας χρήσης"), - ].iter().cloned().collect(); + ("Set one-time password length", "Μέγεθος κωδικού μιας χρήσης"), + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") + ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index 250530013..01a4c843e 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -45,5 +45,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("config_microphone", "In order to speak remotely, you need to grant RustDesk \"Record Audio\" permissions."), ("relay_hint_tip", "It may not be possible to connect directly, you can try to connect via relay. \nIn addition, if you want to use relay on your first try, you can add the \"/r\" suffix to the ID, or select the option \"Always connect via relay\" in the peer card."), ("No transfers in progress", ""), + ("instsall_cert_tip", "\"Install driver cert\" is checked, continue?") ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 631d66a23..5c6c92783 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index bbfce42c6..fefa8b74e 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolución"), ("No transfers in progress", "No hay transferencias en curso"), ("Set one-time password length", "Establecer contraseña de un solo uso"), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index f7b609bdf..f6be0e01b 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "وضوح"), ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 933944fae..1e438bba6 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 557ce9439..1c243e2f6 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 40483bc6a..8edc78e1d 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index afbf862c2..400e0ad98 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Risoluzione"), ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index f64e95c62..e87a232f9 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index e43df3cc1..06d10d018 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 636dcaf70..ede87875b 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 912eaec33..55ad9504d 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolutie"), ("No transfers in progress", "Geen overdrachten in uitvoering"), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index b89f2fb25..08106782d 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Rozdzielczość"), ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index dad48c821..11583b265 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index c5d32b192..7aa014682 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 1a9ecd78e..49b3b3585 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index f8603a44d..243ffda40 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Разрешение"), ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 3a9383497..1a5b9207d 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 8ae15250c..1efc4de47 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 77af8b5c8..ffe3c9edd 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 2fb24a223..fe7e0bae6 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 18259f32e..98ceed9ad 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index f0bb91f38..e0d7929af 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index b0b31829d..615c15508 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 81ac5cbb6..5bbddde5e 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 3d394307e..a056d6b81 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index c40452778..1bab4a553 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 6ecf025a4..f5b8052ef 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -461,8 +461,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert(test cert)", ""), - ("Virtual display requirement", ""), - ("Continue with installing cert is checked.", "") + ("Install driver cert (test cert)", ""), + ("Virtual display need", ""), + ("instsall_cert_tip", "") ].iter().cloned().collect(); } From 18ca4273bef7fc4b8815f62d504b71e2eb771550 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 8 Mar 2023 15:57:33 +0800 Subject: [PATCH 11/11] better prompt Signed-off-by: fufesou --- flutter/lib/desktop/pages/install_page.dart | 78 ++++++++++++++------- src/lang/ca.rs | 5 +- src/lang/cn.rs | 5 +- src/lang/cs.rs | 5 +- src/lang/da.rs | 5 +- src/lang/de.rs | 5 +- src/lang/el.rs | 5 +- src/lang/en.rs | 3 +- src/lang/eo.rs | 5 +- src/lang/es.rs | 5 +- src/lang/fa.rs | 5 +- src/lang/fr.rs | 5 +- src/lang/hu.rs | 5 +- src/lang/id.rs | 5 +- src/lang/it.rs | 5 +- src/lang/ja.rs | 5 +- src/lang/ko.rs | 5 +- src/lang/kz.rs | 5 +- src/lang/nl.rs | 5 +- src/lang/pl.rs | 5 +- src/lang/pt_PT.rs | 5 +- src/lang/ptbr.rs | 5 +- src/lang/ro.rs | 5 +- src/lang/ru.rs | 5 +- src/lang/sk.rs | 5 +- src/lang/sl.rs | 5 +- src/lang/sq.rs | 5 +- src/lang/sr.rs | 5 +- src/lang/sv.rs | 5 +- src/lang/template.rs | 5 +- src/lang/th.rs | 5 +- src/lang/tr.rs | 5 +- src/lang/tw.rs | 5 +- src/lang/ua.rs | 5 +- src/lang/vn.rs | 5 +- 35 files changed, 119 insertions(+), 127 deletions(-) diff --git a/flutter/lib/desktop/pages/install_page.dart b/flutter/lib/desktop/pages/install_page.dart index 2334d633f..adc0df138 100644 --- a/flutter/lib/desktop/pages/install_page.dart +++ b/flutter/lib/desktop/pages/install_page.dart @@ -148,40 +148,63 @@ class _InstallPageBodyState extends State<_InstallPageBody> .marginOnly(left: em)) ], ).marginSymmetric(vertical: 2 * em), - Row( - children: [ - Obx(() => Checkbox( - value: startmenu.value, - onChanged: (b) { - if (b != null) startmenu.value = b; - })), - Text(translate('Create start menu shortcuts')) - ], - ), - Row( - children: [ - Obx(() => Checkbox( - value: desktopicon.value, - onChanged: (b) { - if (b != null) desktopicon.value = b; - })), - Text(translate('Create desktop icon')) - ], - ), - Offstage( - offstage: !Platform.isWindows, + TextButton( + onPressed: () => startmenu.value = !startmenu.value, child: Row( children: [ Obx(() => Checkbox( - value: driverCert.value, + value: startmenu.value, onChanged: (b) { - if (b != null) driverCert.value = b; + if (b != null) startmenu.value = b; })), - Text( - '${translate('Install driver cert (test cert)')} ${translate('Virtual display need')}') + RichText( + text: TextSpan( + text: translate('Create start menu shortcuts'), + style: DefaultTextStyle.of(context).style, + ), + ), ], ), ), + TextButton( + onPressed: () => desktopicon.value = !desktopicon.value, + child: Row( + children: [ + Obx(() => Checkbox( + value: desktopicon.value, + onChanged: (b) { + if (b != null) desktopicon.value = b; + })), + RichText( + text: TextSpan( + text: translate('Create desktop icon'), + style: DefaultTextStyle.of(context).style, + ), + ), + ], + ), + ), + Offstage( + offstage: !Platform.isWindows, + child: TextButton( + onPressed: () => driverCert.value = !driverCert.value, + child: Row( + children: [ + Obx(() => Checkbox( + value: driverCert.value, + onChanged: (b) { + if (b != null) driverCert.value = b; + })), + RichText( + text: TextSpan( + text: translate('idd_driver_tip'), + style: DefaultTextStyle.of(context).style, + ), + ), + ], + ), + ), + ), GestureDetector( onTap: () => launchUrlString('http://rustdesk.com/privacy'), child: Row( @@ -273,7 +296,8 @@ class _InstallPageBodyState extends State<_InstallPageBody> (setState, close) => CustomAlertDialog( title: null, content: SelectionArea( - child: msgboxContent('info', '', 'instsall_cert_tip')), + child: + msgboxContent('info', 'Warning', 'confirm_idd_driver_tip')), actions: btns, onCancel: close, ), diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 7c238c818..3cea5e60e 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index d12071186..161fa0358 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", "安装驱动证书 (测试证书)"), - ("Virtual display need", "虚拟显示器需要"), - ("instsall_cert_tip", "已选择安装驱动,是否继续?") + ("idd_driver_tip", "安装虚拟显示器驱动,以便在没有连接显示器的情况下启动虚拟显示器进行控制。"), + ("confirm_idd_driver_tip", "安装虚拟显示器驱动的选项已勾选。请注意,测试证书将被安装以信任虚拟显示器驱动。测试证书仅会用于信任Rustdesk的驱动。") ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 622730d93..86e9c47c7 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index ce84b4805..d262c08cf 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 37de302bd..21e57701c 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Auflösung"), ("No transfers in progress", "Keine Übertragungen im Gange"), ("Set one-time password length", "Länge des Einmalpassworts festlegen"), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index 162218edd..b0e629ba7 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Ανάλυση"), ("No transfers in progress", "Δεν υπάρχει μεταφορά σε εξέλιξη"), ("Set one-time password length", "Μέγεθος κωδικού μιας χρήσης"), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/en.rs b/src/lang/en.rs index 01a4c843e..100788f6e 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -45,6 +45,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("config_microphone", "In order to speak remotely, you need to grant RustDesk \"Record Audio\" permissions."), ("relay_hint_tip", "It may not be possible to connect directly, you can try to connect via relay. \nIn addition, if you want to use relay on your first try, you can add the \"/r\" suffix to the ID, or select the option \"Always connect via relay\" in the peer card."), ("No transfers in progress", ""), - ("instsall_cert_tip", "\"Install driver cert\" is checked, continue?") + ("idd_driver_tip", "Install virtual display driver which is used when you have no physical displays."), + ("confirm_idd_driver_tip", "The option to install the virtual display driver is checked. Note that a test certificate will be installed to trust the virtual display driver. This test certificate will only be used to trust Rustdesk drivers.") ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index 5c6c92783..f36afedcb 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index fefa8b74e..2b38ecd1e 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolución"), ("No transfers in progress", "No hay transferencias en curso"), ("Set one-time password length", "Establecer contraseña de un solo uso"), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index f6be0e01b..0cc8188b2 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "وضوح"), ("No transfers in progress", "هیچ انتقالی در حال انجام نیست"), ("Set one-time password length", "طول رمز یکبار مصرف را تعیین کنید"), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 1e438bba6..ef74b0666 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 1c243e2f6..f984afcdd 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 8edc78e1d..53f718e82 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 400e0ad98..c3b77ddf7 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Risoluzione"), ("No transfers in progress", "Nessun trasferimento in corso"), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index e87a232f9..4a0fc3abb 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 06d10d018..a3aef55cc 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index ede87875b..8b7582af3 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 55ad9504d..6fb537119 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Resolutie"), ("No transfers in progress", "Geen overdrachten in uitvoering"), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 08106782d..d60fe2d30 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Rozdzielczość"), ("No transfers in progress", "Brak transferów w toku"), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 11583b265..2747a0ca7 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 7aa014682..e8fca4b80 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 49b3b3585..e4521305f 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 243ffda40..473ec402f 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "Разрешение"), ("No transfers in progress", "Передача не осуществляется"), ("Set one-time password length", "Установить длину одноразового пароля"), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index 1a5b9207d..aeed03fcd 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 1efc4de47..eaa8b1b50 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index ffe3c9edd..46f14c738 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index fe7e0bae6..ee48beb32 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 98ceed9ad..b099acc9d 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index e0d7929af..bfab1a33a 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index 615c15508..d77eb5fc1 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 5bbddde5e..d4d0b942d 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index a056d6b81..e1119b12c 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", "分辨率"), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 1bab4a553..216f764c1 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index f5b8052ef..c7fbc5b9b 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -461,8 +461,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Resolution", ""), ("No transfers in progress", ""), ("Set one-time password length", ""), - ("Install driver cert (test cert)", ""), - ("Virtual display need", ""), - ("instsall_cert_tip", "") + ("idd_driver_tip", ""), + ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); }