mirror of
https://github.com/rustdesk/rustdesk.git
synced 2024-11-27 23:19:02 +08:00
add verificationCodeDialog, opt loginDialog
This commit is contained in:
parent
bb8c50b2c7
commit
a8536118c0
@ -324,11 +324,13 @@ class LoginWidgetUserPass extends StatelessWidget {
|
||||
title: '${translate("Username")}:',
|
||||
controller: username,
|
||||
autoFocus: true,
|
||||
prefixIcon: Icon(Icons.account_circle_outlined),
|
||||
errorText: usernameMsg),
|
||||
DialogTextField(
|
||||
title: '${translate("Password")}:',
|
||||
obscureText: true,
|
||||
controller: pass,
|
||||
prefixIcon: Icon(Icons.lock_outline),
|
||||
errorText: passMsg),
|
||||
Obx(() => CheckboxListTile(
|
||||
contentPadding: const EdgeInsets.all(0),
|
||||
@ -377,6 +379,8 @@ class DialogTextField extends StatelessWidget {
|
||||
final bool autoFocus;
|
||||
final bool obscureText;
|
||||
final String? errorText;
|
||||
final String? helperText;
|
||||
final Widget? prefixIcon;
|
||||
final TextEditingController controller;
|
||||
final FocusNode focusNode = FocusNode();
|
||||
|
||||
@ -385,6 +389,8 @@ class DialogTextField extends StatelessWidget {
|
||||
this.autoFocus = false,
|
||||
this.obscureText = false,
|
||||
this.errorText,
|
||||
this.helperText,
|
||||
this.prefixIcon,
|
||||
required this.title,
|
||||
required this.controller})
|
||||
: super(key: key) {
|
||||
@ -403,6 +409,9 @@ class DialogTextField extends StatelessWidget {
|
||||
decoration: InputDecoration(
|
||||
labelText: title,
|
||||
border: const OutlineInputBorder(),
|
||||
prefixIcon: prefixIcon,
|
||||
helperText: helperText,
|
||||
helperMaxLines: 8,
|
||||
errorText: errorText),
|
||||
controller: controller,
|
||||
focusNode: focusNode,
|
||||
@ -427,38 +436,36 @@ Future<bool?> loginDialog() async {
|
||||
final autoLogin = true.obs;
|
||||
final RxString curOP = ''.obs;
|
||||
|
||||
return gFFI.dialogManager.show<bool>((setState, close) {
|
||||
cancel() {
|
||||
final res = await gFFI.dialogManager.show<bool>((setState, close) {
|
||||
username.addListener(() {
|
||||
if (usernameMsg != null) {
|
||||
setState(() => usernameMsg = null);
|
||||
}
|
||||
});
|
||||
|
||||
password.addListener(() {
|
||||
if (passwordMsg != null) {
|
||||
setState(() => passwordMsg = null);
|
||||
}
|
||||
});
|
||||
|
||||
onDialogCancel() {
|
||||
isInProgress = false;
|
||||
close(false);
|
||||
}
|
||||
|
||||
onLogin() async {
|
||||
setState(() {
|
||||
usernameMsg = null;
|
||||
passwordMsg = null;
|
||||
isInProgress = true;
|
||||
});
|
||||
cancel() {
|
||||
curOP.value = '';
|
||||
if (isInProgress) {
|
||||
setState(() {
|
||||
isInProgress = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
curOP.value = 'rustdesk';
|
||||
// validate
|
||||
if (username.text.isEmpty) {
|
||||
usernameMsg = translate('Username missed');
|
||||
cancel();
|
||||
setState(() => usernameMsg = translate('Username missed'));
|
||||
return;
|
||||
}
|
||||
if (password.text.isEmpty) {
|
||||
passwordMsg = translate('Password missed');
|
||||
cancel();
|
||||
setState(() => passwordMsg = translate('Password missed'));
|
||||
return;
|
||||
}
|
||||
curOP.value = 'rustdesk';
|
||||
setState(() => isInProgress = true);
|
||||
try {
|
||||
final resp = await gFFI.userModel.login(LoginRequest(
|
||||
username: username.text,
|
||||
@ -471,27 +478,33 @@ Future<bool?> loginDialog() async {
|
||||
switch (resp.type) {
|
||||
case HttpType.kAuthResTypeToken:
|
||||
if (resp.access_token != null) {
|
||||
bind.mainSetLocalOption(
|
||||
await bind.mainSetLocalOption(
|
||||
key: 'access_token', value: resp.access_token!);
|
||||
close(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case HttpType.kAuthResTypeEmailCheck:
|
||||
setState(() => isInProgress = false);
|
||||
final res = await verificationCodeDialog(resp.user);
|
||||
if (res == true) {
|
||||
close(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
passwordMsg = "Failed, bad response from server";
|
||||
break;
|
||||
}
|
||||
} on RequestException catch (err) {
|
||||
passwordMsg = translate(err.cause);
|
||||
debugPrintStack(label: err.toString());
|
||||
cancel();
|
||||
return;
|
||||
} catch (err) {
|
||||
passwordMsg = "Unknown Error";
|
||||
passwordMsg = "Unknown Error: $err";
|
||||
debugPrintStack(label: err.toString());
|
||||
cancel();
|
||||
return;
|
||||
}
|
||||
close();
|
||||
curOP.value = '';
|
||||
setState(() => isInProgress = false);
|
||||
}
|
||||
|
||||
return CustomAlertDialog(
|
||||
@ -538,8 +551,125 @@ Future<bool?> loginDialog() async {
|
||||
),
|
||||
],
|
||||
),
|
||||
actions: [msgBoxButton(translate('Close'), cancel)],
|
||||
onCancel: cancel,
|
||||
actions: [msgBoxButton(translate('Close'), onDialogCancel)],
|
||||
onCancel: onDialogCancel,
|
||||
);
|
||||
});
|
||||
|
||||
if (res != null) {
|
||||
// update ab and group status
|
||||
await gFFI.abModel.pullAb();
|
||||
await gFFI.groupModel.pull();
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
Future<bool?> verificationCodeDialog(UserPayload? user) async {
|
||||
var autoLogin = true;
|
||||
var isInProgress = false;
|
||||
String? errorText;
|
||||
|
||||
final code = TextEditingController();
|
||||
|
||||
final res = await gFFI.dialogManager.show<bool>((setState, close) {
|
||||
bool validate() {
|
||||
return code.text.length >= 6;
|
||||
}
|
||||
|
||||
code.addListener(() {
|
||||
if (errorText != null) {
|
||||
setState(() => errorText = null);
|
||||
}
|
||||
});
|
||||
|
||||
void onVerify() async {
|
||||
if (!validate()) {
|
||||
setState(
|
||||
() => errorText = translate('Too short, at least 6 characters.'));
|
||||
return;
|
||||
}
|
||||
setState(() => isInProgress = true);
|
||||
|
||||
try {
|
||||
final resp = await gFFI.userModel.login(LoginRequest(
|
||||
verificationCode: code.text,
|
||||
username: user?.name,
|
||||
id: await bind.mainGetMyId(),
|
||||
uuid: await bind.mainGetUuid(),
|
||||
autoLogin: autoLogin,
|
||||
type: HttpType.kAuthReqTypeEmailCode));
|
||||
|
||||
switch (resp.type) {
|
||||
case HttpType.kAuthResTypeToken:
|
||||
if (resp.access_token != null) {
|
||||
await bind.mainSetLocalOption(
|
||||
key: 'access_token', value: resp.access_token!);
|
||||
close(true);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
errorText = "Failed, bad response from server";
|
||||
break;
|
||||
}
|
||||
} on RequestException catch (err) {
|
||||
errorText = translate(err.cause);
|
||||
debugPrintStack(label: err.toString());
|
||||
} catch (err) {
|
||||
errorText = "Unknown Error: $err";
|
||||
debugPrintStack(label: err.toString());
|
||||
}
|
||||
|
||||
setState(() => isInProgress = false);
|
||||
}
|
||||
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Verification code")),
|
||||
contentBoxConstraints: BoxConstraints(maxWidth: 300),
|
||||
content: Column(
|
||||
children: [
|
||||
Offstage(
|
||||
offstage: user?.email == null,
|
||||
child: TextField(
|
||||
decoration: InputDecoration(
|
||||
labelText: "Email",
|
||||
prefixIcon: Icon(Icons.email),
|
||||
border: InputBorder.none),
|
||||
readOnly: true,
|
||||
controller: TextEditingController(text: user?.email),
|
||||
)),
|
||||
const SizedBox(height: 8),
|
||||
DialogTextField(
|
||||
title: '${translate("Verification code")}:',
|
||||
controller: code,
|
||||
autoFocus: true,
|
||||
errorText: errorText,
|
||||
helperText: translate('verification_tip'),
|
||||
),
|
||||
CheckboxListTile(
|
||||
contentPadding: const EdgeInsets.all(0),
|
||||
dense: true,
|
||||
controlAffinity: ListTileControlAffinity.leading,
|
||||
title: Row(children: [
|
||||
Expanded(child: Text(translate("Trust this device")))
|
||||
]),
|
||||
value: autoLogin,
|
||||
onChanged: (v) {
|
||||
if (v == null) return;
|
||||
setState(() => autoLogin = !autoLogin);
|
||||
},
|
||||
),
|
||||
Offstage(
|
||||
offstage: !isInProgress,
|
||||
child: const LinearProgressIndicator()),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
TextButton(onPressed: close, child: Text(translate("Cancel"))),
|
||||
TextButton(onPressed: onVerify, child: Text(translate("Verify"))),
|
||||
]);
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -127,7 +127,6 @@ class UserModel {
|
||||
await _parseAndUpdateUser(loginResponse.user!);
|
||||
}
|
||||
|
||||
await _updateOtherModels();
|
||||
return loginResponse;
|
||||
}
|
||||
}
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Connecta sempre a través de relay"),
|
||||
("whitelist_tip", ""),
|
||||
("Login", "Inicia sessió"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Sortir"),
|
||||
("Tags", ""),
|
||||
("Search ID", "Cerca ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "强制走中继连接"),
|
||||
("whitelist_tip", "只有白名单里的ip才能访问我"),
|
||||
("Login", "登录"),
|
||||
("Verify", "验证"),
|
||||
("Remember me", "记住我"),
|
||||
("Trust this device", "信任此设备"),
|
||||
("Verification code", "验证码"),
|
||||
("verification_tip", "检测到新设备登录,已向注册邮箱发送了登录验证码,输入验证码继续登录"),
|
||||
("Logout", "登出"),
|
||||
("Tags", "标签"),
|
||||
("Search ID", "查找ID"),
|
||||
@ -222,7 +226,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Network error", "网络错误"),
|
||||
("Username missed", "用户名没有填写"),
|
||||
("Password missed", "密码没有填写"),
|
||||
("Wrong credentials", "用户名或者密码错误"),
|
||||
("Wrong credentials", "提供的登入信息错误"),
|
||||
("Edit Tag", "修改标签"),
|
||||
("Unremember Password", "忘掉密码"),
|
||||
("Favorites", "收藏"),
|
||||
@ -274,7 +278,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Do you accept?", "是否接受?"),
|
||||
("Open System Setting", "打开系统设置"),
|
||||
("How to get Android input permission?", "如何获取安卓的输入权限?"),
|
||||
("android_input_permission_tip1", "為了讓遠程設備通過鼠標或者觸屏控制您的安卓設備,你需要允許RustDesk使用\"無障礙\"服務。"),
|
||||
("android_input_permission_tip1", "为了让远程设备通过鼠标或触屏控制您的安卓设备,你需要允許RustDesk使用\"无障碍\"服务。"),
|
||||
("android_input_permission_tip2", "请在接下来的系统设置页面里,找到并进入 [已安装的服务] 页面,将 [RustDesk Input] 服务开启。"),
|
||||
("android_new_connection_tip", "收到新的连接控制请求,对方想要控制你当前的设备。"),
|
||||
("android_service_will_start_tip", "开启录屏权限将自动开启服务,允许其他设备向此设备请求建立连接。"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Vždy se spojovat prostřednictvím brány pro předávání (relay)"),
|
||||
("whitelist_tip", "Přístup je umožněn pouze z IP adres, nacházejících se na seznamu povolených"),
|
||||
("Login", "Přihlásit se"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Odhlásit se"),
|
||||
("Tags", "Štítky"),
|
||||
("Search ID", "Hledat identifikátor"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Forbindelse via relæ-server"),
|
||||
("whitelist_tip", "Kun IP'er på udgivelseslisten kan få adgang til mig"),
|
||||
("Login", "Login"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "logger af"),
|
||||
("Tags", "Nøgleord"),
|
||||
("Search ID", "Søg ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Immer über Relay-Server verbinden"),
|
||||
("whitelist_tip", "Nur IPs auf der Whitelist können zugreifen."),
|
||||
("Login", "Anmelden"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Abmelden"),
|
||||
("Tags", "Schlagworte"),
|
||||
("Search ID", "Suche ID"),
|
||||
|
@ -36,5 +36,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("hide_cm_tip", "Allow hiding only if accepting sessions via password and using permanent password"),
|
||||
("wayland_experiment_tip", "Wayland support is in experimental stage, please use X11 if you require unattended access."),
|
||||
("Slogan_tip", "Made with heart in this chaotic world!"),
|
||||
("verification_tip", "A new device has been detected, and a verification code has been sent to the registered email address, enter the verification code to continue logging in."),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Ĉiam konekti per relajso"),
|
||||
("whitelist_tip", "Nur la IP en la blanka listo povas kontroli mian komputilon"),
|
||||
("Login", "Konekti"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Malkonekti"),
|
||||
("Tags", "Etikedi"),
|
||||
("Search ID", "Serĉi ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Conéctese siempre a través de relay"),
|
||||
("whitelist_tip", "Solo las direcciones IP autorizadas pueden conectarse a este escritorio"),
|
||||
("Login", "Iniciar sesión"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Salir"),
|
||||
("Tags", "Tags"),
|
||||
("Search ID", "Buscar ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "برای اتصال استفاده شود Relay از"),
|
||||
("whitelist_tip", "های مجاز می توانند به این دسکتاپ متصل شوند IP فقط"),
|
||||
("Login", "ورود"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "خروج"),
|
||||
("Tags", "برچسب ها"),
|
||||
("Search ID", "جستجوی شناسه"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Forcer la connexion relais"),
|
||||
("whitelist_tip", "Seul l'IP dans la liste blanche peut accéder à mon appareil"),
|
||||
("Login", "Connexion"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Déconnexion"),
|
||||
("Tags", "Étiqueter"),
|
||||
("Search ID", "Rechercher un ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Σύνδεση πάντα μέσω αναμετάδοσης"),
|
||||
("whitelist_tip", "Μόνο οι IP της λίστας επιτρεπόμενων έχουν πρόσβαση"),
|
||||
("Login", "Σύνδεση"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Αποσύνδεση"),
|
||||
("Tags", "Ετικέτες"),
|
||||
("Search ID", "Αναζήτηση ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Mindig közvetítőn keresztüli csatlakozás"),
|
||||
("whitelist_tip", "Csak az engedélyezési listán szereplő címek csatlakozhatnak"),
|
||||
("Login", "Belépés"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Kilépés"),
|
||||
("Tags", "Tagok"),
|
||||
("Search ID", "Azonosító keresése..."),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Selalu terhubung melalui relai"),
|
||||
("whitelist_tip", "Hanya whitelisted IP yang dapat mengakses saya"),
|
||||
("Login", "Masuk"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Keluar"),
|
||||
("Tags", "Tag"),
|
||||
("Search ID", "Cari ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Connetti sempre tramite relay"),
|
||||
("whitelist_tip", "Solo gli indirizzi IP autorizzati possono connettersi a questo desktop"),
|
||||
("Login", "Accedi"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Esci"),
|
||||
("Tags", "Tag"),
|
||||
("Search ID", "Cerca ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "常に中継サーバー経由で接続"),
|
||||
("whitelist_tip", "ホワイトリストに登録されたIPからのみ接続を許可します"),
|
||||
("Login", "ログイン"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "ログアウト"),
|
||||
("Tags", "タグ"),
|
||||
("Search ID", "IDを検索"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "항상 relay를 통해 접속하기"),
|
||||
("whitelist_tip", "화이트리스트에 있는 IP만 현 데스크탑에 접속 가능합니다"),
|
||||
("Login", "로그인"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "로그아웃"),
|
||||
("Tags", "태그"),
|
||||
("Search ID", "ID 검색"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Әрқашан да релай сербері арқылы қосылу"),
|
||||
("whitelist_tip", "Маған тек ақ-тізімделген IP қол жеткізе алады"),
|
||||
("Login", "Кіру"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Шығу"),
|
||||
("Tags", "Тақтар"),
|
||||
("Search ID", "ID Іздеу"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Zawsze łącz pośrednio"),
|
||||
("whitelist_tip", "Zezwlaj na łączenie z tym komputerem tylko z adresów IP znajdujących się na białej liście"),
|
||||
("Login", "Zaloguj"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Wyloguj"),
|
||||
("Tags", "Tagi"),
|
||||
("Search ID", "Szukaj ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Sempre conectar via relay"),
|
||||
("whitelist_tip", "Somente IPs na whitelist podem me acessar"),
|
||||
("Login", "Login"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Sair"),
|
||||
("Tags", "Tags"),
|
||||
("Search ID", "Procurar ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Sempre conectar via relay"),
|
||||
("whitelist_tip", "Somente IPs confiáveis podem me acessar"),
|
||||
("Login", "Login"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Sair"),
|
||||
("Tags", "Tags"),
|
||||
("Search ID", "Pesquisar ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Всегда подключаться через ретрансляционный сервер"),
|
||||
("whitelist_tip", "Только IP-адреса из белого списка могут получить доступ ко мне"),
|
||||
("Login", "Войти"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Выйти"),
|
||||
("Tags", "Метки"),
|
||||
("Search ID", "Поиск по ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Vždy pripájať cez prepájací server"),
|
||||
("whitelist_tip", "Len vymenované IP adresy majú oprávnenie sa pripojiť k vzdialenej správe"),
|
||||
("Login", "Prihlásenie"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Odhlásenie"),
|
||||
("Tags", "Štítky"),
|
||||
("Search ID", "Hľadať ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Gjithmonë lidheni me transmetues"),
|
||||
("whitelist_tip", "Vetëm IP e listës së bardhë mund të më aksesoj."),
|
||||
("Login", "Hyrje"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Dalje"),
|
||||
("Tags", "Tage"),
|
||||
("Search ID", "Kerko ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Uvek se spoj preko posrednika"),
|
||||
("whitelist_tip", "Samo dozvoljene IP mi mogu pristupiti"),
|
||||
("Login", "Prijava"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Odjava"),
|
||||
("Tags", "Oznake"),
|
||||
("Search ID", "Traži ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Anslut alltid via relay"),
|
||||
("whitelist_tip", "Bara vitlistade IPs kan koppla upp till mig"),
|
||||
("Login", "Logga in"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Logga ut"),
|
||||
("Tags", "Taggar"),
|
||||
("Search ID", "Sök ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", ""),
|
||||
("whitelist_tip", ""),
|
||||
("Login", ""),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", ""),
|
||||
("Tags", ""),
|
||||
("Search ID", ""),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "เชื่อมต่อผ่านรีเลย์เสมอ"),
|
||||
("whitelist_tip", "อนุญาตเฉพาะการเชื่อมต่อจาก IP ที่ไวท์ลิสต์"),
|
||||
("Login", "เข้าสู่ระบบ"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "ออกจากระบบ"),
|
||||
("Tags", "แท็ก"),
|
||||
("Search ID", "ค้นหา ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Always connect via relay"),
|
||||
("whitelist_tip", "Bu masaüstüne yalnızca yetkili IP adresleri bağlanabilir"),
|
||||
("Login", "Giriş yap"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Çıkış yap"),
|
||||
("Tags", "Etiketler"),
|
||||
("Search ID", "ID Arama"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "一律透過轉送連線"),
|
||||
("whitelist_tip", "只有白名單中的 IP 可以存取"),
|
||||
("Login", "登入"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "登出"),
|
||||
("Tags", "標籤"),
|
||||
("Search ID", "搜尋 ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Завжди підключатися через ретрансляційний сервер"),
|
||||
("whitelist_tip", "Тільки IP-адреси з білого списку можуть отримати доступ до мене"),
|
||||
("Login", "Увійти"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Вийти"),
|
||||
("Tags", "Ключові слова"),
|
||||
("Search ID", "Пошук за ID"),
|
||||
|
@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Always connect via relay", "Luôn kết nối qua relay"),
|
||||
("whitelist_tip", "Chỉ có những IP đựoc cho phép mới có thể truy cập"),
|
||||
("Login", "Đăng nhập"),
|
||||
("Verify", ""),
|
||||
("Remember me", ""),
|
||||
("Trust this device", ""),
|
||||
("Verification code", ""),
|
||||
("verification_tip", ""),
|
||||
("Logout", "Đăng xuất"),
|
||||
("Tags", "Tags"),
|
||||
("Search ID", "Tìm ID"),
|
||||
|
Loading…
Reference in New Issue
Block a user