diff --git a/flutter/lib/common/widgets/login.dart b/flutter/lib/common/widgets/login.dart index 8092dfed6..f760132af 100644 --- a/flutter/lib/common/widgets/login.dart +++ b/flutter/lib/common/widgets/login.dart @@ -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 loginDialog() async { final autoLogin = true.obs; final RxString curOP = ''.obs; - return gFFI.dialogManager.show((setState, close) { - cancel() { + final res = await gFFI.dialogManager.show((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 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 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 verificationCodeDialog(UserPayload? user) async { + var autoLogin = true; + var isInProgress = false; + String? errorText; + + final code = TextEditingController(); + + final res = await gFFI.dialogManager.show((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; } diff --git a/flutter/lib/models/user_model.dart b/flutter/lib/models/user_model.dart index 79a9778b0..b0eebee53 100644 --- a/flutter/lib/models/user_model.dart +++ b/flutter/lib/models/user_model.dart @@ -127,7 +127,6 @@ class UserModel { await _parseAndUpdateUser(loginResponse.user!); } - await _updateOtherModels(); return loginResponse; } } diff --git a/src/lang/ca.rs b/src/lang/ca.rs index ffc5396fd..82052517a 100644 --- a/src/lang/ca.rs +++ b/src/lang/ca.rs @@ -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"), diff --git a/src/lang/cn.rs b/src/lang/cn.rs index 6a4feeeec..c8a6e5f57 100644 --- a/src/lang/cn.rs +++ b/src/lang/cn.rs @@ -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", "开启录屏权限将自动开启服务,允许其他设备向此设备请求建立连接。"), diff --git a/src/lang/cs.rs b/src/lang/cs.rs index 17e2ea68b..08aa1fd58 100644 --- a/src/lang/cs.rs +++ b/src/lang/cs.rs @@ -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"), diff --git a/src/lang/da.rs b/src/lang/da.rs index c0db3eda0..8f1f8a1ff 100644 --- a/src/lang/da.rs +++ b/src/lang/da.rs @@ -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"), diff --git a/src/lang/de.rs b/src/lang/de.rs index 28b0a51d3..e76f6b315 100644 --- a/src/lang/de.rs +++ b/src/lang/de.rs @@ -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"), diff --git a/src/lang/en.rs b/src/lang/en.rs index f351b575d..e9754f296 100644 --- a/src/lang/en.rs +++ b/src/lang/en.rs @@ -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(); } diff --git a/src/lang/eo.rs b/src/lang/eo.rs index e92d7ab31..38d3c2588 100644 --- a/src/lang/eo.rs +++ b/src/lang/eo.rs @@ -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"), diff --git a/src/lang/es.rs b/src/lang/es.rs index 539627cb9..4932cf6e2 100644 --- a/src/lang/es.rs +++ b/src/lang/es.rs @@ -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"), diff --git a/src/lang/fa.rs b/src/lang/fa.rs index 9ca854ecb..f4c025030 100644 --- a/src/lang/fa.rs +++ b/src/lang/fa.rs @@ -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", "جستجوی شناسه"), diff --git a/src/lang/fr.rs b/src/lang/fr.rs index 84cd9c4fa..69f977c94 100644 --- a/src/lang/fr.rs +++ b/src/lang/fr.rs @@ -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"), diff --git a/src/lang/gr.rs b/src/lang/gr.rs index f1ee5be08..9ea7cbdc0 100644 --- a/src/lang/gr.rs +++ b/src/lang/gr.rs @@ -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"), diff --git a/src/lang/hu.rs b/src/lang/hu.rs index 92b7c1ba1..1db137c43 100644 --- a/src/lang/hu.rs +++ b/src/lang/hu.rs @@ -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..."), diff --git a/src/lang/id.rs b/src/lang/id.rs index 2e96785c5..baf3ab144 100644 --- a/src/lang/id.rs +++ b/src/lang/id.rs @@ -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"), diff --git a/src/lang/it.rs b/src/lang/it.rs index d54887aa4..1385a286d 100644 --- a/src/lang/it.rs +++ b/src/lang/it.rs @@ -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"), diff --git a/src/lang/ja.rs b/src/lang/ja.rs index 2f3d0b54f..6930aae13 100644 --- a/src/lang/ja.rs +++ b/src/lang/ja.rs @@ -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を検索"), diff --git a/src/lang/ko.rs b/src/lang/ko.rs index 21e75baef..fee465786 100644 --- a/src/lang/ko.rs +++ b/src/lang/ko.rs @@ -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 검색"), diff --git a/src/lang/kz.rs b/src/lang/kz.rs index 69caf1b6b..3ce1d6db3 100644 --- a/src/lang/kz.rs +++ b/src/lang/kz.rs @@ -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 Іздеу"), diff --git a/src/lang/pl.rs b/src/lang/pl.rs index 24674e197..ead9e625f 100644 --- a/src/lang/pl.rs +++ b/src/lang/pl.rs @@ -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"), diff --git a/src/lang/pt_PT.rs b/src/lang/pt_PT.rs index dcf48eca4..01248e7b9 100644 --- a/src/lang/pt_PT.rs +++ b/src/lang/pt_PT.rs @@ -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"), diff --git a/src/lang/ptbr.rs b/src/lang/ptbr.rs index 3ffee4f93..b155a08fd 100644 --- a/src/lang/ptbr.rs +++ b/src/lang/ptbr.rs @@ -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"), diff --git a/src/lang/ru.rs b/src/lang/ru.rs index 8dd6bfbca..e055acaa2 100644 --- a/src/lang/ru.rs +++ b/src/lang/ru.rs @@ -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"), diff --git a/src/lang/sk.rs b/src/lang/sk.rs index f67eb60cc..51f58d9b2 100644 --- a/src/lang/sk.rs +++ b/src/lang/sk.rs @@ -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"), diff --git a/src/lang/sq.rs b/src/lang/sq.rs index 222f16a8e..e3952b474 100644 --- a/src/lang/sq.rs +++ b/src/lang/sq.rs @@ -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"), diff --git a/src/lang/sr.rs b/src/lang/sr.rs index 660df7e9e..5fd822c27 100644 --- a/src/lang/sr.rs +++ b/src/lang/sr.rs @@ -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"), diff --git a/src/lang/sv.rs b/src/lang/sv.rs index 870d92569..a9ed367ce 100644 --- a/src/lang/sv.rs +++ b/src/lang/sv.rs @@ -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"), diff --git a/src/lang/template.rs b/src/lang/template.rs index 3824bf60d..e8d0c6c02 100644 --- a/src/lang/template.rs +++ b/src/lang/template.rs @@ -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", ""), diff --git a/src/lang/th.rs b/src/lang/th.rs index b2ca698e1..0c1a93bb5 100644 --- a/src/lang/th.rs +++ b/src/lang/th.rs @@ -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"), diff --git a/src/lang/tr.rs b/src/lang/tr.rs index be95d2b7a..ec0c65a62 100644 --- a/src/lang/tr.rs +++ b/src/lang/tr.rs @@ -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"), diff --git a/src/lang/tw.rs b/src/lang/tw.rs index 96e806d06..d5fa6ebf0 100644 --- a/src/lang/tw.rs +++ b/src/lang/tw.rs @@ -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"), diff --git a/src/lang/ua.rs b/src/lang/ua.rs index 53fa879f5..1aeac5263 100644 --- a/src/lang/ua.rs +++ b/src/lang/ua.rs @@ -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"), diff --git a/src/lang/vn.rs b/src/lang/vn.rs index bb638c072..a5d99a718 100644 --- a/src/lang/vn.rs +++ b/src/lang/vn.rs @@ -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"),