add verificationCodeDialog, opt loginDialog

This commit is contained in:
csf 2023-01-09 14:21:16 +09:00
parent bb8c50b2c7
commit a8536118c0
33 changed files with 283 additions and 33 deletions

View File

@ -324,11 +324,13 @@ class LoginWidgetUserPass extends StatelessWidget {
title: '${translate("Username")}:', title: '${translate("Username")}:',
controller: username, controller: username,
autoFocus: true, autoFocus: true,
prefixIcon: Icon(Icons.account_circle_outlined),
errorText: usernameMsg), errorText: usernameMsg),
DialogTextField( DialogTextField(
title: '${translate("Password")}:', title: '${translate("Password")}:',
obscureText: true, obscureText: true,
controller: pass, controller: pass,
prefixIcon: Icon(Icons.lock_outline),
errorText: passMsg), errorText: passMsg),
Obx(() => CheckboxListTile( Obx(() => CheckboxListTile(
contentPadding: const EdgeInsets.all(0), contentPadding: const EdgeInsets.all(0),
@ -377,6 +379,8 @@ class DialogTextField extends StatelessWidget {
final bool autoFocus; final bool autoFocus;
final bool obscureText; final bool obscureText;
final String? errorText; final String? errorText;
final String? helperText;
final Widget? prefixIcon;
final TextEditingController controller; final TextEditingController controller;
final FocusNode focusNode = FocusNode(); final FocusNode focusNode = FocusNode();
@ -385,6 +389,8 @@ class DialogTextField extends StatelessWidget {
this.autoFocus = false, this.autoFocus = false,
this.obscureText = false, this.obscureText = false,
this.errorText, this.errorText,
this.helperText,
this.prefixIcon,
required this.title, required this.title,
required this.controller}) required this.controller})
: super(key: key) { : super(key: key) {
@ -403,6 +409,9 @@ class DialogTextField extends StatelessWidget {
decoration: InputDecoration( decoration: InputDecoration(
labelText: title, labelText: title,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
prefixIcon: prefixIcon,
helperText: helperText,
helperMaxLines: 8,
errorText: errorText), errorText: errorText),
controller: controller, controller: controller,
focusNode: focusNode, focusNode: focusNode,
@ -427,38 +436,36 @@ Future<bool?> loginDialog() async {
final autoLogin = true.obs; final autoLogin = true.obs;
final RxString curOP = ''.obs; final RxString curOP = ''.obs;
return gFFI.dialogManager.show<bool>((setState, close) { final res = await gFFI.dialogManager.show<bool>((setState, close) {
cancel() { username.addListener(() {
if (usernameMsg != null) {
setState(() => usernameMsg = null);
}
});
password.addListener(() {
if (passwordMsg != null) {
setState(() => passwordMsg = null);
}
});
onDialogCancel() {
isInProgress = false; isInProgress = false;
close(false); close(false);
} }
onLogin() async { onLogin() async {
setState(() { // validate
usernameMsg = null;
passwordMsg = null;
isInProgress = true;
});
cancel() {
curOP.value = '';
if (isInProgress) {
setState(() {
isInProgress = false;
});
}
}
curOP.value = 'rustdesk';
if (username.text.isEmpty) { if (username.text.isEmpty) {
usernameMsg = translate('Username missed'); setState(() => usernameMsg = translate('Username missed'));
cancel();
return; return;
} }
if (password.text.isEmpty) { if (password.text.isEmpty) {
passwordMsg = translate('Password missed'); setState(() => passwordMsg = translate('Password missed'));
cancel();
return; return;
} }
curOP.value = 'rustdesk';
setState(() => isInProgress = true);
try { try {
final resp = await gFFI.userModel.login(LoginRequest( final resp = await gFFI.userModel.login(LoginRequest(
username: username.text, username: username.text,
@ -471,27 +478,33 @@ Future<bool?> loginDialog() async {
switch (resp.type) { switch (resp.type) {
case HttpType.kAuthResTypeToken: case HttpType.kAuthResTypeToken:
if (resp.access_token != null) { if (resp.access_token != null) {
bind.mainSetLocalOption( await bind.mainSetLocalOption(
key: 'access_token', value: resp.access_token!); key: 'access_token', value: resp.access_token!);
close(true); close(true);
return; return;
} }
break; break;
case HttpType.kAuthResTypeEmailCheck: 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; break;
} }
} on RequestException catch (err) { } on RequestException catch (err) {
passwordMsg = translate(err.cause); passwordMsg = translate(err.cause);
debugPrintStack(label: err.toString()); debugPrintStack(label: err.toString());
cancel();
return;
} catch (err) { } catch (err) {
passwordMsg = "Unknown Error"; passwordMsg = "Unknown Error: $err";
debugPrintStack(label: err.toString()); debugPrintStack(label: err.toString());
cancel();
return;
} }
close(); curOP.value = '';
setState(() => isInProgress = false);
} }
return CustomAlertDialog( return CustomAlertDialog(
@ -538,8 +551,125 @@ Future<bool?> loginDialog() async {
), ),
], ],
), ),
actions: [msgBoxButton(translate('Close'), cancel)], actions: [msgBoxButton(translate('Close'), onDialogCancel)],
onCancel: cancel, 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;
} }

View File

@ -127,7 +127,6 @@ class UserModel {
await _parseAndUpdateUser(loginResponse.user!); await _parseAndUpdateUser(loginResponse.user!);
} }
await _updateOtherModels();
return loginResponse; return loginResponse;
} }
} }

View File

@ -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"), ("Always connect via relay", "Connecta sempre a través de relay"),
("whitelist_tip", ""), ("whitelist_tip", ""),
("Login", "Inicia sessió"), ("Login", "Inicia sessió"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Sortir"), ("Logout", "Sortir"),
("Tags", ""), ("Tags", ""),
("Search ID", "Cerca ID"), ("Search ID", "Cerca ID"),

View File

@ -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", "只有白名单里的ip才能访问我"), ("whitelist_tip", "只有白名单里的ip才能访问我"),
("Login", "登录"), ("Login", "登录"),
("Verify", "验证"),
("Remember me", "记住我"), ("Remember me", "记住我"),
("Trust this device", "信任此设备"),
("Verification code", "验证码"),
("verification_tip", "检测到新设备登录,已向注册邮箱发送了登录验证码,输入验证码继续登录"),
("Logout", "登出"), ("Logout", "登出"),
("Tags", "标签"), ("Tags", "标签"),
("Search ID", "查找ID"), ("Search ID", "查找ID"),
@ -222,7 +226,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Network error", "网络错误"), ("Network error", "网络错误"),
("Username missed", "用户名没有填写"), ("Username missed", "用户名没有填写"),
("Password missed", "密码没有填写"), ("Password missed", "密码没有填写"),
("Wrong credentials", "用户名或者密码错误"), ("Wrong credentials", "提供的登入信息错误"),
("Edit Tag", "修改标签"), ("Edit Tag", "修改标签"),
("Unremember Password", "忘掉密码"), ("Unremember Password", "忘掉密码"),
("Favorites", "收藏"), ("Favorites", "收藏"),
@ -274,7 +278,7 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Do you accept?", "是否接受?"), ("Do you accept?", "是否接受?"),
("Open System Setting", "打开系统设置"), ("Open System Setting", "打开系统设置"),
("How to get Android input permission?", "如何获取安卓的输入权限?"), ("How to get Android input permission?", "如何获取安卓的输入权限?"),
("android_input_permission_tip1", "為了讓遠程設備通過鼠標或者觸屏控制您的安卓設備你需要允許RustDesk使用\"無障礙\"服務"), ("android_input_permission_tip1", "为了让远程设备通过鼠标或触屏控制您的安卓设备你需要允許RustDesk使用\"无障碍\"服务"),
("android_input_permission_tip2", "请在接下来的系统设置页面里,找到并进入 [已安装的服务] 页面,将 [RustDesk Input] 服务开启。"), ("android_input_permission_tip2", "请在接下来的系统设置页面里,找到并进入 [已安装的服务] 页面,将 [RustDesk Input] 服务开启。"),
("android_new_connection_tip", "收到新的连接控制请求,对方想要控制你当前的设备。"), ("android_new_connection_tip", "收到新的连接控制请求,对方想要控制你当前的设备。"),
("android_service_will_start_tip", "开启录屏权限将自动开启服务,允许其他设备向此设备请求建立连接。"), ("android_service_will_start_tip", "开启录屏权限将自动开启服务,允许其他设备向此设备请求建立连接。"),

View File

@ -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)"), ("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"), ("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"), ("Login", "Přihlásit se"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Odhlásit se"), ("Logout", "Odhlásit se"),
("Tags", "Štítky"), ("Tags", "Štítky"),
("Search ID", "Hledat identifikátor"), ("Search ID", "Hledat identifikátor"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Forbindelse via relæ-server"), ("Always connect via relay", "Forbindelse via relæ-server"),
("whitelist_tip", "Kun IP'er på udgivelseslisten kan få adgang til mig"), ("whitelist_tip", "Kun IP'er på udgivelseslisten kan få adgang til mig"),
("Login", "Login"), ("Login", "Login"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "logger af"), ("Logout", "logger af"),
("Tags", "Nøgleord"), ("Tags", "Nøgleord"),
("Search ID", "Søg ID"), ("Search ID", "Søg ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Immer über Relay-Server verbinden"), ("Always connect via relay", "Immer über Relay-Server verbinden"),
("whitelist_tip", "Nur IPs auf der Whitelist können zugreifen."), ("whitelist_tip", "Nur IPs auf der Whitelist können zugreifen."),
("Login", "Anmelden"), ("Login", "Anmelden"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Abmelden"), ("Logout", "Abmelden"),
("Tags", "Schlagworte"), ("Tags", "Schlagworte"),
("Search ID", "Suche ID"), ("Search ID", "Suche ID"),

View File

@ -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"), ("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."), ("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!"), ("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(); ].iter().cloned().collect();
} }

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Ĉiam konekti per relajso"), ("Always connect via relay", "Ĉiam konekti per relajso"),
("whitelist_tip", "Nur la IP en la blanka listo povas kontroli mian komputilon"), ("whitelist_tip", "Nur la IP en la blanka listo povas kontroli mian komputilon"),
("Login", "Konekti"), ("Login", "Konekti"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Malkonekti"), ("Logout", "Malkonekti"),
("Tags", "Etikedi"), ("Tags", "Etikedi"),
("Search ID", "Serĉi ID"), ("Search ID", "Serĉi ID"),

View File

@ -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"), ("Always connect via relay", "Conéctese siempre a través de relay"),
("whitelist_tip", "Solo las direcciones IP autorizadas pueden conectarse a este escritorio"), ("whitelist_tip", "Solo las direcciones IP autorizadas pueden conectarse a este escritorio"),
("Login", "Iniciar sesión"), ("Login", "Iniciar sesión"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Salir"), ("Logout", "Salir"),
("Tags", "Tags"), ("Tags", "Tags"),
("Search ID", "Buscar ID"), ("Search ID", "Buscar ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "برای اتصال استفاده شود Relay از"), ("Always connect via relay", "برای اتصال استفاده شود Relay از"),
("whitelist_tip", "های مجاز می توانند به این دسکتاپ متصل شوند IP فقط"), ("whitelist_tip", "های مجاز می توانند به این دسکتاپ متصل شوند IP فقط"),
("Login", "ورود"), ("Login", "ورود"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "خروج"), ("Logout", "خروج"),
("Tags", "برچسب ها"), ("Tags", "برچسب ها"),
("Search ID", "جستجوی شناسه"), ("Search ID", "جستجوی شناسه"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Forcer la connexion relais"), ("Always connect via relay", "Forcer la connexion relais"),
("whitelist_tip", "Seul l'IP dans la liste blanche peut accéder à mon appareil"), ("whitelist_tip", "Seul l'IP dans la liste blanche peut accéder à mon appareil"),
("Login", "Connexion"), ("Login", "Connexion"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Déconnexion"), ("Logout", "Déconnexion"),
("Tags", "Étiqueter"), ("Tags", "Étiqueter"),
("Search ID", "Rechercher un ID"), ("Search ID", "Rechercher un ID"),

View File

@ -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", "Μόνο οι IP της λίστας επιτρεπόμενων έχουν πρόσβαση"), ("whitelist_tip", "Μόνο οι IP της λίστας επιτρεπόμενων έχουν πρόσβαση"),
("Login", "Σύνδεση"), ("Login", "Σύνδεση"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Αποσύνδεση"), ("Logout", "Αποσύνδεση"),
("Tags", "Ετικέτες"), ("Tags", "Ετικέτες"),
("Search ID", "Αναζήτηση ID"), ("Search ID", "Αναζήτηση ID"),

View File

@ -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"), ("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"), ("whitelist_tip", "Csak az engedélyezési listán szereplő címek csatlakozhatnak"),
("Login", "Belépés"), ("Login", "Belépés"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Kilépés"), ("Logout", "Kilépés"),
("Tags", "Tagok"), ("Tags", "Tagok"),
("Search ID", "Azonosító keresése..."), ("Search ID", "Azonosító keresése..."),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Selalu terhubung melalui relai"), ("Always connect via relay", "Selalu terhubung melalui relai"),
("whitelist_tip", "Hanya whitelisted IP yang dapat mengakses saya"), ("whitelist_tip", "Hanya whitelisted IP yang dapat mengakses saya"),
("Login", "Masuk"), ("Login", "Masuk"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Keluar"), ("Logout", "Keluar"),
("Tags", "Tag"), ("Tags", "Tag"),
("Search ID", "Cari ID"), ("Search ID", "Cari ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Connetti sempre tramite relay"), ("Always connect via relay", "Connetti sempre tramite relay"),
("whitelist_tip", "Solo gli indirizzi IP autorizzati possono connettersi a questo desktop"), ("whitelist_tip", "Solo gli indirizzi IP autorizzati possono connettersi a questo desktop"),
("Login", "Accedi"), ("Login", "Accedi"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Esci"), ("Logout", "Esci"),
("Tags", "Tag"), ("Tags", "Tag"),
("Search ID", "Cerca ID"), ("Search ID", "Cerca ID"),

View File

@ -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", "ホワイトリストに登録されたIPからのみ接続を許可します"), ("whitelist_tip", "ホワイトリストに登録されたIPからのみ接続を許可します"),
("Login", "ログイン"), ("Login", "ログイン"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "ログアウト"), ("Logout", "ログアウト"),
("Tags", "タグ"), ("Tags", "タグ"),
("Search ID", "IDを検索"), ("Search ID", "IDを検索"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "항상 relay를 통해 접속하기"), ("Always connect via relay", "항상 relay를 통해 접속하기"),
("whitelist_tip", "화이트리스트에 있는 IP만 현 데스크탑에 접속 가능합니다"), ("whitelist_tip", "화이트리스트에 있는 IP만 현 데스크탑에 접속 가능합니다"),
("Login", "로그인"), ("Login", "로그인"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "로그아웃"), ("Logout", "로그아웃"),
("Tags", "태그"), ("Tags", "태그"),
("Search ID", "ID 검색"), ("Search ID", "ID 검색"),

View File

@ -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", "Маған тек ақ-тізімделген IP қол жеткізе алады"), ("whitelist_tip", "Маған тек ақ-тізімделген IP қол жеткізе алады"),
("Login", "Кіру"), ("Login", "Кіру"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Шығу"), ("Logout", "Шығу"),
("Tags", "Тақтар"), ("Tags", "Тақтар"),
("Search ID", "ID Іздеу"), ("Search ID", "ID Іздеу"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Zawsze łącz pośrednio"), ("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"), ("whitelist_tip", "Zezwlaj na łączenie z tym komputerem tylko z adresów IP znajdujących się na białej liście"),
("Login", "Zaloguj"), ("Login", "Zaloguj"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Wyloguj"), ("Logout", "Wyloguj"),
("Tags", "Tagi"), ("Tags", "Tagi"),
("Search ID", "Szukaj ID"), ("Search ID", "Szukaj ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Sempre conectar via relay"), ("Always connect via relay", "Sempre conectar via relay"),
("whitelist_tip", "Somente IPs na whitelist podem me acessar"), ("whitelist_tip", "Somente IPs na whitelist podem me acessar"),
("Login", "Login"), ("Login", "Login"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Sair"), ("Logout", "Sair"),
("Tags", "Tags"), ("Tags", "Tags"),
("Search ID", "Procurar ID"), ("Search ID", "Procurar ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Sempre conectar via relay"), ("Always connect via relay", "Sempre conectar via relay"),
("whitelist_tip", "Somente IPs confiáveis podem me acessar"), ("whitelist_tip", "Somente IPs confiáveis podem me acessar"),
("Login", "Login"), ("Login", "Login"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Sair"), ("Logout", "Sair"),
("Tags", "Tags"), ("Tags", "Tags"),
("Search ID", "Pesquisar ID"), ("Search ID", "Pesquisar ID"),

View File

@ -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", "Только IP-адреса из белого списка могут получить доступ ко мне"), ("whitelist_tip", "Только IP-адреса из белого списка могут получить доступ ко мне"),
("Login", "Войти"), ("Login", "Войти"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Выйти"), ("Logout", "Выйти"),
("Tags", "Метки"), ("Tags", "Метки"),
("Search ID", "Поиск по ID"), ("Search ID", "Поиск по ID"),

View File

@ -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"), ("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"), ("whitelist_tip", "Len vymenované IP adresy majú oprávnenie sa pripojiť k vzdialenej správe"),
("Login", "Prihlásenie"), ("Login", "Prihlásenie"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Odhlásenie"), ("Logout", "Odhlásenie"),
("Tags", "Štítky"), ("Tags", "Štítky"),
("Search ID", "Hľadať ID"), ("Search ID", "Hľadať ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Gjithmonë lidheni me transmetues"), ("Always connect via relay", "Gjithmonë lidheni me transmetues"),
("whitelist_tip", "Vetëm IP e listës së bardhë mund të më aksesoj."), ("whitelist_tip", "Vetëm IP e listës së bardhë mund të më aksesoj."),
("Login", "Hyrje"), ("Login", "Hyrje"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Dalje"), ("Logout", "Dalje"),
("Tags", "Tage"), ("Tags", "Tage"),
("Search ID", "Kerko ID"), ("Search ID", "Kerko ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Uvek se spoj preko posrednika"), ("Always connect via relay", "Uvek se spoj preko posrednika"),
("whitelist_tip", "Samo dozvoljene IP mi mogu pristupiti"), ("whitelist_tip", "Samo dozvoljene IP mi mogu pristupiti"),
("Login", "Prijava"), ("Login", "Prijava"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Odjava"), ("Logout", "Odjava"),
("Tags", "Oznake"), ("Tags", "Oznake"),
("Search ID", "Traži ID"), ("Search ID", "Traži ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Anslut alltid via relay"), ("Always connect via relay", "Anslut alltid via relay"),
("whitelist_tip", "Bara vitlistade IPs kan koppla upp till mig"), ("whitelist_tip", "Bara vitlistade IPs kan koppla upp till mig"),
("Login", "Logga in"), ("Login", "Logga in"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Logga ut"), ("Logout", "Logga ut"),
("Tags", "Taggar"), ("Tags", "Taggar"),
("Search ID", "Sök ID"), ("Search ID", "Sök ID"),

View File

@ -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", ""), ("whitelist_tip", ""),
("Login", ""), ("Login", ""),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", ""), ("Logout", ""),
("Tags", ""), ("Tags", ""),
("Search ID", ""), ("Search ID", ""),

View File

@ -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", "อนุญาตเฉพาะการเชื่อมต่อจาก IP ที่ไวท์ลิสต์"), ("whitelist_tip", "อนุญาตเฉพาะการเชื่อมต่อจาก IP ที่ไวท์ลิสต์"),
("Login", "เข้าสู่ระบบ"), ("Login", "เข้าสู่ระบบ"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "ออกจากระบบ"), ("Logout", "ออกจากระบบ"),
("Tags", "แท็ก"), ("Tags", "แท็ก"),
("Search ID", "ค้นหา ID"), ("Search ID", "ค้นหา ID"),

View File

@ -210,7 +210,11 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
("Always connect via relay", "Always connect via relay"), ("Always connect via relay", "Always connect via relay"),
("whitelist_tip", "Bu masaüstüne yalnızca yetkili IP adresleri bağlanabilir"), ("whitelist_tip", "Bu masaüstüne yalnızca yetkili IP adresleri bağlanabilir"),
("Login", "Giriş yap"), ("Login", "Giriş yap"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Çıkış yap"), ("Logout", "Çıkış yap"),
("Tags", "Etiketler"), ("Tags", "Etiketler"),
("Search ID", "ID Arama"), ("Search ID", "ID Arama"),

View File

@ -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", "只有白名單中的 IP 可以存取"), ("whitelist_tip", "只有白名單中的 IP 可以存取"),
("Login", "登入"), ("Login", "登入"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "登出"), ("Logout", "登出"),
("Tags", "標籤"), ("Tags", "標籤"),
("Search ID", "搜尋 ID"), ("Search ID", "搜尋 ID"),

View File

@ -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", "Тільки IP-адреси з білого списку можуть отримати доступ до мене"), ("whitelist_tip", "Тільки IP-адреси з білого списку можуть отримати доступ до мене"),
("Login", "Увійти"), ("Login", "Увійти"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Вийти"), ("Logout", "Вийти"),
("Tags", "Ключові слова"), ("Tags", "Ключові слова"),
("Search ID", "Пошук за ID"), ("Search ID", "Пошук за ID"),

View File

@ -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"), ("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"), ("whitelist_tip", "Chỉ có những IP đựoc cho phép mới có thể truy cập"),
("Login", "Đăng nhập"), ("Login", "Đăng nhập"),
("Verify", ""),
("Remember me", ""), ("Remember me", ""),
("Trust this device", ""),
("Verification code", ""),
("verification_tip", ""),
("Logout", "Đăng xuất"), ("Logout", "Đăng xuất"),
("Tags", "Tags"), ("Tags", "Tags"),
("Search ID", "Tìm ID"), ("Search ID", "Tìm ID"),