mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-11-03 16:32:22 +00:00
Fix/windows install directory confirmation (#16783)
* fix(windows): warn before removing installation directory Signed-off-by: fufesou <linlong1266@gmail.com> * fix(windows): show inline installation directory warning Signed-off-by: fufesou <linlong1266@gmail.com> * refactor(windows): simplify installation directory warning Key the warning widget by its path and remove the optional widget test suite. Signed-off-by: fufesou <linlong1266@gmail.com> * fix(windows): limit installation warnings to the selected directory Share install-directory-not-empty-tip between inline and confirmation warnings, and remove the separate previous-installation warning. Signed-off-by: fufesou <linlong1266@gmail.com> * fix(windows): skip directory warnings when reinstalling in place Signed-off-by: fufesou <linlong1266@gmail.com> --------- Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
1 parent
fa611556f8
commit
82301f1776
56 files changed
+201
-21
No files matched your search
@@ -3,6 +3,7 @@ import 'dart:convert';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/desktop/widgets/install_directory_confirmation.dart';
|
||||
import 'package:flutter_hbb/desktop/widgets/tabbar_widget.dart';
|
||||
import 'package:flutter_hbb/models/platform_model.dart';
|
||||
import 'package:flutter_hbb/models/state_model.dart';
|
||||
@@ -164,27 +165,46 @@ class _InstallPageBodyState extends State<_InstallPageBody>
|
||||
children: [
|
||||
Text(translate('Installation'),
|
||||
style: Theme.of(context).textTheme.headlineMedium),
|
||||
Row(
|
||||
Table(
|
||||
columnWidths: const {
|
||||
0: IntrinsicColumnWidth(),
|
||||
2: IntrinsicColumnWidth(),
|
||||
},
|
||||
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
|
||||
children: [
|
||||
Text('${translate('Installation Path')}:')
|
||||
.marginOnly(right: 10),
|
||||
Expanded(
|
||||
child: TextField(
|
||||
controller: controller,
|
||||
readOnly: true,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.all(0.75 * em),
|
||||
TableRow(
|
||||
children: [
|
||||
Text('${translate('Installation Path')}:')
|
||||
.marginOnly(right: 10),
|
||||
TextField(
|
||||
controller: controller,
|
||||
readOnly: true,
|
||||
decoration: InputDecoration(
|
||||
contentPadding: EdgeInsets.all(0.75 * em),
|
||||
),
|
||||
).workaroundFreezeLinuxMint().marginOnly(right: 10),
|
||||
Obx(
|
||||
() => OutlinedButton.icon(
|
||||
icon: Icon(Icons.folder_outlined, size: 16),
|
||||
onPressed:
|
||||
btnEnabled.value ? selectInstallPath : null,
|
||||
style: buttonStyle,
|
||||
label: Text(translate('Change Path')),
|
||||
),
|
||||
),
|
||||
).workaroundFreezeLinuxMint().marginOnly(right: 10),
|
||||
],
|
||||
),
|
||||
TableRow(
|
||||
children: [
|
||||
const SizedBox.shrink(),
|
||||
ValueListenableBuilder<TextEditingValue>(
|
||||
valueListenable: controller,
|
||||
builder: (context, value, child) =>
|
||||
InstallDirectoryWarning(directoryPath: value.text),
|
||||
).marginOnly(right: 10),
|
||||
const SizedBox.shrink(),
|
||||
],
|
||||
),
|
||||
Obx(
|
||||
() => OutlinedButton.icon(
|
||||
icon: Icon(Icons.folder_outlined, size: 16),
|
||||
onPressed: btnEnabled.value ? selectInstallPath : null,
|
||||
style: buttonStyle,
|
||||
label: Text(translate('Change Path')),
|
||||
),
|
||||
)
|
||||
],
|
||||
).marginSymmetric(vertical: 2 * em),
|
||||
Option(startmenu, label: 'Create start menu shortcuts')
|
||||
@@ -277,7 +297,9 @@ class _InstallPageBodyState extends State<_InstallPageBody>
|
||||
));
|
||||
}
|
||||
|
||||
void install() {
|
||||
Future<void> install() async {
|
||||
if (!btnEnabled.value) return;
|
||||
final installPath = controller.text;
|
||||
do_install() {
|
||||
btnEnabled.value = false;
|
||||
cancelEnabled.value = false;
|
||||
@@ -286,10 +308,18 @@ class _InstallPageBodyState extends State<_InstallPageBody>
|
||||
if (startmenu.value) args += ' startmenu';
|
||||
if (desktopicon.value) args += ' desktopicon';
|
||||
if (printer.value) args += ' printer';
|
||||
bind.installInstallMe(options: args, path: controller.text);
|
||||
bind.installInstallMe(options: args, path: installPath);
|
||||
}
|
||||
|
||||
do_install();
|
||||
btnEnabled.value = false;
|
||||
try {
|
||||
final confirmed =
|
||||
await confirmInstallDirectory(this.context, targetPath: installPath);
|
||||
if (!mounted || !confirmed) return;
|
||||
do_install();
|
||||
} finally {
|
||||
if (mounted && !showProgress.value) btnEnabled.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
void selectInstallPath() async {
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/models/platform_model.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
const _nonemptyDirectoryWarning = 'install-directory-not-empty-tip';
|
||||
|
||||
Future<bool> confirmInstallDirectory(BuildContext context,
|
||||
{required String targetPath}) async {
|
||||
try {
|
||||
final needsWarning = await _needsDirectoryWarning(targetPath);
|
||||
if (!context.mounted) return false;
|
||||
if (!needsWarning) return true;
|
||||
return await _showDirectoryDialog(
|
||||
context, '${translate(_nonemptyDirectoryWarning)}\n$targetPath');
|
||||
} on FileSystemException catch (error) {
|
||||
debugPrint('Failed to inspect installation directory: $error');
|
||||
if (context.mounted) {
|
||||
await _showDirectoryDialog(context, error.toString(), isError: true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _needsDirectoryWarning(String directoryPath) async {
|
||||
if (bind.mainIsInstalled() &&
|
||||
path.equals(directoryPath, bind.installInstallPath())) {
|
||||
return false;
|
||||
}
|
||||
final directory = Directory(directoryPath);
|
||||
return await directory.exists() &&
|
||||
!await directory.list(followLinks: false).isEmpty;
|
||||
}
|
||||
|
||||
Future<bool> _showDirectoryDialog(BuildContext context, String message,
|
||||
{bool isError = false}) async {
|
||||
final confirmed = await showDialog<bool>(
|
||||
context: context,
|
||||
builder: (dialogContext) => AlertDialog(
|
||||
scrollable: true,
|
||||
title: Text(translate(isError ? 'Error' : 'Warning')),
|
||||
content: SelectableText(message),
|
||||
actions: [
|
||||
dialogButton(isError ? 'OK' : 'Cancel',
|
||||
isOutline: !isError,
|
||||
onPressed: () => Navigator.of(dialogContext).pop(false)),
|
||||
if (!isError)
|
||||
dialogButton('Continue',
|
||||
onPressed: () => Navigator.of(dialogContext).pop(true)),
|
||||
],
|
||||
),
|
||||
);
|
||||
return confirmed == true;
|
||||
}
|
||||
|
||||
class InstallDirectoryWarning extends StatefulWidget {
|
||||
InstallDirectoryWarning({required this.directoryPath})
|
||||
: super(key: ValueKey(directoryPath));
|
||||
|
||||
final String directoryPath;
|
||||
|
||||
@override
|
||||
State<InstallDirectoryWarning> createState() =>
|
||||
_InstallDirectoryWarningState();
|
||||
}
|
||||
|
||||
class _InstallDirectoryWarningState extends State<InstallDirectoryWarning> {
|
||||
static const _spacing = 8.0;
|
||||
late final Future<bool> _needsWarning =
|
||||
_needsDirectoryWarning(widget.directoryPath);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return FutureBuilder<bool>(
|
||||
future: _needsWarning,
|
||||
builder: (context, snapshot) {
|
||||
if (!snapshot.hasError && snapshot.data != true) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: _spacing),
|
||||
child: Text(
|
||||
snapshot.hasError
|
||||
? '${translate('Error')}: ${snapshot.error}'
|
||||
: translate(_nonemptyDirectoryWarning),
|
||||
style: TextStyle(
|
||||
color: snapshot.hasError
|
||||
? Theme.of(context).colorScheme.error
|
||||
: Colors.orange.shade700)),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "الرجاء اختيار Android → media."),
|
||||
("Trust duration (days)", "مدة الثقة (بالأيام)"),
|
||||
("Renew trust", "تجديد الثقة"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Zəhmət olmasa, Android → media seçin."),
|
||||
("Trust duration (days)", "Etibar müddəti (gün)"),
|
||||
("Renew trust", "Etibarı yenilə"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Выберыце Android → media."),
|
||||
("Trust duration (days)", "Тэрмін даверу (у днях)"),
|
||||
("Renew trust", "Падоўжыць давер"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Моля, изберете Android → media."),
|
||||
("Trust duration (days)", "Срок на доверие (дни)"),
|
||||
("Renew trust", "Подновяване на доверието"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Seleccioneu Android → media."),
|
||||
("Trust duration (days)", "Durada de la confiança (dies)"),
|
||||
("Renew trust", "Renova la confiança"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "请选择 Android → media。"),
|
||||
("Trust duration (days)", "信任有效期(天)"),
|
||||
("Renew trust", "延长信任有效期"),
|
||||
("install-directory-not-empty-tip", "所选文件夹不为空。安装可能删除现有数据。建议选择其他文件夹。"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Vyberte prosím Android → media."),
|
||||
("Trust duration (days)", "Doba důvěry (dny)"),
|
||||
("Renew trust", "Obnovit důvěru"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Vælg Android → media."),
|
||||
("Trust duration (days)", "Tillidsperiode (dage)"),
|
||||
("Renew trust", "Forny tillid"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Bitte wählen Sie Android → media."),
|
||||
("Trust duration (days)", "Vertrauensdauer (Tage)"),
|
||||
("Renew trust", "Vertrauen erneuern"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Παρακαλώ επιλέξτε Android → media."),
|
||||
("Trust duration (days)", "Διάρκεια εμπιστοσύνης (ημέρες)"),
|
||||
("Renew trust", "Ανανέωση εμπιστοσύνης"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -291,5 +291,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("api_server_connection_tip", "Your custom server uses unencrypted HTTP. Contact your administrator to enable HTTPS."),
|
||||
("api_server_empty_tip", "With API Server empty, your custom server defaults to HTTP. Contact your administrator to enable HTTPS."),
|
||||
("android-logs-folder-tip", "Choose Android → media to store log files."),
|
||||
("install-directory-not-empty-tip", "The selected folder is not empty. Installation may delete existing data. Consider choosing a different folder."),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Bonvolu elekti Android → media."),
|
||||
("Trust duration (days)", "Daŭro de fido (tagoj)"),
|
||||
("Renew trust", "Renovigi fidon"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Seleccione Android → media."),
|
||||
("Trust duration (days)", "Duración de la confianza (días)"),
|
||||
("Renew trust", "Renovar confianza"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Palun vali Android → media."),
|
||||
("Trust duration (days)", "Usalduse kestus (päevades)"),
|
||||
("Renew trust", "Uuenda usaldust"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Hautatu Android → media."),
|
||||
("Trust duration (days)", "Konfiantzaren iraupena (egunak)"),
|
||||
("Renew trust", "Berritu konfiantza"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "لطفاً Android → media را انتخاب کنید."),
|
||||
("Trust duration (days)", "مدت اعتماد (روز)"),
|
||||
("Renew trust", "تمدید اعتماد"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Valitse Android → media."),
|
||||
("Trust duration (days)", "Luottamuksen kesto (päivää)"),
|
||||
("Renew trust", "Jatka luottamusta"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Veuillez sélectionner Android → media."),
|
||||
("Trust duration (days)", "Durée de confiance (jours)"),
|
||||
("Renew trust", "Renouveler la confiance"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "გთხოვთ, აირჩიოთ Android → media."),
|
||||
("Trust duration (days)", "ნდობის ხანგრძლივობა (დღე)"),
|
||||
("Renew trust", "ნდობის განახლება"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Selecciona Android → media."),
|
||||
("Trust duration (days)", "Duración da confianza (días)"),
|
||||
("Renew trust", "Renovar a confianza"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "કૃપા કરીને Android → media પસંદ કરો."),
|
||||
("Trust duration (days)", "વિશ્વાસ અવધિ (દિવસો)"),
|
||||
("Renew trust", "વિશ્વાસ નવીકરણ કરો"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "אנא בחר Android → media."),
|
||||
("Trust duration (days)", "משך האמון (ימים)"),
|
||||
("Renew trust", "חידוש אמון"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "कृपया Android → media चुनें।"),
|
||||
("Trust duration (days)", "विश्वास अवधि (दिन)"),
|
||||
("Renew trust", "विश्वास नवीनीकृत करें"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Odaberite Android → media."),
|
||||
("Trust duration (days)", "Trajanje povjerenja (dani)"),
|
||||
("Renew trust", "Obnovi povjerenje"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Válassza az Android → media mappát."),
|
||||
("Trust duration (days)", "Megbízhatóság időtartama (nap)"),
|
||||
("Renew trust", "Megbízhatóság megújítása"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Silakan pilih Android → media."),
|
||||
("Trust duration (days)", "Durasi kepercayaan (hari)"),
|
||||
("Renew trust", "Perbarui kepercayaan"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Seleziona Android → media."),
|
||||
("Trust duration (days)", "Durata attendibilità (giorni)"),
|
||||
("Renew trust", "Rinnova attendibilità"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Android → media を選択してください。"),
|
||||
("Trust duration (days)", "信頼期間 (日)"),
|
||||
("Renew trust", "信頼を更新"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Android → media를 선택해 주시기 바랍니다."),
|
||||
("Trust duration (days)", "신뢰 유지 기간 (일)"),
|
||||
("Renew trust", "신뢰 갱신"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Android → media таңдаңыз."),
|
||||
("Trust duration (days)", "Сенім мерзімі (күн)"),
|
||||
("Renew trust", "Сенімді жаңарту"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Pasirinkite Android → media."),
|
||||
("Trust duration (days)", "Pasitikėjimo trukmė (dienomis)"),
|
||||
("Renew trust", "Atnaujinti pasitikėjimą"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Lūdzu, atlasiet Android → media."),
|
||||
("Trust duration (days)", "Uzticēšanās ilgums (dienas)"),
|
||||
("Renew trust", "Atjaunot uzticēšanos"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "ദയവായി Android → media തിരഞ്ഞെടുക്കുക."),
|
||||
("Trust duration (days)", "വിശ്വാസ കാലാവധി (ദിവസം)"),
|
||||
("Renew trust", "വിശ്വാസം പുതുക്കുക"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Velg Android → media."),
|
||||
("Trust duration (days)", "Klareringsperiode (dager)"),
|
||||
("Renew trust", "Forny klarering"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Selecteer Android → media."),
|
||||
("Trust duration (days)", "Vertrouwensperiode (dagen)"),
|
||||
("Renew trust", "Vertrouwen hernieuwen"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Wybierz Android → media."),
|
||||
("Trust duration (days)", "Okres zaufania (dni)"),
|
||||
("Renew trust", "Odnów zaufanie"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Selecione Android → media."),
|
||||
("Trust duration (days)", "Duração da confiança (dias)"),
|
||||
("Renew trust", "Renovar confiança"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Por favor selecione Android → media."),
|
||||
("Trust duration (days)", "Duração da confiança (dias)"),
|
||||
("Renew trust", "Renovar confiança"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Selectează Android → media."),
|
||||
("Trust duration (days)", "Durata încrederii (zile)"),
|
||||
("Renew trust", "Reînnoiește încrederea"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Выберите Android → media."),
|
||||
("Trust duration (days)", "Срок доверия (в днях)"),
|
||||
("Renew trust", "Продлить доверие"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Seletziona Android → media."),
|
||||
("Trust duration (days)", "Durada de sa fidùtzia (dies)"),
|
||||
("Renew trust", "Annoa sa fidùtzia"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Vyberte Android → media."),
|
||||
("Trust duration (days)", "Doba dôvery (dni)"),
|
||||
("Renew trust", "Obnoviť dôveru"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Izberite Android → media."),
|
||||
("Trust duration (days)", "Trajanje zaupanja (dni)"),
|
||||
("Renew trust", "Obnovi zaupanje"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Ju lutemi zgjidhni Android → media."),
|
||||
("Trust duration (days)", "Kohëzgjatja e besimit (ditë)"),
|
||||
("Renew trust", "Rinovo besimin"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Izaberite Android → media."),
|
||||
("Trust duration (days)", "Trajanje poverenja (dani)"),
|
||||
("Renew trust", "Obnovi poverenje"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Välj Android → media."),
|
||||
("Trust duration (days)", "Förtroendeperiod (dagar)"),
|
||||
("Renew trust", "Förnya förtroende"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Android → media என்பதைத் தேர்ந்தெடுக்கவும்."),
|
||||
("Trust duration (days)", "நம்பிக்கைக் காலம் (நாட்கள்)"),
|
||||
("Renew trust", "நம்பிக்கையைப் புதுப்பி"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", ""),
|
||||
("Trust duration (days)", ""),
|
||||
("Renew trust", ""),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "กรุณาเลือก Android → media"),
|
||||
("Trust duration (days)", "ระยะเวลาการเชื่อถือ (วัน)"),
|
||||
("Renew trust", "ต่ออายุการเชื่อถือ"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Lütfen Android → media konumunu seçin."),
|
||||
("Trust duration (days)", "Güven süresi (gün)"),
|
||||
("Renew trust", "Güveni yenile"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "請選擇 Android → media。"),
|
||||
("Trust duration (days)", "信任有效期(天)"),
|
||||
("Renew trust", "延長信任期限"),
|
||||
("install-directory-not-empty-tip", "所選資料夾不是空的。安裝可能刪除現有資料。建議選擇其他資料夾。"),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Будь ласка, виберіть Android → media."),
|
||||
("Trust duration (days)", "Термін довіри (у днях)"),
|
||||
("Renew trust", "Подовжити довіру"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "براہ کرم Android → media منتخب کریں۔"),
|
||||
("Trust duration (days)", "اعتماد کی مدت (دن)"),
|
||||
("Renew trust", "اعتماد کی تجدید کریں"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
@@ -823,5 +823,6 @@ pub static ref T: std::collections::HashMap<&'static str, &'static str> =
|
||||
("Please select Android → media.", "Vui lòng chọn Android → media."),
|
||||
("Trust duration (days)", "Thời hạn tin cậy (ngày)"),
|
||||
("Renew trust", "Gia hạn tin cậy"),
|
||||
("install-directory-not-empty-tip", ""),
|
||||
].iter().cloned().collect();
|
||||
}
|
||||
Reference in new issue
Block a user