Merge branch 'rustdesk:master' into master
This commit is contained in:
commit
30b4b6a7da
@ -316,21 +316,11 @@ class _PeerCardState extends State<_PeerCard>
|
||||
bool get wantKeepAlive => true;
|
||||
}
|
||||
|
||||
enum CardType {
|
||||
recent,
|
||||
fav,
|
||||
lan,
|
||||
ab,
|
||||
grp,
|
||||
}
|
||||
|
||||
abstract class BasePeerCard extends StatelessWidget {
|
||||
final Peer peer;
|
||||
final EdgeInsets? menuPadding;
|
||||
final CardType cardType;
|
||||
|
||||
BasePeerCard(
|
||||
{required this.peer, required this.cardType, this.menuPadding, Key? key})
|
||||
BasePeerCard({required this.peer, this.menuPadding, Key? key})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
@ -435,7 +425,7 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
if (Navigator.canPop(context)) {
|
||||
Navigator.pop(context);
|
||||
}
|
||||
_rdpDialog(id, cardType);
|
||||
_rdpDialog(id);
|
||||
},
|
||||
)),
|
||||
))
|
||||
@ -480,6 +470,12 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
@protected
|
||||
Future<bool> _isForceAlwaysRelay(String id) async {
|
||||
return (await bind.mainGetPeerOption(id: id, key: 'force-always-relay'))
|
||||
.isNotEmpty;
|
||||
}
|
||||
|
||||
@protected
|
||||
Future<MenuEntryBase<String>> _forceAlwaysRelayAction(String id) async {
|
||||
const option = 'force-always-relay';
|
||||
@ -487,16 +483,12 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
switchType: SwitchType.scheckbox,
|
||||
text: translate('Always connect via relay'),
|
||||
getter: () async {
|
||||
if (cardType == CardType.ab) {
|
||||
return gFFI.abModel.find(id)?.forceAlwaysRelay ?? false;
|
||||
} else {
|
||||
return (await bind.mainGetPeerOption(id: id, key: option)).isNotEmpty;
|
||||
}
|
||||
return await _isForceAlwaysRelay(id);
|
||||
},
|
||||
setter: (bool v) async {
|
||||
gFFI.abModel.setPeerForceAlwaysRelay(id, v);
|
||||
await bind.mainSetPeerOption(
|
||||
id: id, key: option, value: bool2option('force-always-relay', v));
|
||||
id: id, key: option, value: bool2option(option, v));
|
||||
},
|
||||
padding: menuPadding,
|
||||
dismissOnClicked: true,
|
||||
@ -621,14 +613,13 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
@protected
|
||||
Future<String> _getAlias(String id) async =>
|
||||
await bind.mainGetPeerOption(id: id, key: 'alias');
|
||||
|
||||
void _rename(String id) async {
|
||||
RxBool isInProgress = false.obs;
|
||||
String name;
|
||||
if (cardType == CardType.ab) {
|
||||
name = gFFI.abModel.find(id)?.alias ?? "";
|
||||
} else {
|
||||
name = await bind.mainGetPeerOption(id: id, key: 'alias');
|
||||
}
|
||||
String name = await _getAlias(id);
|
||||
var controller = TextEditingController(text: name);
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
submit() async {
|
||||
@ -636,7 +627,7 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
String name = controller.text.trim();
|
||||
await bind.mainSetPeerAlias(id: id, alias: name);
|
||||
gFFI.abModel.setPeerAlias(id, name);
|
||||
update();
|
||||
_update();
|
||||
close();
|
||||
isInProgress.value = false;
|
||||
}
|
||||
@ -671,34 +662,13 @@ abstract class BasePeerCard extends StatelessWidget {
|
||||
});
|
||||
}
|
||||
|
||||
void update() {
|
||||
switch (cardType) {
|
||||
case CardType.recent:
|
||||
bind.mainLoadRecentPeers();
|
||||
break;
|
||||
case CardType.fav:
|
||||
bind.mainLoadFavPeers();
|
||||
break;
|
||||
case CardType.lan:
|
||||
bind.mainLoadLanPeers();
|
||||
break;
|
||||
case CardType.ab:
|
||||
gFFI.abModel.pullAb();
|
||||
break;
|
||||
case CardType.grp:
|
||||
gFFI.groupModel.pull();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@protected
|
||||
void _update();
|
||||
}
|
||||
|
||||
class RecentPeerCard extends BasePeerCard {
|
||||
RecentPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.recent,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@ -732,15 +702,15 @@ class RecentPeerCard extends BasePeerCard {
|
||||
}
|
||||
return menuItems;
|
||||
}
|
||||
|
||||
@protected
|
||||
@override
|
||||
void _update() => bind.mainLoadRecentPeers();
|
||||
}
|
||||
|
||||
class FavoritePeerCard extends BasePeerCard {
|
||||
FavoritePeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.fav,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@ -776,15 +746,15 @@ class FavoritePeerCard extends BasePeerCard {
|
||||
}
|
||||
return menuItems;
|
||||
}
|
||||
|
||||
@protected
|
||||
@override
|
||||
void _update() => bind.mainLoadFavPeers();
|
||||
}
|
||||
|
||||
class DiscoveredPeerCard extends BasePeerCard {
|
||||
DiscoveredPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.lan,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@ -811,15 +781,15 @@ class DiscoveredPeerCard extends BasePeerCard {
|
||||
}
|
||||
return menuItems;
|
||||
}
|
||||
|
||||
@protected
|
||||
@override
|
||||
void _update() => bind.mainLoadLanPeers();
|
||||
}
|
||||
|
||||
class AddressBookPeerCard extends BasePeerCard {
|
||||
AddressBookPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.ab,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@ -851,6 +821,20 @@ class AddressBookPeerCard extends BasePeerCard {
|
||||
return menuItems;
|
||||
}
|
||||
|
||||
@protected
|
||||
@override
|
||||
Future<bool> _isForceAlwaysRelay(String id) async =>
|
||||
gFFI.abModel.find(id)?.forceAlwaysRelay ?? false;
|
||||
|
||||
@protected
|
||||
@override
|
||||
Future<String> _getAlias(String id) async =>
|
||||
gFFI.abModel.find(id)?.alias ?? '';
|
||||
|
||||
@protected
|
||||
@override
|
||||
void _update() => gFFI.abModel.pullAb();
|
||||
|
||||
@protected
|
||||
@override
|
||||
MenuEntryBase<String> _removeAction(
|
||||
@ -943,11 +927,7 @@ class AddressBookPeerCard extends BasePeerCard {
|
||||
|
||||
class MyGroupPeerCard extends BasePeerCard {
|
||||
MyGroupPeerCard({required Peer peer, EdgeInsets? menuPadding, Key? key})
|
||||
: super(
|
||||
peer: peer,
|
||||
cardType: CardType.grp,
|
||||
menuPadding: menuPadding,
|
||||
key: key);
|
||||
: super(peer: peer, menuPadding: menuPadding, key: key);
|
||||
|
||||
@override
|
||||
Future<List<MenuEntryBase<String>>> _buildMenuItems(
|
||||
@ -974,18 +954,15 @@ class MyGroupPeerCard extends BasePeerCard {
|
||||
}
|
||||
return menuItems;
|
||||
}
|
||||
|
||||
@protected
|
||||
@override
|
||||
void _update() => gFFI.groupModel.pull();
|
||||
}
|
||||
|
||||
void _rdpDialog(String id, CardType card) async {
|
||||
String port, username;
|
||||
if (card == CardType.ab) {
|
||||
port = gFFI.abModel.find(id)?.rdpPort ?? '';
|
||||
username = gFFI.abModel.find(id)?.rdpUsername ?? '';
|
||||
} else {
|
||||
port = await bind.mainGetPeerOption(id: id, key: 'rdp_port');
|
||||
username = await bind.mainGetPeerOption(id: id, key: 'rdp_username');
|
||||
}
|
||||
|
||||
void _rdpDialog(String id) async {
|
||||
final port = await bind.mainGetPeerOption(id: id, key: 'rdp_port');
|
||||
final username = await bind.mainGetPeerOption(id: id, key: 'rdp_username');
|
||||
final portController = TextEditingController(text: port);
|
||||
final userController = TextEditingController(text: username);
|
||||
final passwordController = TextEditingController(
|
||||
|
@ -652,7 +652,8 @@ class _RemoteMenubarState extends State<RemoteMenubar> {
|
||||
dismissOnClicked: true,
|
||||
));
|
||||
}
|
||||
if (pi.platform != kPeerPlatformAndroid &&
|
||||
if (false &&
|
||||
pi.platform != kPeerPlatformAndroid &&
|
||||
version_cmp(peer_version, '1.2.0') >= 0) {
|
||||
displayMenu.add(MenuEntryButton<String>(
|
||||
childBuilder: (TextStyle? style) => Text(
|
||||
|
@ -831,7 +831,7 @@ class _TabState extends State<_Tab> with RestorationMixin {
|
||||
return ConstrainedBox(
|
||||
constraints: BoxConstraints(maxWidth: widget.maxLabelWidth ?? 200),
|
||||
child: Text(
|
||||
translate(widget.label.value),
|
||||
widget.label.value,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: isSelected
|
||||
|
@ -1,20 +1,21 @@
|
||||
#include <flutter/dart_project.h>
|
||||
#include <flutter/flutter_view_controller.h>
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
#include <uni_links_desktop/uni_links_desktop_plugin.h>
|
||||
#include <windows.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
#include "flutter_window.h"
|
||||
#include "utils.h"
|
||||
// #include <bitsdojo_window_windows/bitsdojo_window_plugin.h>
|
||||
|
||||
#include <uni_links_desktop/uni_links_desktop_plugin.h>
|
||||
|
||||
typedef char** (*FUNC_RUSTDESK_CORE_MAIN)(int*);
|
||||
typedef void (*FUNC_RUSTDESK_FREE_ARGS)( char**, int);
|
||||
const char* uniLinksPrefix = "rustdesk://";
|
||||
/// Note: `--server`, `--service` are already handled in [core_main.rs].
|
||||
const std::vector<std::string> parameters_white_list = {"--install", "--cm"};
|
||||
|
||||
// auto bdw = bitsdojo_window_configure(BDW_CUSTOM_FRAME | BDW_HIDE_ON_STARTUP);
|
||||
int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
_In_ wchar_t *command_line, _In_ int show_command)
|
||||
{
|
||||
@ -40,6 +41,10 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
}
|
||||
std::vector<std::string> command_line_arguments =
|
||||
GetCommandLineArguments();
|
||||
// Remove possible trailing whitespace from command line arguments
|
||||
for (auto& argument : command_line_arguments) {
|
||||
argument.erase(argument.find_last_not_of(" \n\r\t"));
|
||||
}
|
||||
|
||||
int args_len = 0;
|
||||
char** c_args = rustdesk_core_main(&args_len);
|
||||
@ -51,21 +56,33 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
std::vector<std::string> rust_args(c_args, c_args + args_len);
|
||||
free_c_args(c_args, args_len);
|
||||
|
||||
// uni links dispatch
|
||||
// Uri links dispatch
|
||||
HWND hwnd = ::FindWindow(_T("FLUTTER_RUNNER_WIN32_WINDOW"), _T("RustDesk"));
|
||||
if (hwnd != NULL) {
|
||||
if (!command_line_arguments.empty()) {
|
||||
// Dispatch command line arguments
|
||||
DispatchToUniLinksDesktop(hwnd);
|
||||
} else {
|
||||
// Not called with arguments, or just open the app shortcut on desktop.
|
||||
// So we just show the main window instead.
|
||||
::ShowWindow(hwnd, SW_NORMAL);
|
||||
::SetForegroundWindow(hwnd);
|
||||
// Allow multiple flutter instances when being executed by parameters
|
||||
// contained in whitelists.
|
||||
bool allow_multiple_instances = false;
|
||||
for (auto& whitelist_param : parameters_white_list) {
|
||||
allow_multiple_instances =
|
||||
allow_multiple_instances ||
|
||||
std::find(command_line_arguments.begin(),
|
||||
command_line_arguments.end(),
|
||||
whitelist_param) != command_line_arguments.end();
|
||||
}
|
||||
if (!allow_multiple_instances) {
|
||||
if (!command_line_arguments.empty()) {
|
||||
// Dispatch command line arguments
|
||||
DispatchToUniLinksDesktop(hwnd);
|
||||
} else {
|
||||
// Not called with arguments, or just open the app shortcut on desktop.
|
||||
// So we just show the main window instead.
|
||||
::ShowWindow(hwnd, SW_NORMAL);
|
||||
::SetForegroundWindow(hwnd);
|
||||
}
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
// Attach to console when present (e.g., 'flutter run') or create a
|
||||
// new console when running with a debugger.
|
||||
if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent())
|
||||
|
@ -145,7 +145,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 ...", "Installiere..."),
|
||||
("Installing ...", "Installieren..."),
|
||||
("Install", "Installieren"),
|
||||
("Installation", "Installation"),
|
||||
("Installation Path", "Installationspfad"),
|
||||
@ -201,7 +201,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("x11 expected", "X11 erwartet"),
|
||||
("Port", "Port"),
|
||||
("Settings", "Einstellungen"),
|
||||
("Username", " Benutzername"),
|
||||
("Username", "Benutzername"),
|
||||
("Invalid port", "Ungültiger Port"),
|
||||
("Closed manually by the peer", "Von der Gegenstelle manuell geschlossen"),
|
||||
("Enable remote configuration modification", "Änderung der Konfiguration aus der Ferne zulassen"),
|
||||
@ -431,7 +431,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Weak", "Schwach"),
|
||||
("Medium", "Mittel"),
|
||||
("Strong", "Stark"),
|
||||
("Switch Sides", ""),
|
||||
("Please confirm if you want to share your desktop?", ""),
|
||||
("Switch Sides", "Seiten wechseln"),
|
||||
("Please confirm if you want to share your desktop?", "Bitte bestätigen Sie, ob Sie Ihren Desktop freigeben möchten."),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -431,7 +431,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Weak", "Débil"),
|
||||
("Medium", "Media"),
|
||||
("Strong", "Fuerte"),
|
||||
("Switch Sides", ""),
|
||||
("Please confirm if you want to share your desktop?", ""),
|
||||
("Switch Sides", "Intercambiar lados"),
|
||||
("Please confirm if you want to share your desktop?", "Por favor, confirma si quieres compartir tu escritorio"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -14,8 +14,8 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Service is not running", "Le service ne fonctionne pas"),
|
||||
("not_ready_status", "Pas prêt, veuillez vérifier la connexion réseau"),
|
||||
("Control Remote Desktop", "Contrôler le bureau à distance"),
|
||||
("Transfer File", "Transférer le fichier"),
|
||||
("Connect", "Connecter"),
|
||||
("Transfer File", "Transfert de fichiers"),
|
||||
("Connect", "Se connecter"),
|
||||
("Recent Sessions", "Sessions récentes"),
|
||||
("Address Book", "Carnet d'adresses"),
|
||||
("Confirmation", "Confirmation"),
|
||||
@ -303,7 +303,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("In privacy mode", "en mode privé"),
|
||||
("Out privacy mode", "hors mode de confidentialité"),
|
||||
("Language", "Langue"),
|
||||
("Keep RustDesk background service", "Gardez le service Rustdesk service arrière plan"),
|
||||
("Keep RustDesk background service", "Gardez le service RustDesk service arrière plan"),
|
||||
("Ignore Battery Optimizations", "Ignorer les optimisations batterie"),
|
||||
("android_open_battery_optimizations_tip", "Conseil android d'optimisation de batterie"),
|
||||
("Connection not allowed", "Connexion non autorisée"),
|
||||
@ -412,26 +412,26 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Select local keyboard type", "Selectionner la disposition du clavier local"),
|
||||
("software_render_tip", "Si vous avez une carte graphique NVIDIA et que la fenêtre distante se ferme immédiatement après la connexion, l'installation du pilote Nouveau et le choix d'utiliser le rendu du logiciel peuvent aider. Un redémarrage du logiciel est requis."),
|
||||
("Always use software rendering", "Utiliser toujours le rendu logiciel"),
|
||||
("config_input", "Afin de contrôler le bureau à distance avec le clavier, vous devez accorder à Rustdesk l'autorisation \"Surveillance de l’entrée\"."),
|
||||
("request_elevation_tip", ""),
|
||||
("Wait", ""),
|
||||
("Elevation Error", ""),
|
||||
("Ask the remote user for authentication", ""),
|
||||
("Choose this if the remote account is administrator", ""),
|
||||
("Transmit the username and password of administrator", ""),
|
||||
("still_click_uac_tip", ""),
|
||||
("Request Elevation", ""),
|
||||
("wait_accept_uac_tip", ""),
|
||||
("Elevate successfully", ""),
|
||||
("uppercase", ""),
|
||||
("lowercase", ""),
|
||||
("digit", ""),
|
||||
("special character", ""),
|
||||
("length>=8", ""),
|
||||
("Weak", ""),
|
||||
("Medium", ""),
|
||||
("Strong", ""),
|
||||
("Switch Sides", ""),
|
||||
("Please confirm if you want to share your desktop?", ""),
|
||||
("config_input", "Afin de contrôler le bureau à distance avec le clavier, vous devez accorder à RustDesk l'autorisation \"Surveillance de l’entrée\"."),
|
||||
("request_elevation_tip", "Vous pouvez également demander une augmentation des privilèges s'il y a quelqu'un du côté distant."),
|
||||
("Wait", "En cours"),
|
||||
("Elevation Error", "Erreur d'augmentation des privilèges"),
|
||||
("Ask the remote user for authentication", "Demander à l'utilisateur distant de s'authentifier"),
|
||||
("Choose this if the remote account is administrator", "Choisissez ceci si le compte distant est le compte d'administrateur"),
|
||||
("Transmit the username and password of administrator", "Transmettre le nom d'utilisateur et le mot de passe de l'administrateur"),
|
||||
("still_click_uac_tip", "Nécessite toujours que l'utilisateur distant confirme par la fenêtre UAC de RustDesk en cours d'éxécution."),
|
||||
("Request Elevation", "Demande d'augmentation des privilèges"),
|
||||
("wait_accept_uac_tip", "Veuillez attendre que l'utilisateur distant accepte la boîte de dialogue UAC."),
|
||||
("Elevate successfully", "Augmentation des privilèges avec succès"),
|
||||
("uppercase", "majuscule"),
|
||||
("lowercase", "minuscule"),
|
||||
("digit", "chiffre"),
|
||||
("special character", "caractère spécial"),
|
||||
("length>=8", "longueur>=8"),
|
||||
("Weak", "Faible"),
|
||||
("Medium", "Moyen"),
|
||||
("Strong", "Fort"),
|
||||
("Switch Sides", "Inverser la prise de contrôle"),
|
||||
("Please confirm if you want to share your desktop?", "Veuillez confirmer le partager de votre bureau ?"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Service is running", "Il servizio è in esecuzione"),
|
||||
("Service is not running", "Il servizio non è in esecuzione"),
|
||||
("not_ready_status", "Non pronto. Verifica la tua connessione"),
|
||||
("Control Remote Desktop", "Controlla una scrivania remota"),
|
||||
("Control Remote Desktop", "Controlla un desktop remoto"),
|
||||
("Transfer File", "Trasferisci file"),
|
||||
("Connect", "Connetti"),
|
||||
("Recent Sessions", "Sessioni recenti"),
|
||||
@ -372,7 +372,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Enable LAN Discovery", "Abilita il rilevamento della LAN"),
|
||||
("Deny LAN Discovery", "Nega il rilevamento della LAN"),
|
||||
("Write a message", "Scrivi un messaggio"),
|
||||
("Prompt", "Prompt"),
|
||||
("Prompt", "Richiede"),
|
||||
("Please wait for confirmation of UAC...", "Attendi la conferma dell'UAC..."),
|
||||
("elevated_foreground_window_tip", "La finestra corrente del desktop remoto richiede privilegi più elevati per funzionare, quindi non è in grado di utilizzare temporaneamente il mouse e la tastiera. È possibile chiedere all'utente remoto di ridurre a icona la finestra corrente o di fare clic sul pulsante di elevazione nella finestra di gestione della connessione. Per evitare questo problema, si consiglia di installare il software sul dispositivo remoto."),
|
||||
("Disconnected", "Disconnesso"),
|
||||
@ -423,15 +423,15 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Request Elevation", "Richiedi elevazione dei diritti"),
|
||||
("wait_accept_uac_tip", "Attendere che l'utente remoto accetti la finestra di dialogo UAC."),
|
||||
("Elevate successfully", "Elevazione dei diritti effettuata con successo"),
|
||||
("uppercase", "maiuscolo"),
|
||||
("lowercase", "minuscolo"),
|
||||
("digit", "numero"),
|
||||
("special character", "carattere speciale"),
|
||||
("length>=8", "lunghezza >= 8"),
|
||||
("uppercase", "Maiuscola"),
|
||||
("lowercase", "Minuscola"),
|
||||
("digit", "Numero"),
|
||||
("special character", "Carattere speciale"),
|
||||
("length>=8", "Lunghezza >= 8"),
|
||||
("Weak", "Debole"),
|
||||
("Medium", "Media"),
|
||||
("Strong", "Forte"),
|
||||
("Switch Sides", ""),
|
||||
("Please confirm if you want to share your desktop?", ""),
|
||||
("Switch Sides", "Cambia lato"),
|
||||
("Please confirm if you want to share your desktop?", "Vuoi condividere il tuo desktop?"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -431,7 +431,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Weak", "Слабый"),
|
||||
("Medium", "Средний"),
|
||||
("Strong", "Стойкий"),
|
||||
("Switch Sides", ""),
|
||||
("Please confirm if you want to share your desktop?", ""),
|
||||
("Switch Sides", "Переключить стороны"),
|
||||
("Please confirm if you want to share your desktop?", "Подтвердите, что хотите поделиться своим рабочим столом?"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user