From 8a083f40b0a560f18d673751c1ac54cd428aef25 Mon Sep 17 00:00:00 2001 From: csf Date: Mon, 6 Mar 2023 23:37:43 +0900 Subject: [PATCH 01/26] fix mobile change theme failure --- flutter/lib/common.dart | 2 +- src/lang/cn.rs | 2 +- src/lang/tw.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index dc91e9414..3d6f62efc 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -375,7 +375,7 @@ class MyTheme { static void changeDarkMode(ThemeMode mode) async { Get.changeThemeMode(mode); - if (desktopType == DesktopType.main) { + if (desktopType == DesktopType.main || isAndroid || isIOS) { if (mode == ThemeMode.system) { await bind.mainSetLocalOption(key: kCommConfKeyTheme, value: ''); } else { diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 3f4f6d25c..b5f71e588 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -349,7 +349,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Security", "安全"), ("Theme", "主题"), ("Dark Theme", "暗黑主题"), - ("Light Theme", ""), + ("Light Theme", "明亮主题"), ("Dark", "黑暗"), ("Light", "明亮"), ("Follow System", "跟随系统"), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index d0f12cdfa..3fb2297e3 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -349,7 +349,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Security", "安全"), ("Theme", "主題"), ("Dark Theme", "暗黑主題"), - ("Light Theme", ""), + ("Light Theme", "明亮主題"), ("Dark", "黑暗"), ("Light", "明亮"), ("Follow System", "跟隨系統"), From 9f69cf3d6edc76d15a7c82672c0c3245a35ce469 Mon Sep 17 00:00:00 2001 From: csf Date: Tue, 7 Mar 2023 11:08:41 +0900 Subject: [PATCH 02/26] fix mobile server event stream --- flutter/lib/consts.dart | 3 +++ src/flutter.rs | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/flutter/lib/consts.dart b/flutter/lib/consts.dart index 95e4d17e7..e2a3c6f0b 100644 --- a/flutter/lib/consts.dart +++ b/flutter/lib/consts.dart @@ -14,7 +14,10 @@ const String kPeerPlatformAndroid = "Android"; /// [kAppTypeMain] used by 'Desktop Main Page' , 'Mobile (Client and Server)', "Install Page" const String kAppTypeMain = "main"; + +/// [kAppTypeConnectionManager] only for 'Desktop CM Page' const String kAppTypeConnectionManager = "cm"; + const String kAppTypeDesktopRemote = "remote"; const String kAppTypeDesktopFileTransfer = "file transfer"; const String kAppTypeDesktopPortForward = "port forward"; diff --git a/src/flutter.rs b/src/flutter.rs index a39b992bf..354e418eb 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -26,8 +26,14 @@ use std::{ sync::{Arc, RwLock}, }; +/// tag "main" for [Desktop Main Page] and [Mobile (Client and Server)] (the mobile don't need multiple windows, only one global event stream is needed) +/// tag "cm" only for [Desktop CM Page] pub(super) const APP_TYPE_MAIN: &str = "main"; +#[cfg(not(any(target_os = "android", target_os = "ios")))] pub(super) const APP_TYPE_CM: &str = "cm"; +#[cfg(any(target_os = "android", target_os = "ios"))] +pub(super) const APP_TYPE_CM: &str = "main"; + pub(super) const APP_TYPE_DESKTOP_REMOTE: &str = "remote"; pub(super) const APP_TYPE_DESKTOP_FILE_TRANSFER: &str = "file transfer"; pub(super) const APP_TYPE_DESKTOP_PORT_FORWARD: &str = "port forward"; From 93d196c2f89929e52c97c992375c459a434a7e45 Mon Sep 17 00:00:00 2001 From: csf Date: Tue, 7 Mar 2023 11:21:23 +0900 Subject: [PATCH 03/26] mobile save config when disable input --- flutter/lib/models/server_model.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/flutter/lib/models/server_model.dart b/flutter/lib/models/server_model.dart index 7ee23ec40..90059e47f 100644 --- a/flutter/lib/models/server_model.dart +++ b/flutter/lib/models/server_model.dart @@ -263,8 +263,11 @@ class ServerModel with ChangeNotifier { toggleInput() { if (_inputOk) { parent.target?.invokeMethod("stop_input"); + bind.mainSetOption(key: "enable-keyboard", value: 'N'); } else { if (parent.target != null) { + /// the result of toggle-on depends on user actions in the settings page. + /// handle result, see [ServerModel.changeStatue] showInputWarnAlert(parent.target!); } } From 56773b8d548098f52be37460a1b17eef4878552e Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Tue, 7 Mar 2023 14:55:26 +0100 Subject: [PATCH 04/26] Update README-DE.md --- docs/README-DE.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/README-DE.md b/docs/README-DE.md index ff3ec1d7f..2c159bd07 100644 --- a/docs/README-DE.md +++ b/docs/README-DE.md @@ -6,18 +6,18 @@ DateistrukturScreenshots
[English] | [Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Dansk] | [Ελληνικά]
- Wir brauchen deine Hilfe, um dieses README, die RustDesk-Benutzeroberfläche und die Dokumentation in deine Muttersprache zu übersetzen. + Wir brauchen Ihre Hilfe, um dieses README, die RustDesk-Benutzeroberfläche und die Dokumentation in Ihre Muttersprache zu übersetzen.

-Rede mit uns auf: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) +Reden Sie mit uns auf: [Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/I2I04VU09) -RustDesk ist eine in Rust geschriebene Remote-Desktop-Software, die out of the box ohne besondere Konfiguration funktioniert. Du hast die volle Kontrolle über deine Daten und musst dir keine Sorgen um die Sicherheit machen. Du kannst unseren Rendezvous/Relay-Server nutzen, [einen eigenen Server aufsetzen](https://rustdesk.com/server) oder [einen eigenen Server programmieren](https://github.com/rustdesk/rustdesk-server-demo). +RustDesk ist eine in Rust geschriebene Remote-Desktop-Software, die out of the box ohne besondere Konfiguration funktioniert. Sie haben die volle Kontrolle über Ihre Daten und müssen sich keine Sorgen um die Sicherheit machen. Sie können unseren Rendezvous/Relay-Server nutzen, [einen eigenen Server aufsetzen](https://rustdesk.com/server) oder [einen eigenen Server programmieren](https://github.com/rustdesk/rustdesk-server-demo). ![image](https://user-images.githubusercontent.com/71636191/171661982-430285f0-2e12-4b1d-9957-4a58e375304d.png) -RustDesk heißt jegliche Mitarbeit willkommen. Schau dir [CONTRIBUTING-DE.md](CONTRIBUTING-DE.md) an, wenn du Unterstützung beim Start brauchst. +RustDesk heißt jegliche Mitarbeit willkommen. Schauen Sie sich [CONTRIBUTING-DE.md](CONTRIBUTING-DE.md) an, wenn Sie Unterstützung beim Start brauchen. [**FAQ**](https://github.com/rustdesk/rustdesk/wiki/FAQ) @@ -31,29 +31,29 @@ RustDesk heißt jegliche Mitarbeit willkommen. Schau dir [CONTRIBUTING-DE.md](CO ## Freie öffentliche Server -Nachfolgend sind die Server gelistet, die du kostenlos nutzen kannst. Es kann sein, dass sich diese Liste immer mal wieder ändert. Falls du nicht in der Nähe einer dieser Server bist, kann es sein, dass deine Verbindung langsam sein wird. +Nachfolgend sind die Server gelistet, die Sie kostenlos nutzen können. Es kann sein, dass sich diese Liste immer mal wieder ändert. Falls Sie nicht in der Nähe einer dieser Server sind, kann es sein, dass Ihre Verbindung langsam sein wird. | Standort | Anbieter | Spezifikation | | --------- | ------------- | ------------------ | -| Südkorea (Seoul) | AWS lightsail | 1 vCPU / 0,5 GB RAM | -| Deutschland | Hetzner | 2 vCPU / 4 GB RAM | -| Deutschland | Codext | 4 vCPU / 8 GB RAM | -| Finnland (Helsinki) | 0x101 Cyber Security | 4 vCPU / 8 GB RAM | -| USA (Ashburn) | 0x101 Cyber Security | 4 vCPU / 8 GB RAM | -| Ukraine (Kiew) | dc.volia (2VM) | 2 vCPU / 4 GB RAM | +| Südkorea (Seoul) | [AWS lightsail](https://aws.amazon.com/de/) | 1 vCPU / 0,5 GB RAM | +| Deutschland | [Hetzner](https://www.hetzner.com/de/) | 2 vCPU / 4 GB RAM | +| Deutschland | [Codext](https://codext.de/) | 4 vCPU / 8 GB RAM | +| Finnland (Helsinki) | [Netlock](https://netlockendpoint.com/de/index.html) | 4 vCPU / 8 GB RAM | +| USA (Ashburn) | [Netlock](https://netlockendpoint.com/de/index.html) | 4 vCPU / 8 GB RAM | +| Ukraine (Kiew) | [dc.volia](https://dc.volia.com) | 2 vCPU / 4 GB RAM | ## Dev-Container [![In Dev-Containern öffnen](https://img.shields.io/static/v1?label=Dev%20Container&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/rustdesk/rustdesk) -Wenn du VS Code und Docker bereits installiert hast, kannst du auf das Abzeichen oben klicken, um loszulegen. Wenn du darauf klickst, wird VS Code automatisch die Dev-Container-Erweiterung installieren, den Quellcode in ein Container-Volume klonen und einen Dev-Container für die Verwendung aufsetzen. +Wenn Sie VS Code und Docker bereits installiert haben, können Sie auf das Abzeichen oben klicken, um loszulegen. Wenn Sie darauf klicken, wird VS Code automatisch die Dev-Container-Erweiterung installieren, den Quellcode in ein Container-Volume klonen und einen Dev-Container für die Verwendung aufsetzen. -Weitere Informationen findest du in [DEVCONTAINER-DE.md](DEVCONTAINER-DE.md). +Weitere Informationen finden Sie in [DEVCONTAINER-DE.md](DEVCONTAINER-DE.md). ## Abhängigkeiten Desktop-Versionen verwenden [Sciter](https://sciter.com/) oder Flutter für die GUI, dieses Tutorial ist nur für Sciter. -Bitte lade die dynamische Bibliothek Sciter selbst herunter. +Bitte laden Sie die dynamische Bibliothek Sciter selbst herunter. [Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) | [Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) | @@ -61,14 +61,14 @@ Bitte lade die dynamische Bibliothek Sciter selbst herunter. ## Grobe Schritte zum Kompilieren -- Bereite deine Rust-Entwicklungsumgebung und C++-Build-Umgebung vor +- Bereiten Sie Ihre Rust-Entwicklungsumgebung und C++-Build-Umgebung vor -- Installiere [vcpkg](https://github.com/microsoft/vcpkg) und füge die Systemumgebungsvariable `VCPKG_ROOT` hinzu +- Installieren Sie [vcpkg](https://github.com/microsoft/vcpkg) und fügen Sie die Systemumgebungsvariable `VCPKG_ROOT` hinzu - Windows: `vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static` - Linux/macOS: `vcpkg install libvpx libyuv opus` -- Nutze `cargo run` +- Nutzen Sie `cargo run` ## [Erstellen](https://rustdesk.com/docs/de/dev/build/) @@ -167,7 +167,7 @@ method return time=1662544486.931020 sender=:1.54 -> destination=:1.139 serial=2 ## Auf Docker kompilieren -Beginne damit, das Repository zu klonen und den Docker-Container zu bauen: +Beginnen Sie damit, das Repository zu klonen und den Docker-Container zu bauen: ```sh git clone https://github.com/rustdesk/rustdesk @@ -175,25 +175,25 @@ cd rustdesk docker build -t "rustdesk-builder" . ``` -Führe jedes Mal, wenn du das Programm kompilieren musst, folgenden Befehl aus: +Führen Sie jedes Mal, wenn Sie das Programm kompilieren müssen, folgenden Befehl aus: ```sh docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder ``` -Bedenke, dass das erste Kompilieren länger dauern kann, bis die Abhängigkeiten zwischengespeichert sind. Nachfolgende Kompiliervorgänge sind schneller. Wenn du verschiedene Argumente für den Kompilierbefehl angeben musst, kannst du dies am Ende des Befehls an der Position `` tun. Wenn du zum Beispiel eine optimierte Releaseversion kompilieren willst, kannst du `--release` am Ende des Befehls anhängen. Das daraus entstehende Programm findest du im Zielordner auf deinem System. Du kannst es mit folgendem Befehl ausführen: +Bedenken Sie, dass das erste Kompilieren länger dauern kann, bis die Abhängigkeiten zwischengespeichert sind. Nachfolgende Kompiliervorgänge sind schneller. Wenn Sie verschiedene Argumente für den Kompilierbefehl angeben müssen, können Sie dies am Ende des Befehls an der Position `` tun. Wenn Sie zum Beispiel eine optimierte Releaseversion kompilieren wollen, können Sie `--release` am Ende des Befehls anhängen. Das daraus entstehende Programm finden Sie im Zielordner auf Ihrem System. Sie können es mit folgendem Befehl ausführen: ```sh target/debug/rustdesk ``` -Oder, wenn du eine Releaseversion benutzt: +Oder, wenn Sie eine Releaseversion benutzen: ```sh target/release/rustdesk ``` -Bitte stelle sicher, dass du diese Befehle im Stammverzeichnis des RustDesk-Repositorys nutzt. Ansonsten kann es passieren, dass das Programm die Ressourcen nicht finden kann. Bitte bedenke auch, dass andere Cargo-Unterbefehle wie `install` oder `run` aktuell noch nicht unterstützt werden, da sie das Programm innerhalb des Containers starten oder installieren würden, anstatt auf deinem eigentlichen System. +Bitte stellen Sie sicher, dass Sie diese Befehle im Stammverzeichnis des RustDesk-Repositorys nutzen. Ansonsten kann es passieren, dass das Programm die Ressourcen nicht finden kann. Bitte bedenken Sie auch, dass andere Cargo-Unterbefehle wie `install` oder `run` aktuell noch nicht unterstützt werden, da sie das Programm innerhalb des Containers starten oder installieren würden, anstatt auf Ihrem eigentlichen System. ## Dateistruktur From 8f3f0d4cc4541b8ff3dfc2664f5658a7cc13726f Mon Sep 17 00:00:00 2001 From: tsarmis <126983335+tsarmis@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:58:03 +0200 Subject: [PATCH 05/26] Update and rename gr.rs to el.rs --- src/lang/{gr.rs => el.rs} | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) rename src/lang/{gr.rs => el.rs} (97%) diff --git a/src/lang/gr.rs b/src/lang/el.rs similarity index 97% rename from src/lang/gr.rs rename to src/lang/el.rs index 819c257c3..40cf36b91 100644 --- a/src/lang/gr.rs +++ b/src/lang/el.rs @@ -24,7 +24,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Refresh random password", "Νέος τυχαίος κωδικός πρόσβασης"), ("Set your own password", "Ορίστε τον δικό σας κωδικό πρόσβασης"), ("Enable Keyboard/Mouse", "Ενεργοποίηση πληκτρολογίου/ποντικιού"), - ("Enable Clipboard", "Ενεργοποίηση Προχείρου"), + ("Enable Clipboard", "Ενεργοποίηση προχείρου"), ("Enable File Transfer", "Ενεργοποίηση μεταφοράς αρχείων"), ("Enable TCP Tunneling", "Ενεργοποίηση TCP Tunneling"), ("IP Whitelisting", "Λίστα επιτρεπόμενων IP"), @@ -44,7 +44,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("id_change_tip", "Επιτρέπονται μόνο οι χαρακτήρες a-z, A-Z, 0-9 και _ (υπογράμμιση). Το πρώτο γράμμα πρέπει να είναι a-z, A-Z και το μήκος πρέπει να είναι μεταξύ 6 και 16 χαρακτήρων."), ("Website", "Ιστότοπος"), ("About", "Πληροφορίες"), - ("Slogan_tip", "Προγραμματισμένος με πάθος - σε έναν κόσμο που βυθίζεται στο χάος!"), + ("Slogan_tip", "Φτιαγμένο με πάθος - σε έναν κόσμο που βυθίζεται στο χάος!"), ("Privacy Statement", "Πολιτική απορρήτου"), ("Mute", "Σίγαση"), ("Build Date", "Ημερομηνία δημιουργίας"), @@ -120,12 +120,12 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Original", "Πρωτότυπο"), ("Shrink", "Συρρίκνωση"), ("Stretch", "Προσαρμογή"), - ("Scrollbar", "Γραμμή κύλισης"), + ("Scrollbar", "Μπάρα κύλισης"), ("ScrollAuto", "Αυτόματη κύλιση"), ("Good image quality", "Καλή ποιότητα εικόνας"), - ("Balanced", "Ισορροπημένο"), - ("Optimize reaction time", "Βελτιστοποίηση χρόνου αντίδρασης"), - ("Custom", "Προσαρμογή ποιότητας εικόνας"), + ("Balanced", "Ισορροπημένη"), + ("Optimize reaction time", "Βελτιστοποίηση απόκρισης"), + ("Custom", "Προσαρμοσμένη ποιότητας εικόνας"), ("Show remote cursor", "Εμφάνιση απομακρυσμένου κέρσορα"), ("Show quality monitor", "Εμφάνιση παρακολούθησης ποιότητας σύνδεσης"), ("Disable clipboard", "Απενεργοποίηση προχείρου"), @@ -146,9 +146,9 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Set Password", "Ορίστε κωδικό πρόσβασης"), ("OS Password", "Κωδικός πρόσβασης λειτουργικού συστήματος"), ("install_tip", "Λόγω UAC, το RustDesk ενδέχεται να μην λειτουργεί σωστά σε ορισμένες περιπτώσεις. Για να αποφύγετε το UAC, κάντε κλικ στο κουμπί παρακάτω για να εγκαταστήσετε το RustDesk στο σύστημα"), - ("Click to upgrade", "Κάντε κλικ για αναβάθμιση"), - ("Click to download", "Κάντε κλικ για λήψη"), - ("Click to update", "Κάντε κλικ για ενημέρωση"), + ("Click to upgrade", "Πιέστε για αναβάθμιση"), + ("Click to download", "Πιέστε για λήψη"), + ("Click to update", "Πιέστε για ενημέρωση"), ("Configure", "Διαμόρφωση"), ("config_acc", "Για τον απομακρυσμένο έλεγχο του υπολογιστή σας, πρέπει να εκχωρήσετε δικαιώματα πρόσβασης στο RustDesk."), ("config_screen", "Για να αποκτήσετε απομακρυσμένη πρόσβαση στον υπολογιστή σας, πρέπει να εκχωρήσετε το δικαίωμα RustDesk \"Screen Capture\"."), @@ -242,7 +242,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Invalid folder name", "Μη έγκυρο όνομα φακέλου"), ("Socks5 Proxy", "Διαμεσολαβητής Socks5"), ("Hostname", "Όνομα υπολογιστή"), - ("Discovered", "Ανακαλύφθηκε"), + ("Discovered", "Ανακαλύφθηκαν"), ("install_daemon_tip", "Για να ξεκινά με την εκκίνηση του υπολογιστή, πρέπει να εγκαταστήσετε την υπηρεσία συστήματος"), ("Remote ID", "Απομακρυσμένο ID"), ("Paste", "Επικόλληση"), @@ -344,7 +344,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Secure Connection", "Ασφαλής σύνδεση"), ("Insecure Connection", "Μη ασφαλής σύνδεση"), ("Scale original", "Κλιμάκωση πρωτότυπου"), - ("Scale adaptive", "Προσαρμοστική κλίμακα"), + ("Scale adaptive", "Προσαρμοσμένη κλίμακα"), ("General", "Γενικά"), ("Security", "Ασφάλεια"), ("Theme", "Θέμα"), @@ -460,6 +460,6 @@ 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", "Μέγεθος κωδικού μιας χρήσης"), + ].iter().cloned().collect(); } From cd70da2e57dbe7eb46919f6ee9365640c7b0d632 Mon Sep 17 00:00:00 2001 From: tsarmis <126983335+tsarmis@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:13:38 +0200 Subject: [PATCH 06/26] Update lang.rs the correct locale for the Greek language is el. (el, el_GR, el_CY all are the same Greek language) --- src/lang.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang.rs b/src/lang.rs index 23ffa08d4..972510325 100644 --- a/src/lang.rs +++ b/src/lang.rs @@ -10,7 +10,7 @@ mod eo; mod es; mod fa; mod fr; -mod gr; +mod el; mod hu; mod id; mod it; @@ -59,7 +59,7 @@ pub const LANGS: &[(&str, &str)] = &[ ("ua", "Українська"), ("fa", "فارسی"), ("ca", "Català"), - ("gr", "Ελληνικά"), + ("el", "Ελληνικά"), ("sv", "Svenska"), ("sq", "Shqip"), ("sr", "Srpski"), @@ -122,7 +122,7 @@ pub fn translate_locale(name: String, locale: &str) -> String { "ua" => ua::T.deref(), "fa" => fa::T.deref(), "ca" => ca::T.deref(), - "gr" => gr::T.deref(), + "el" => el::T.deref(), "sv" => sv::T.deref(), "sq" => sq::T.deref(), "sr" => sr::T.deref(), From 39dba0c7afcf3c5f32737d28714771cd1239041a Mon Sep 17 00:00:00 2001 From: grummbeer Date: Tue, 7 Mar 2023 21:20:30 +0100 Subject: [PATCH 07/26] Android. Remove exclamation mark from notification. --- .../src/main/kotlin/com/carriez/flutter_hbb/MainService.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt index fa7440c8d..1c3fbce6c 100644 --- a/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt +++ b/flutter/android/app/src/main/kotlin/com/carriez/flutter_hbb/MainService.kt @@ -623,7 +623,7 @@ class MainService : Service() { .setAutoCancel(true) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentTitle(DEFAULT_NOTIFY_TITLE) - .setContentText(translate(DEFAULT_NOTIFY_TEXT) + '!') + .setContentText(translate(DEFAULT_NOTIFY_TEXT)) .setOnlyAlertOnce(true) .setContentIntent(pendingIntent) .setColor(ContextCompat.getColor(this, R.color.primary)) @@ -689,7 +689,7 @@ class MainService : Service() { private fun setTextNotification(_title: String?, _text: String?) { val title = _title ?: DEFAULT_NOTIFY_TITLE - val text = _text ?: translate(DEFAULT_NOTIFY_TEXT) + '!' + val text = _text ?: translate(DEFAULT_NOTIFY_TEXT) val notification = notificationBuilder .clearActions() .setStyle(null) From d1e0ae7815870c34f04cff5b8e896d38d91e9437 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 8 Mar 2023 11:28:00 +0800 Subject: [PATCH 08/26] never show empty display server, use x11 instead, #3541 --- libs/hbb_common/src/platform/linux.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libs/hbb_common/src/platform/linux.rs b/libs/hbb_common/src/platform/linux.rs index 191ea2e6f..f6133415a 100644 --- a/libs/hbb_common/src/platform/linux.rs +++ b/libs/hbb_common/src/platform/linux.rs @@ -81,8 +81,10 @@ fn get_display_server_of_session(session: &str) -> String { display_server = sestype; } } - // If the session is not a tty, then just return the type as usual - display_server + if display_server == "" { + display_server = "x11".to_owned(); + } + display_server.to_lowercase() } pub fn get_values_of_seat0(indices: Vec) -> Vec { From 2689688da5a8bc49ef0af31cfb45c060a71c510a Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 8 Mar 2023 11:44:41 +0800 Subject: [PATCH 09/26] chore: remove extra empty --- src/lang/ca.rs | 2 +- src/lang/cn.rs | 2 +- src/lang/cs.rs | 2 +- src/lang/da.rs | 2 +- src/lang/de.rs | 2 +- src/lang/el.rs | 2 +- src/lang/eo.rs | 2 +- src/lang/es.rs | 2 +- src/lang/fa.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/ru.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/ui_interface.rs | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/lang/ca.rs b/src/lang/ca.rs index c4bc10bb4..1e3b4930d 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Avís"), ("Login screen using Wayland is not supported", "La pantalla d'inici de sessió amb Wayland no és compatible"), ("Reboot required", "Cal reiniciar"), - ("Unsupported display server ", "Servidor de visualització no compatible"), + ("Unsupported display server", "Servidor de visualització no compatible"), ("x11 expected", "x11 necessari"), ("Port", ""), ("Settings", "Ajustaments"), diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 9a8f176a2..94f0cd2d6 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "警告"), ("Login screen using Wayland is not supported", "不支持使用 Wayland 登录界面"), ("Reboot required", "重启后才能生效"), - ("Unsupported display server ", "不支持当前显示服务器"), + ("Unsupported display server", "不支持当前显示服务器"), ("x11 expected", "请切换到 x11"), ("Port", "端口"), ("Settings", "设置"), diff --git a/src/lang/cs.rs b/src/lang/cs.rs index e3ddc5db8..e7fb7684f 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Upozornení"), ("Login screen using Wayland is not supported", "Přihlašovací obrazovka prostřednictvím Wayland není podporována"), ("Reboot required", "Je třeba restartovat"), - ("Unsupported display server ", "Nepodporovaný zobrazovací server"), + ("Unsupported display server", "Nepodporovaný zobrazovací server"), ("x11 expected", "očekávány x11"), ("Port", ""), ("Settings", "Nastavení"), diff --git a/src/lang/da.rs b/src/lang/da.rs index f37f30a61..08758d7d1 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Advarsel"), ("Login screen using Wayland is not supported", "Registreringsskærm med Wayland understøttes ikke"), ("Reboot required", "Genstart krævet"), - ("Unsupported display server ", "Ikke-understøttet displayserver"), + ("Unsupported display server", "Ikke-understøttet displayserver"), ("x11 expected", "X11 Forventet"), ("Port", "Port"), ("Settings", "Indstillinger"), diff --git a/src/lang/de.rs b/src/lang/de.rs index 7a935d299..78d6d6c15 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Warnung"), ("Login screen using Wayland is not supported", "Anmeldebildschirm mit Wayland wird nicht unterstützt."), ("Reboot required", "Neustart erforderlich"), - ("Unsupported display server ", "Nicht unterstützter Anzeigeserver"), + ("Unsupported display server", "Nicht unterstützter Anzeigeserver"), ("x11 expected", "X11 erwartet"), ("Port", "Port"), ("Settings", "Einstellungen"), diff --git a/src/lang/el.rs b/src/lang/el.rs index 40cf36b91..89458bec6 100644 --- a/src/lang/el.rs +++ b/src/lang/el.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Προειδοποίηση"), ("Login screen using Wayland is not supported", "Η οθόνη εισόδου με χρήση του Wayland δεν υποστηρίζεται"), ("Reboot required", "Απαιτείται επανεκκίνηση"), - ("Unsupported display server ", "Μη υποστηριζόμενος διακομιστής εμφάνισης "), + ("Unsupported display server", "Μη υποστηριζόμενος διακομιστής εμφάνισης "), ("x11 expected", "απαιτείται X11"), ("Port", "Θύρα"), ("Settings", "Ρυθμίσεις"), diff --git a/src/lang/eo.rs b/src/lang/eo.rs index ed64addf8..63995a918 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Averto"), ("Login screen using Wayland is not supported", "Konektajn ekranojn uzantajn Wayland ne estas subtenitaj"), ("Reboot required", "Restarto deviga"), - ("Unsupported display server ", "La aktuala bilda servilo ne estas subtenita"), + ("Unsupported display server", "La aktuala bilda servilo ne estas subtenita"), ("x11 expected", "Bonvolu uzi x11"), ("Port", ""), ("Settings", "Agordoj"), diff --git a/src/lang/es.rs b/src/lang/es.rs index 3270ae26c..fb45ddcd0 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Aviso"), ("Login screen using Wayland is not supported", "La pantalla de inicio de sesión con Wayland no es compatible"), ("Reboot required", "Reinicio requerido"), - ("Unsupported display server ", "Servidor de visualización no compatible"), + ("Unsupported display server", "Servidor de visualización no compatible"), ("x11 expected", "x11 necesario"), ("Port", "Puerto"), ("Settings", "Ajustes"), diff --git a/src/lang/fa.rs b/src/lang/fa.rs index e2a7e9516..9c24ca6c3 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "هشدار"), ("Login screen using Wayland is not supported", "پشتیبانی نمی شود Wayland ورود به سیستم با استفاده از "), ("Reboot required", "راه اندازی مجدد مورد نیاز است"), - ("Unsupported display server ", "سرور تصویر پشتیبانی نشده است"), + ("Unsupported display server", "سرور تصویر پشتیبانی نشده است"), ("x11 expected", ""), ("Port", "پورت"), ("Settings", "تنظیمات"), diff --git a/src/lang/fr.rs b/src/lang/fr.rs index c0d739f91..7cb6d1239 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Avertissement"), ("Login screen using Wayland is not supported", "L'écran de connexion utilisant Wayland n'est pas pris en charge"), ("Reboot required", "Redémarrage requis"), - ("Unsupported display server ", "Le serveur d'affichage actuel n'est pas pris en charge"), + ("Unsupported display server", "Le serveur d'affichage actuel n'est pas pris en charge"), ("x11 expected", "x11 requis"), ("Port", "Port"), ("Settings", "Paramètres"), diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 46750eb13..f9ff3bd0f 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Figyelmeztetés"), ("Login screen using Wayland is not supported", "Bejelentkezéskori Wayland használata nem támogatott"), ("Reboot required", "Újraindítás szükséges"), - ("Unsupported display server ", "Nem támogatott megjelenítő szerver"), + ("Unsupported display server", "Nem támogatott megjelenítő szerver"), ("x11 expected", "x11-re számítottt"), ("Port", "Port"), ("Settings", "Beállítások"), diff --git a/src/lang/id.rs b/src/lang/id.rs index 4133f136f..e210432c0 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Peringatan"), ("Login screen using Wayland is not supported", "Layar masuk menggunakan Wayland tidak didukung"), ("Reboot required", "Diperlukan boot ulang"), - ("Unsupported display server ", "Server tampilan tidak didukung "), + ("Unsupported display server", "Server tampilan tidak didukung "), ("x11 expected", "x11 diharapkan"), ("Port", "Port"), ("Settings", "Pengaturan"), diff --git a/src/lang/it.rs b/src/lang/it.rs index 17f066eef..7dfc67f29 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Avviso"), ("Login screen using Wayland is not supported", "La schermata di accesso non è supportata utilizzando Wayland"), ("Reboot required", "Riavvio necessario"), - ("Unsupported display server ", "Display server non supportato"), + ("Unsupported display server", "Display server non supportato"), ("x11 expected", "x11 necessario"), ("Port", "Porta"), ("Settings", "Impostazioni"), diff --git a/src/lang/ja.rs b/src/lang/ja.rs index b8031573a..48391d8f2 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "注意"), ("Login screen using Wayland is not supported", "Waylandを使用したログインスクリーンはサポートされていません"), ("Reboot required", "再起動が必要"), - ("Unsupported display server ", "サポートされていないディスプレイサーバー"), + ("Unsupported display server", "サポートされていないディスプレイサーバー"), ("x11 expected", "X11 が必要です"), ("Port", ""), ("Settings", "設定"), diff --git a/src/lang/ko.rs b/src/lang/ko.rs index fe6a0bfe9..91b73fc45 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "경고"), ("Login screen using Wayland is not supported", "Wayland를 사용한 로그인 화면이 지원되지 않습니다"), ("Reboot required", "재부팅이 필요합니다"), - ("Unsupported display server ", "지원하지 않는 디스플레이 서버"), + ("Unsupported display server", "지원하지 않는 디스플레이 서버"), ("x11 expected", "x11 예상됨"), ("Port", ""), ("Settings", "설정"), diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 4b1e92cad..9d7cf3971 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Ескерту"), ("Login screen using Wayland is not supported", "Wayland қолданған Кіру екіреніне қолдау көрсетілмейді"), ("Reboot required", "Қайта-қосу қажет"), - ("Unsupported display server ", "Қолдаусыз дисплей сербері"), + ("Unsupported display server", "Қолдаусыз дисплей сербері"), ("x11 expected", "x11 күтілген"), ("Port", "Порт"), ("Settings", "Орнатпалар"), diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 7888eed8e..5b959a353 100644 --- a/src/lang/nl.rs +++ b/src/lang/nl.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Waarschuwing"), ("Login screen using Wayland is not supported", "Aanmeldingsscherm via Wayland wordt niet ondersteund"), ("Reboot required", "Opnieuw opstarten vereist"), - ("Unsupported display server ", "Niet-ondersteunde weergaveserver"), + ("Unsupported display server", "Niet-ondersteunde weergaveserver"), ("x11 expected", "x11 verwacht"), ("Port", "Poort"), ("Settings", "Instellingen"), diff --git a/src/lang/pl.rs b/src/lang/pl.rs index b997267f1..4d99f3be2 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Ostrzeżenie"), ("Login screen using Wayland is not supported", "Ekran logowania korzystający z Wayland nie jest obsługiwany"), ("Reboot required", "Wymagany ponowne uruchomienie"), - ("Unsupported display server ", "Nieobsługiwany serwer wyświetlania"), + ("Unsupported display server", "Nieobsługiwany serwer wyświetlania"), ("x11 expected", "Wymagany jest X11"), ("Port", "Port"), ("Settings", "Ustawienia"), diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 98b8035a4..e568daeb5 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Aviso"), ("Login screen using Wayland is not supported", "Tela de Login com Wayland não é suportada"), ("Reboot required", "Reinicialização necessária"), - ("Unsupported display server ", "Servidor de display não suportado"), + ("Unsupported display server", "Servidor de display não suportado"), ("x11 expected", "x11 em falha"), ("Port", ""), ("Settings", "Configurações"), diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 18c9168c1..54389652c 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Aviso"), ("Login screen using Wayland is not supported", "Tela de Login utilizando Wayland não é suportada"), ("Reboot required", "Reinicialização necessária"), - ("Unsupported display server ", "Servidor de display não suportado"), + ("Unsupported display server", "Servidor de display não suportado"), ("x11 expected", "x11 esperado"), ("Port", "Porta"), ("Settings", "Configurações"), diff --git a/src/lang/ro.rs b/src/lang/ro.rs index 225fa7277..14675762c 100644 --- a/src/lang/ro.rs +++ b/src/lang/ro.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Avertisment"), ("Login screen using Wayland is not supported", "Ecranele de conectare care folosesc Wayland nu sunt acceptate"), ("Reboot required", "Repornire necesară"), - ("Unsupported display server ", "Tipul de server de afișaj nu este acceptat"), + ("Unsupported display server", "Tipul de server de afișaj nu este acceptat"), ("x11 expected", "E necesar X11"), ("Port", "Port"), ("Settings", "Setări"), diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 59957a2cd..adc5872a3 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Предупреждение"), ("Login screen using Wayland is not supported", "Вход в систему с использованием Wayland не поддерживается"), ("Reboot required", "Требуется перезагрузка"), - ("Unsupported display server ", "Неподдерживаемый сервер отображения"), + ("Unsupported display server", "Неподдерживаемый сервер отображения"), ("x11 expected", "Ожидается X11"), ("Port", "Порт"), ("Settings", "Настройки"), diff --git a/src/lang/sk.rs b/src/lang/sk.rs index cec9e5b3d..1031fb9d2 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Upozornenie"), ("Login screen using Wayland is not supported", "Prihlasovacia obrazovka prostredníctvom Wayland nie je podporovaná"), ("Reboot required", "Vyžaduje sa reštart"), - ("Unsupported display server ", "Nepodporovaný zobrazovací (display) server"), + ("Unsupported display server", "Nepodporovaný zobrazovací (display) server"), ("x11 expected", "očakáva sa x11"), ("Port", ""), ("Settings", "Nastavenia"), diff --git a/src/lang/sl.rs b/src/lang/sl.rs index 295cd28a1..b1b5dbeb0 100755 --- a/src/lang/sl.rs +++ b/src/lang/sl.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Opozorilo"), ("Login screen using Wayland is not supported", "Prijava z Waylandom ni podprta"), ("Reboot required", "Potreben je ponovni zagon"), - ("Unsupported display server ", "Nepodprt zaslonski strežnik"), + ("Unsupported display server", "Nepodprt zaslonski strežnik"), ("x11 expected", "Pričakovan X11"), ("Port", "Vrata"), ("Settings", "Nastavitve"), diff --git a/src/lang/sq.rs b/src/lang/sq.rs index ebbdf4a28..a73a5f10c 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Dicka po shkon keq"), ("Login screen using Wayland is not supported", "Hyrja në ekran duke përdorur Wayland muk suportohet"), ("Reboot required", "Kërkohet rinisja"), - ("Unsupported display server ", "Nuk supurtohet severi ekranit"), + ("Unsupported display server", "Nuk supurtohet severi ekranit"), ("x11 expected", "Pritet x11"), ("Port", "Port"), ("Settings", "Cilësimet"), diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 67fb49799..c4e70bd85 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Upozorenje"), ("Login screen using Wayland is not supported", "Ekran za prijavu koji koristi Wayland nije podržan"), ("Reboot required", "Potreban je restart"), - ("Unsupported display server ", "Nepodržan server za prikaz"), + ("Unsupported display server", "Nepodržan server za prikaz"), ("x11 expected", "x11 očekivan"), ("Port", "Port"), ("Settings", "Postavke"), diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 9da1f1071..88db1e931 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Varning"), ("Login screen using Wayland is not supported", "Login med Wayland stöds inte"), ("Reboot required", "Omstart krävs"), - ("Unsupported display server ", "Displayserver stöds inte "), + ("Unsupported display server", "Displayserver stöds inte "), ("x11 expected", "x11 förväntades"), ("Port", "Port"), ("Settings", "Inställningar"), diff --git a/src/lang/template.rs b/src/lang/template.rs index cbbd65b4c..2255d8aa5 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", ""), ("Login screen using Wayland is not supported", ""), ("Reboot required", ""), - ("Unsupported display server ", ""), + ("Unsupported display server", ""), ("x11 expected", ""), ("Port", ""), ("Settings", ""), diff --git a/src/lang/th.rs b/src/lang/th.rs index 97a8725e3..e0bfe8846 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "คำเตือน"), ("Login screen using Wayland is not supported", "หน้าจอการเข้าสู่ระบบโดยใช้ Wayland ยังไม่ถูกรองรับ"), ("Reboot required", "จำเป็นต้องเริ่มต้นระบบใหม่"), - ("Unsupported display server ", "เซิร์ฟเวอร์การแสดงผลที่ไม่รองรับ"), + ("Unsupported display server", "เซิร์ฟเวอร์การแสดงผลที่ไม่รองรับ"), ("x11 expected", "ต้องใช้งาน x11"), ("Port", "พอร์ท"), ("Settings", "ตั้งค่า"), diff --git a/src/lang/tr.rs b/src/lang/tr.rs index 3b1137cb7..e0d1d5777 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Uyarı"), ("Login screen using Wayland is not supported", "Wayland kullanan giriş ekranı desteklenmiyor"), ("Reboot required", "Yeniden başlatma gerekli"), - ("Unsupported display server ", "Desteklenmeyen görüntü sunucusu"), + ("Unsupported display server", "Desteklenmeyen görüntü sunucusu"), ("x11 expected", "x11 bekleniyor"), ("Port", "Port"), ("Settings", "Ayarlar"), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 3cf05689a..6bf0b0fa8 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "警告"), ("Login screen using Wayland is not supported", "不支援使用 Wayland 的登入畫面"), ("Reboot required", "需要重新啟動"), - ("Unsupported display server ", "不支援顯示伺服器"), + ("Unsupported display server", "不支援顯示伺服器"), ("x11 expected", "預期 x11"), ("Port", "端口"), ("Settings", "設定"), diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 4665d7c39..d5142452e 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Попередження"), ("Login screen using Wayland is not supported", "Вхід у систему з використанням Wayland не підтримується"), ("Reboot required", "Потрібне перезавантаження"), - ("Unsupported display server ", "Графічний сервер не підтримується"), + ("Unsupported display server", "Графічний сервер не підтримується"), ("x11 expected", "Очікується X11"), ("Port", "Порт"), ("Settings", "Налаштування"), diff --git a/src/lang/vn.rs b/src/lang/vn.rs index 0130b11cf..c71d12d16 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -204,7 +204,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Warning", "Cảnh báo"), ("Login screen using Wayland is not supported", "Màn hình đăng nhập sử dụng Wayland không đựoc hỗ trợ"), ("Reboot required", "Yêu cầu khởi động lại"), - ("Unsupported display server ", "Máy chủ hiển thị không đuợc hỗ trọ"), + ("Unsupported display server", "Máy chủ hiển thị không đuợc hỗ trọ"), ("x11 expected", "Cần x11"), ("Port", ""), ("Settings", "Cài đặt"), diff --git a/src/ui_interface.rs b/src/ui_interface.rs index 1d4bd5cf4..ec570b42c 100644 --- a/src/ui_interface.rs +++ b/src/ui_interface.rs @@ -511,7 +511,7 @@ pub fn get_error() -> String { if dtype != "x11" { return format!( "{} {}, {}", - crate::client::translate("Unsupported display server ".to_owned()), + crate::client::translate("Unsupported display server".to_owned()), dtype, crate::client::translate("x11 expected".to_owned()), ); From e00eaee4b56b7c00bfb00b316089b360099b587d Mon Sep 17 00:00:00 2001 From: fufesou Date: Tue, 7 Mar 2023 19:10:37 +0800 Subject: [PATCH 10/26] 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 11/26] 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 12/26] 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 13/26] 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 14/26] 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 15/26] 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 16/26] 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 17/26] 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 18/26] 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 19/26] 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 20/26] 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(); } From ceda7320b4577e58615a45334a0d57b55830da6b Mon Sep 17 00:00:00 2001 From: ilGigioVr88 Date: Wed, 8 Mar 2023 09:18:15 +0100 Subject: [PATCH 21/26] Update it.rs --- src/lang/it.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index 7dfc67f29..00974b43e 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -460,6 +460,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Codec", "Codec"), ("Resolution", "Risoluzione"), ("No transfers in progress", "Nessun trasferimento in corso"), - ("Set one-time password length", ""), + ("Set one-time password length", "Imposta la lunghezza della password monouso"), ].iter().cloned().collect(); } From 3da68377ae9b0194bfa5a0377a01e4213f2b64c6 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Wed, 8 Mar 2023 17:03:13 +0800 Subject: [PATCH 22/26] fix it --- src/lang/it.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lang/it.rs b/src/lang/it.rs index cd7e20a9c..0cab57203 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -461,7 +461,6 @@ 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", "Imposta la lunghezza della password monouso"), - ("Set one-time password length", ""), ("idd_driver_tip", ""), ("confirm_idd_driver_tip", "") ].iter().cloned().collect(); From 513feca03f19916152249136de56f604ed963ad5 Mon Sep 17 00:00:00 2001 From: grummbeer Date: Tue, 7 Mar 2023 22:03:52 +0100 Subject: [PATCH 23/26] Translations. Add "RDP Settings" --- flutter/lib/common/widgets/peer_card.dart | 2 +- 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/el.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, 67 insertions(+), 34 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 7d2d0cd2d..51ab3066d 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -1115,7 +1115,7 @@ void _rdpDialog(String id) async { } return CustomAlertDialog( - title: Text('RDP ${translate('Settings')}'), + title: Text(translate('RDP Settings')), content: ConstrainedBox( constraints: const BoxConstraints(minWidth: 500), child: Column( diff --git a/src/lang/ca.rs b/src/lang/ca.rs index 3cea5e60e..9507ffc25 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 161fa0358..e5ba70aa6 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", ""), ("idd_driver_tip", "安装虚拟显示器驱动,以便在没有连接显示器的情况下启动虚拟显示器进行控制。"), - ("confirm_idd_driver_tip", "安装虚拟显示器驱动的选项已勾选。请注意,测试证书将被安装以信任虚拟显示器驱动。测试证书仅会用于信任Rustdesk的驱动。") + ("confirm_idd_driver_tip", "安装虚拟显示器驱动的选项已勾选。请注意,测试证书将被安装以信任虚拟显示器驱动。测试证书仅会用于信任Rustdesk的驱动。"), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 86e9c47c7..5920e002c 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/da.rs b/src/lang/da.rs index d262c08cf..6e7394d79 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/de.rs b/src/lang/de.rs index 21e57701c..26925a9fb 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"), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", "RDP Einstellungen"), ].iter().cloned().collect(); } diff --git a/src/lang/el.rs b/src/lang/el.rs index b0e629ba7..4c3698194 100644 --- a/src/lang/el.rs +++ b/src/lang/el.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", "Μέγεθος κωδικού μιας χρήσης"), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index f36afedcb..457fbea02 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/es.rs b/src/lang/es.rs index 2b38ecd1e..7443f8640 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"), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 0cc8188b2..f1503a83e 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", "طول رمز یکبار مصرف را تعیین کنید"), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/fr.rs b/src/lang/fr.rs index ef74b0666..63d1ce317 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/hu.rs b/src/lang/hu.rs index f984afcdd..4789ba55d 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/id.rs b/src/lang/id.rs index 53f718e82..e2a969a88 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/it.rs b/src/lang/it.rs index 0cab57203..1c531c59f 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", "Imposta la lunghezza della password monouso"), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 4a0fc3abb..a2d3446bb 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ko.rs b/src/lang/ko.rs index a3aef55cc..9c2076d63 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 8b7582af3..b8a415e48 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/nl.rs b/src/lang/nl.rs index 6fb537119..595e0710e 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pl.rs b/src/lang/pl.rs index d60fe2d30..08f6ca905 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index 2747a0ca7..1eb5fc6e7 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index e8fca4b80..df0f5a26e 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ro.rs b/src/lang/ro.rs index e4521305f..7515ccbf1 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 473ec402f..afeb8d17d 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", "Установить длину одноразового пароля"), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sk.rs b/src/lang/sk.rs index aeed03fcd..1d8c6c626 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sl.rs b/src/lang/sl.rs index eaa8b1b50..07bb2b543 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 46f14c738..a7cdfa8e7 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sr.rs b/src/lang/sr.rs index ee48beb32..bcdedef59 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/sv.rs b/src/lang/sv.rs index b099acc9d..63167ed82 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/template.rs b/src/lang/template.rs index bfab1a33a..3fb6d17a9 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/th.rs b/src/lang/th.rs index d77eb5fc1..808f69f8d 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tr.rs b/src/lang/tr.rs index d4d0b942d..34949aa4c 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/tw.rs b/src/lang/tw.rs index e1119b12c..17ef4b7ed 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 216f764c1..cc44d86d0 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } diff --git a/src/lang/vn.rs b/src/lang/vn.rs index c7fbc5b9b..b774e094f 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", ""), ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", "") + ("confirm_idd_driver_tip", ""), + ("RDP Settings", ""), ].iter().cloned().collect(); } From c28238542ae97a61b3250d207b9748539758ec53 Mon Sep 17 00:00:00 2001 From: grummbeer Date: Wed, 8 Mar 2023 02:13:55 +0100 Subject: [PATCH 24/26] Fix. Mobile. Remove left label in RDP dialog --- flutter/lib/common/widgets/peer_card.dart | 63 +++++++++++++---------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 51ab3066d..73660cc3a 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -1126,56 +1126,67 @@ void _rdpDialog(String id) async { ), Row( children: [ - ConstrainedBox( - constraints: const BoxConstraints(minWidth: 140), - child: Text( - "${translate('Port')}:", - textAlign: TextAlign.right, - ).marginOnly(right: 10)), + isDesktop + ? ConstrainedBox( + constraints: const BoxConstraints(minWidth: 140), + child: Text( + "${translate('Port')}:", + textAlign: TextAlign.right, + ).marginOnly(right: 10)) + : SizedBox.shrink(), Expanded( child: TextField( inputFormatters: [ FilteringTextInputFormatter.allow(RegExp( r'^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$')) ], - decoration: const InputDecoration( - border: OutlineInputBorder(), hintText: '3389'), + decoration: InputDecoration( + labelText: isDesktop ? null : translate('Port'), + border: isDesktop ? const OutlineInputBorder() : null, + hintText: '3389'), controller: portController, autofocus: true, ), ), ], - ).marginOnly(bottom: 8), + ).marginOnly(bottom: isDesktop ? 8 : 0), Row( children: [ - ConstrainedBox( - constraints: const BoxConstraints(minWidth: 140), - child: Text( - "${translate('Username')}:", - textAlign: TextAlign.right, - ).marginOnly(right: 10)), + isDesktop + ? ConstrainedBox( + constraints: const BoxConstraints(minWidth: 140), + child: Text( + "${translate('Username')}:", + textAlign: TextAlign.right, + ).marginOnly(right: 10)) + : SizedBox.shrink(), Expanded( child: TextField( - decoration: - const InputDecoration(border: OutlineInputBorder()), + decoration: InputDecoration( + labelText: isDesktop ? null : translate('Username'), + border: isDesktop ? const OutlineInputBorder() : null), controller: userController, ), ), ], - ).marginOnly(bottom: 8), + ).marginOnly(bottom: isDesktop ? 8 : 0), Row( children: [ - ConstrainedBox( - constraints: const BoxConstraints(minWidth: 140), - child: Text( - "${translate('Password')}:", - textAlign: TextAlign.right, - ).marginOnly(right: 10)), + isDesktop + ? ConstrainedBox( + constraints: const BoxConstraints(minWidth: 140), + child: Text( + "${translate('Password')}:", + textAlign: TextAlign.right, + ).marginOnly(right: 10)) + : SizedBox.shrink(), Expanded( child: Obx(() => TextField( obscureText: secure.value, decoration: InputDecoration( - border: const OutlineInputBorder(), + labelText: isDesktop ? null : translate('Password'), + border: + isDesktop ? const OutlineInputBorder() : null, suffixIcon: IconButton( onPressed: () => secure.value = !secure.value, icon: Icon(secure.value @@ -1185,7 +1196,7 @@ void _rdpDialog(String id) async { )), ), ], - ).marginOnly(bottom: 8), + ).marginOnly(bottom: isDesktop ? 8 : 0), ], ), ), From de27f3613450e6dde022ec9798dbcc754749dda5 Mon Sep 17 00:00:00 2001 From: fufesou Date: Wed, 8 Mar 2023 21:00:56 +0800 Subject: [PATCH 25/26] set KEYBOARD_ONLY for rdev Signed-off-by: fufesou --- src/keyboard.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/keyboard.rs b/src/keyboard.rs index 3f7ed6779..bfff9ff86 100644 --- a/src/keyboard.rs +++ b/src/keyboard.rs @@ -215,6 +215,7 @@ static mut IS_0X021D_DOWN: bool = false; static mut IS_LEFT_OPTION_DOWN: bool = false; pub fn start_grab_loop() { + std::env::set_var("KEYBOARD_ONLY", "y"); #[cfg(any(target_os = "windows", target_os = "macos"))] std::thread::spawn(move || { let try_handle_keyboard = move |event: Event, key: Key, is_press: bool| -> Option { From acae095541cc3da02708ba8c5b6cd55bff5ff2b4 Mon Sep 17 00:00:00 2001 From: Mr-Update <37781396+Mr-Update@users.noreply.github.com> Date: Wed, 8 Mar 2023 14:11:11 +0100 Subject: [PATCH 26/26] Update de.rs --- src/lang/de.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/de.rs b/src/lang/de.rs index 26925a9fb..f753265f8 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -152,7 +152,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> = ("Configure", "Konfigurieren"), ("config_acc", "Um Ihren PC aus der Ferne zu steuern, müssen Sie RustDesk Zugriffsrechte erteilen."), ("config_screen", "Um aus der Ferne auf Ihren PC zugreifen zu können, müssen Sie RustDesk die Berechtigung \"Bildschirmaufnahme\" erteilen."), - ("Installing ...", " Wird installiert …"), + ("Installing ...", "Wird installiert …"), ("Install", "Installieren"), ("Installation", "Installation"), ("Installation Path", "Installationspfad"), @@ -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"), - ("idd_driver_tip", ""), - ("confirm_idd_driver_tip", ""), - ("RDP Settings", "RDP Einstellungen"), + ("idd_driver_tip", "Installieren Sie den virtuellen Anzeigetreiber, der verwendet wird, wenn Sie keine physischen Anzeigen haben."), + ("confirm_idd_driver_tip", "Die Option zur Installation des virtuellen Anzeigetreibers ist aktiviert. Beachten Sie, dass ein Testzertifikat installiert wird, um dem virtuellen Anzeigetreiber zu vertrauen. Dieses Testzertifikat wird nur verwendet, um Rustdesk-Treibern zu vertrauen."), + ("RDP Settings", "RDP-Einstellungen"), ].iter().cloned().collect(); }