diff --git a/ios/Podfile.lock b/ios/Podfile.lock index faa97a545..5c438224d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -106,4 +106,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: ec6ef69056f066e8b21a3391082f23b5ad2d37f8 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 5337c21d0..8956ce4f3 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -682,7 +682,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -818,7 +818,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -846,7 +846,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; @@ -880,7 +880,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; @@ -919,7 +919,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -955,7 +955,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.StatusWidget; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -990,7 +990,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; @@ -1031,7 +1031,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; @@ -1069,7 +1069,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox.WatchEnd; PRODUCT_NAME = ServerBox; diff --git a/l10n.yaml b/l10n.yaml index cffe1be9e..5caf74335 100644 --- a/l10n.yaml +++ b/l10n.yaml @@ -1,4 +1,6 @@ arb-dir: lib/l10n template-arb-file: app_en.arb output-localization-file: l10n.dart +output-dir: lib/generated/l10n +synthetic-package: false untranslated-messages-file: untranlated.json \ No newline at end of file diff --git a/lib/app.dart b/lib/app.dart index 42503d815..2db5f531d 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,12 +1,13 @@ import 'package:dynamic_color/dynamic_color.dart'; import 'package:fl_lib/fl_lib.dart'; -import 'package:fl_lib/l10n/gen_l10n/lib_l10n.dart'; +import 'package:fl_lib/generated/l10n/lib_l10n.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; + import 'package:server_box/core/extension/context/locale.dart'; import 'package:server_box/data/res/build_data.dart'; import 'package:server_box/data/res/rebuild.dart'; import 'package:server_box/data/res/store.dart'; +import 'package:server_box/generated/l10n/l10n.dart'; import 'package:server_box/view/page/home/home.dart'; import 'package:icons_plus/icons_plus.dart'; diff --git a/lib/core/extension/context/locale.dart b/lib/core/extension/context/locale.dart index c3cac2ee6..89115f82e 100644 --- a/lib/core/extension/context/locale.dart +++ b/lib/core/extension/context/locale.dart @@ -1,4 +1,4 @@ -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:flutter_gen/gen_l10n/l10n_en.dart'; +import 'package:server_box/generated/l10n/l10n.dart'; +import 'package:server_box/generated/l10n/l10n_en.dart'; AppLocalizations l10n = AppLocalizationsEn(); diff --git a/lib/core/sync.dart b/lib/core/sync.dart index 67aa26b0d..28d87408b 100644 --- a/lib/core/sync.dart +++ b/lib/core/sync.dart @@ -2,13 +2,19 @@ import 'dart:io'; import 'package:fl_lib/fl_lib.dart'; import 'package:server_box/data/model/app/backup.dart'; -import 'package:server_box/data/store/no_backup.dart'; const bakSync = BakSyncer._(); +final icloud = ICloud(containerId: 'iCloud.tech.lolli.serverbox'); + final class BakSyncer extends SyncIface { const BakSyncer._() : super(); + @override + void init() { + Webdav.shared.prefix = 'serverbox/'; + } + @override Future saveToFile() => Backup.backup(); @@ -19,21 +25,12 @@ final class BakSyncer extends SyncIface { } @override - Future get remoteStorage async { - if (isMacOS || isIOS) await icloud.init('iCloud.tech.lolli.serverbox'); - final settings = NoBackupStore.instance; - await webdav.init(WebdavInitArgs( - url: settings.webdavUrl.fetch(), - user: settings.webdavUser.fetch(), - pwd: settings.webdavPwd.fetch(), - prefix: 'serverbox/', - )); - - final icloudEnabled = settings.icloudSync.fetch(); + RemoteStorage? get remoteStorage { + final icloudEnabled = PrefProps.icloudSync.get(); if (icloudEnabled) return icloud; - final webdavEnabled = settings.webdavSync.fetch(); - if (webdavEnabled) return webdav; + final webdavEnabled = PrefProps.webdavSync.get(); + if (webdavEnabled) return Webdav.shared; return null; } diff --git a/lib/core/utils/server.dart b/lib/core/utils/server.dart index eda028662..943b67b0e 100644 --- a/lib/core/utils/server.dart +++ b/lib/core/utils/server.dart @@ -32,7 +32,7 @@ enum GenSSHClientStatus { } String getPrivateKey(String id) { - final pki = Stores.key.get(id); + final pki = Stores.key.fetchOne(id); if (pki == null) { throw SSHErr( type: SSHErrType.noPrivateKey, diff --git a/lib/data/model/app/backup.dart b/lib/data/model/app/backup.dart index 0707b5b93..cc87d234e 100644 --- a/lib/data/model/app/backup.dart +++ b/lib/data/model/app/backup.dart @@ -46,19 +46,24 @@ class Backup implements Mergeable { Map toJson() => _$BackupToJson(this); - Backup.loadFromStore() - : version = backupFormatVersion, - date = DateTime.now().toString().split('.').firstOrNull ?? '', - spis = Stores.server.fetch(), - snippets = Stores.snippet.fetch(), - keys = Stores.key.fetch(), - container = Stores.container.box.toJson(), - lastModTime = Stores.lastModTime, - history = Stores.history.box.toJson(), - settings = Stores.setting.box.toJson(); + static Future loadFromStore() async { + final lastModTime = Stores.lastModTime?.millisecondsSinceEpoch; + return Backup( + version: backupFormatVersion, + date: DateTime.now().toString().split('.').firstOrNull ?? '', + spis: Stores.server.fetch(), + snippets: Stores.snippet.fetch(), + keys: Stores.key.fetch(), + container: await Stores.container.getAllMap(), + lastModTime: lastModTime, + history: await Stores.history.getAllMap(), + settings: await Stores.setting.getAllMap(), + ); + } static Future backup([String? name]) async { - final result = _diyEncrypt(json.encode(Backup.loadFromStore().toJson())); + final bak = await Backup.loadFromStore(); + final result = _diyEncrypt(json.encode(bak.toJson())); final path = Paths.doc.joinPath(name ?? Miscs.bakFileName); await File(path).writeAsString(result); return path; @@ -66,7 +71,7 @@ class Backup implements Mergeable { @override Future merge({bool force = false}) async { - final curTime = Stores.lastModTime ?? 0; + final curTime = Stores.lastModTime?.millisecondsSinceEpoch ?? 0; final bakTime = lastModTime ?? 0; final shouldRestore = force || curTime < bakTime; if (!shouldRestore) { diff --git a/lib/data/model/sftp/browser_status.dart b/lib/data/model/sftp/browser_status.dart index 7c50803d5..75eb92ba9 100644 --- a/lib/data/model/sftp/browser_status.dart +++ b/lib/data/model/sftp/browser_status.dart @@ -36,7 +36,7 @@ class _AbsolutePath { _path = newPath; return; } - _path = _path.joinPath(newPath, seperator: _sep); + _path = _path.joinPath(newPath, separator: _sep); } bool undo() { diff --git a/lib/data/model/sftp/req.dart b/lib/data/model/sftp/req.dart index a27a8c358..edca44eb3 100644 --- a/lib/data/model/sftp/req.dart +++ b/lib/data/model/sftp/req.dart @@ -21,7 +21,7 @@ class SftpReq { } if (spi.jumpId != null) { jumpSpi = Stores.server.box.get(spi.jumpId); - jumpPrivateKey = Stores.key.get(jumpSpi?.keyId)?.key; + jumpPrivateKey = Stores.key.fetchOne(jumpSpi?.keyId)?.key; } } } diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index 3705df0b1..3c5daec3c 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -3,6 +3,6 @@ abstract class BuildData { static const String name = "ServerBox"; - static const int build = 1104; - static const int script = 58; + static const int build = 1110; + static const int script = 59; } diff --git a/lib/data/res/store.dart b/lib/data/res/store.dart index af36fa4f0..50571ec61 100644 --- a/lib/data/res/store.dart +++ b/lib/data/res/store.dart @@ -16,7 +16,7 @@ abstract final class Stores { static final history = HistoryStore.instance; /// All stores that need backup - static final List _allBackup = [ + static final List _allBackup = [ SettingStore.instance, ServerStore.instance, ContainerStore.instance, @@ -30,11 +30,16 @@ abstract final class Stores { await NoBackupStore.instance.init(); } - static int? get lastModTime { - int? lastModTime = 0; + static DateTime? get lastModTime { + DateTime? lastModTime; for (final store in _allBackup) { - final last = store.box.lastModified ?? 0; - if (last > (lastModTime ?? 0)) { + final last = store.lastUpdateTs; + if (last == null) { + continue; + } + if (lastModTime == null) { + lastModTime = last; + } else if (last.isAfter(lastModTime)) { lastModTime = last; } } diff --git a/lib/data/store/container.dart b/lib/data/store/container.dart index 8de8f7288..1817eb244 100644 --- a/lib/data/store/container.dart +++ b/lib/data/store/container.dart @@ -4,7 +4,7 @@ import 'package:server_box/data/res/store.dart'; const _keyConfig = 'providerConfig'; -class ContainerStore extends PersistentStore { +class ContainerStore extends HiveStore { ContainerStore._() : super('docker'); static final instance = ContainerStore._(); @@ -15,7 +15,7 @@ class ContainerStore extends PersistentStore { void put(String id, String host) { box.put(id, host); - box.updateLastModified(); + updateLastUpdateTs(); } ContainerType getType([String id = '']) { @@ -30,7 +30,7 @@ class ContainerStore extends PersistentStore { } ContainerType get defaultType { - if (Stores.setting.usePodman.fetch()) return ContainerType.podman; + if (Stores.setting.usePodman.get()) return ContainerType.podman; return ContainerType.docker; } @@ -40,6 +40,6 @@ class ContainerStore extends PersistentStore { } else { box.put(_keyConfig + id, type.toString()); } - box.updateLastModified(); + updateLastUpdateTs(); } } diff --git a/lib/data/store/history.dart b/lib/data/store/history.dart index cf9734661..1ce758aab 100644 --- a/lib/data/store/history.dart +++ b/lib/data/store/history.dart @@ -18,7 +18,6 @@ class _ListHistory { _history.remove(path); _history.insert(0, path); _box.put(_name, _history); - _box.updateLastModified(); } List get all => _history; @@ -39,13 +38,12 @@ class _MapHistory { void put(String id, String val) { _history[id] = val; _box.put(_name, _history); - _box.updateLastModified(); } String? fetch(String id) => _history[id]; } -class HistoryStore extends PersistentStore { +class HistoryStore extends HiveStore { HistoryStore._() : super('history'); static final instance = HistoryStore._(); @@ -58,5 +56,6 @@ class HistoryStore extends PersistentStore { late final sshCmds = _ListHistory(box: box, name: 'sshCmds'); /// Notify users that this app will write script to server to works properly - late final writeScriptTipShown = property('writeScriptTipShown', false); + late final writeScriptTipShown = + propertyDefault('writeScriptTipShown', false); } diff --git a/lib/data/store/no_backup.dart b/lib/data/store/no_backup.dart index c041d2658..480a61b20 100644 --- a/lib/data/store/no_backup.dart +++ b/lib/data/store/no_backup.dart @@ -1,49 +1,72 @@ +// ignore_for_file: non_constant_identifier_names + import 'package:fl_lib/fl_lib.dart'; -import 'package:server_box/data/res/build_data.dart'; import 'package:server_box/data/res/store.dart'; -final class NoBackupStore extends PersistentStore { +final class NoBackupStore extends HiveStore { NoBackupStore._() : super('no_backup'); static final instance = NoBackupStore._(); /// Only valid on iOS and macOS - late final icloudSync = property('icloudSync', false); + late final _icloudSync = propertyDefault('icloudSync', false); /// Webdav sync - late final webdavSync = property('webdavSync', false); - late final webdavUrl = property('webdavUrl', ''); - late final webdavUser = property('webdavUser', ''); - late final webdavPwd = property('webdavPwd', ''); + late final webdavSync = propertyDefault('webdavSync', false); + late final webdavUrl = propertyDefault('webdavUrl', ''); + late final webdavUser = propertyDefault('webdavUser', ''); + late final webdavPwd = propertyDefault('webdavPwd', ''); - void migrate() { - if (BuildData.build > 1076) return; + void migrate(int lastVer) { + if (lastVer > 1104) return; + // Settings store -> NoBackup store final settings = Stores.setting; final icloudSync_ = settings.box.get('icloudSync'); if (icloudSync_ is bool) { - icloudSync.put(icloudSync_); + _icloudSync.set(icloudSync_); settings.box.delete('icloudSync'); } final webdavSync_ = settings.box.get('webdavSync'); if (webdavSync_ is bool) { - webdavSync.put(webdavSync_); + webdavSync.set(webdavSync_); settings.box.delete('webdavSync'); } final webdavUrl_ = settings.box.get('webdavUrl'); if (webdavUrl_ is String) { - webdavUrl.put(webdavUrl_); + webdavUrl.set(webdavUrl_); settings.box.delete('webdavUrl'); } final webdavUser_ = settings.box.get('webdavUser'); if (webdavUser_ is String) { - webdavUser.put(webdavUser_); + webdavUser.set(webdavUser_); settings.box.delete('webdavUser'); } final webdavPwd_ = settings.box.get('webdavPwd'); if (webdavPwd_ is String) { - webdavPwd.put(webdavPwd_); + webdavPwd.set(webdavPwd_); settings.box.delete('webdavPwd'); } + + // NoBackup store -> Pref store + final icloudSync__ = _icloudSync.get(); + PrefProps.icloudSync.set(icloudSync__); + _icloudSync.remove(); + + final webdavSync__ = webdavSync.get(); + PrefProps.webdavSync.set(webdavSync__); + webdavSync.remove(); + + final webdavUrl__ = webdavUrl.get(); + PrefProps.webdavUrl.set(webdavUrl__); + webdavUrl.remove(); + + final webdavUser__ = webdavUser.get(); + PrefProps.webdavUser.set(webdavUser__); + webdavUser.remove(); + + final webdavPwd__ = webdavPwd.get(); + PrefProps.webdavPwd.set(webdavPwd__); + webdavPwd.remove(); } } diff --git a/lib/data/store/private_key.dart b/lib/data/store/private_key.dart index 4ef9ccc34..e71773918 100644 --- a/lib/data/store/private_key.dart +++ b/lib/data/store/private_key.dart @@ -2,14 +2,13 @@ import 'package:fl_lib/fl_lib.dart'; import 'package:server_box/data/model/server/private_key_info.dart'; -class PrivateKeyStore extends PersistentStore { +class PrivateKeyStore extends HiveStore { PrivateKeyStore._() : super('key'); static final instance = PrivateKeyStore._(); void put(PrivateKeyInfo info) { - box.put(info.id, info); - box.updateLastModified(); + set(info.id, info); } List fetch() { @@ -24,13 +23,12 @@ class PrivateKeyStore extends PersistentStore { return ps; } - PrivateKeyInfo? get(String? id) { + PrivateKeyInfo? fetchOne(String? id) { if (id == null) return null; return box.get(id); } void delete(PrivateKeyInfo s) { - box.delete(s.id); - box.updateLastModified(); + remove(s.id); } } diff --git a/lib/data/store/server.dart b/lib/data/store/server.dart index f4cf8ae86..e1f758abb 100644 --- a/lib/data/store/server.dart +++ b/lib/data/store/server.dart @@ -2,14 +2,15 @@ import 'package:fl_lib/fl_lib.dart'; import 'package:server_box/data/model/server/server_private_info.dart'; -class ServerStore extends PersistentStore { +class ServerStore extends HiveStore { ServerStore._() : super('server'); static final instance = ServerStore._(); void put(Spi info) { - box.put(info.id, info); - box.updateLastModified(); + // box.put(info.id, info); + // box.updateLastModified(); + set(info.id, info); } List fetch() { @@ -25,13 +26,11 @@ class ServerStore extends PersistentStore { } void delete(String id) { - box.delete(id); - box.updateLastModified(); + remove(id); } void deleteAll() { - box.clear(); - box.updateLastModified(); + clear(); } void update(Spi old, Spi newInfo) { diff --git a/lib/data/store/setting.dart b/lib/data/store/setting.dart index f7b85d27b..f9a5b9981 100644 --- a/lib/data/store/setting.dart +++ b/lib/data/store/setting.dart @@ -6,7 +6,7 @@ import 'package:server_box/data/model/ssh/virtual_key.dart'; import 'package:server_box/data/model/app/net_view.dart'; import 'package:server_box/data/res/default.dart'; -class SettingStore extends PersistentStore { +class SettingStore extends HiveStore { SettingStore._() : super('setting'); static final instance = SettingStore._(); @@ -18,19 +18,19 @@ class SettingStore extends PersistentStore { // item in the drawer of the home page) /// Discussion #146 - late final serverTabUseOldUI = property('serverTabUseOldUI', false); + late final serverTabUseOldUI = propertyDefault('serverTabUseOldUI', false); /// Time out for server connect and more... - late final timeout = property('timeOut', 5); + late final timeout = propertyDefault('timeOut', 5); /// Record history of SFTP path and etc. - late final recordHistory = property('recordHistory', true); + late final recordHistory = propertyDefault('recordHistory', true); /// Lanch page idx // late final launchPage = property('launchPage', Defaults.launchPageIdx); /// Disk view: amount / IO - late final serverTabPreferDiskAmount = property( + late final serverTabPreferDiskAmount = propertyDefault( 'serverTabPreferDiskAmount', false, ); @@ -40,59 +40,60 @@ class SettingStore extends PersistentStore { /// Bigger for bigger font size /// 1.0 means 100% /// Warning: This may cause some UI issues - late final textFactor = property('textFactor', 1.0); + late final textFactor = propertyDefault('textFactor', 1.0); /// The seed of color scheme - late final colorSeed = property('primaryColor', 4287106639); + late final colorSeed = propertyDefault('primaryColor', 4287106639); - late final serverStatusUpdateInterval = property( + late final serverStatusUpdateInterval = propertyDefault( 'serverStatusUpdateInterval', Defaults.updateInterval, ); // Max retry count when connect to server - late final maxRetryCount = property('maxRetryCount', 2); + late final maxRetryCount = propertyDefault('maxRetryCount', 2); // Night mode: 0 -> auto, 1 -> light, 2 -> dark, 3 -> AMOLED, 4 -> AUTO-AMOLED - late final themeMode = property('themeMode', 0); + late final themeMode = propertyDefault('themeMode', 0); // Font file path - late final fontPath = property('fontPath', ''); + late final fontPath = propertyDefault('fontPath', ''); // Backgroud running (Android) - late final bgRun = property('bgRun', isAndroid); + late final bgRun = propertyDefault('bgRun', isAndroid); // Server order - late final serverOrder = listProperty('serverOrder', []); + late final serverOrder = propertyDefault>('serverOrder', []); - late final snippetOrder = listProperty('snippetOrder', []); + late final snippetOrder = propertyDefault>('snippetOrder', []); // Server details page cards order - late final detailCardOrder = listProperty( + late final detailCardOrder = propertyDefault( 'detailCardOrder', ServerDetailCards.values.map((e) => e.name).toList(), ); // SSH term font size - late final termFontSize = property('termFontSize', 13.0); + late final termFontSize = propertyDefault('termFontSize', 13.0); // Locale - late final locale = property('locale', ''); + late final locale = propertyDefault('locale', ''); // SSH virtual key (ctrl | alt) auto turn off - late final sshVirtualKeyAutoOff = property('sshVirtualKeyAutoOff', true); + late final sshVirtualKeyAutoOff = + propertyDefault('sshVirtualKeyAutoOff', true); - late final editorFontSize = property('editorFontSize', 12.5); + late final editorFontSize = propertyDefault('editorFontSize', 12.5); // Editor theme - late final editorTheme = property('editorTheme', Defaults.editorTheme); + late final editorTheme = propertyDefault('editorTheme', Defaults.editorTheme); late final editorDarkTheme = - property('editorDarkTheme', Defaults.editorDarkTheme); + propertyDefault('editorDarkTheme', Defaults.editorDarkTheme); - late final fullScreen = property('fullScreen', false); + late final fullScreen = propertyDefault('fullScreen', false); - late final fullScreenJitter = property('fullScreenJitter', true); + late final fullScreenJitter = propertyDefault('fullScreenJitter', true); // late final fullScreenRotateQuarter = property( // 'fullScreenRotateQuarter', @@ -104,140 +105,145 @@ class SettingStore extends PersistentStore { // TextInputType.text.index, // ); - late final sshVirtKeys = listProperty( + late final sshVirtKeys = propertyDefault( 'sshVirtKeys', VirtKeyX.defaultOrder.map((e) => e.index).toList(), ); - late final netViewType = property('netViewType', NetViewType.speed); + late final netViewType = propertyDefault('netViewType', NetViewType.speed); // Only valid on iOS - late final autoUpdateHomeWidget = property('autoUpdateHomeWidget', isIOS); + late final autoUpdateHomeWidget = + propertyDefault('autoUpdateHomeWidget', isIOS); - late final autoCheckAppUpdate = property('autoCheckAppUpdate', true); + late final autoCheckAppUpdate = propertyDefault('autoCheckAppUpdate', true); /// Display server tab function buttons on the bottom of each server card if [true] /// /// Otherwise, display them on the top of server detail page - late final moveServerFuncs = property('moveOutServerTabFuncBtns', false); + late final moveServerFuncs = + propertyDefault('moveOutServerTabFuncBtns', false); /// Whether use `rm -r` to delete directory on SFTP - late final sftpRmrDir = property('sftpRmrDir', false); + late final sftpRmrDir = propertyDefault('sftpRmrDir', false); /// Whether use system's primary color as the app's primary color - late final useSystemPrimaryColor = property('useSystemPrimaryColor', false); + late final useSystemPrimaryColor = + propertyDefault('useSystemPrimaryColor', false); /// Only valid on iOS / Android / Windows - late final useBioAuth = property('useBioAuth', false); + late final useBioAuth = propertyDefault('useBioAuth', false); /// The performance of highlight is bad - late final editorHighlight = property('editorHighlight', true); + late final editorHighlight = propertyDefault('editorHighlight', true); /// Open SFTP with last viewed path - late final sftpOpenLastPath = property('sftpOpenLastPath', true); + late final sftpOpenLastPath = propertyDefault('sftpOpenLastPath', true); /// Show folders first in SFTP file browser - late final sftpShowFoldersFirst = property('sftpShowFoldersFirst', true); + late final sftpShowFoldersFirst = + propertyDefault('sftpShowFoldersFirst', true); /// Show tip of suspend - late final showSuspendTip = property('showSuspendTip', true); + late final showSuspendTip = propertyDefault('showSuspendTip', true); /// Whether collapse UI items by default - late final collapseUIDefault = property('collapseUIDefault', true); + late final collapseUIDefault = propertyDefault('collapseUIDefault', true); - late final serverFuncBtns = listProperty( + late final serverFuncBtns = propertyDefault( 'serverBtns', ServerFuncBtn.defaultIdxs, ); /// Docker is more popular than podman, set to `false` to use docker - late final usePodman = property('usePodman', false); + late final usePodman = propertyDefault('usePodman', false); /// Try to use `sudo` to run docker command - late final containerTrySudo = property('containerTrySudo', true); + late final containerTrySudo = propertyDefault('containerTrySudo', true); /// Keep previous server status when err occurs - late final keepStatusWhenErr = property('keepStatusWhenErr', false); + late final keepStatusWhenErr = propertyDefault('keepStatusWhenErr', false); /// Parse container stat - late final containerParseStat = property('containerParseStat', true); + late final containerParseStat = propertyDefault('containerParseStat', true); /// Auto refresh container status - late final contaienrAutoRefresh = property('contaienrAutoRefresh', true); + late final contaienrAutoRefresh = + propertyDefault('contaienrAutoRefresh', true); /// Use double column servers page on Desktop - late final doubleColumnServersPage = property( + late final doubleColumnServersPage = propertyDefault( 'doubleColumnServersPage', true, ); /// Ignore local network device (eg: br-xxx, ovs-system...) /// when building traffic view on server tab - //late final ignoreLocalNet = property('ignoreLocalNet', true); + //late final ignoreLocalNet = propertyDefault('ignoreLocalNet', true); /// Remerber pwd in memory /// Used for [DialogX.showPwdDialog] - late final rememberPwdInMem = property('rememberPwdInMem', true); + late final rememberPwdInMem = propertyDefault('rememberPwdInMem', true); /// SSH Term Theme /// 0: follow app theme, 1: light, 2: dark - late final termTheme = property('termTheme', 0); + late final termTheme = propertyDefault('termTheme', 0); /// Compatiablity for Chinese Android. /// Set it to true, if you use Safe Keyboard on Chinese Android - // late final cnKeyboardComp = property('cnKeyboardComp', false); + // late final cnKeyboardComp = propertyDefault('cnKeyboardComp', false); - late final lastVer = property('lastVer', 0); + late final lastVer = propertyDefault('lastVer', 0); /// Use CupertinoPageRoute for all routes - late final cupertinoRoute = property('cupertinoRoute', isIOS); + late final cupertinoRoute = propertyDefault('cupertinoRoute', isIOS); /// Hide title bar on desktop - late final hideTitleBar = property('hideTitleBar', isDesktop); + late final hideTitleBar = propertyDefault('hideTitleBar', isDesktop); /// Display CPU view as progress, also called as old CPU view - late final cpuViewAsProgress = property('cpuViewAsProgress', false); + late final cpuViewAsProgress = propertyDefault('cpuViewAsProgress', false); - late final displayCpuIndex = property('displayCpuIndex', true); + late final displayCpuIndex = propertyDefault('displayCpuIndex', true); - late final editorSoftWrap = property('editorSoftWrap', isIOS); + late final editorSoftWrap = propertyDefault('editorSoftWrap', isIOS); - late final sshTermHelpShown = property('sshTermHelpShown', false); + late final sshTermHelpShown = propertyDefault('sshTermHelpShown', false); - late final horizonVirtKey = property('horizonVirtKey', false); + late final horizonVirtKey = propertyDefault('horizonVirtKey', false); /// general wake lock - late final generalWakeLock = property('generalWakeLock', false); + late final generalWakeLock = propertyDefault('generalWakeLock', false); /// ssh page - late final sshWakeLock = property('sshWakeLock', true); + late final sshWakeLock = propertyDefault('sshWakeLock', true); /// fmt: https://example.com/{DIST}-{BRIGHT}.png - late final serverLogoUrl = property('serverLogoUrl', ''); + late final serverLogoUrl = propertyDefault('serverLogoUrl', ''); - late final betaTest = property('betaTest', false); + late final betaTest = propertyDefault('betaTest', false); /// If it's empty, skip change window size. /// Format: {width}x{height} - late final windowSize = property('windowSize', ''); + late final windowSize = propertyDefault('windowSize', ''); - late final introVer = property('introVer', 0); + late final introVer = propertyDefault('introVer', 0); - late final letterCache = property('letterCache', false); + late final letterCache = propertyDefault('letterCache', false); /// Set it to `$EDITOR`, `vim` and etc. to use remote system editor in SSH terminal. /// Set it empty to use local editor GUI. - late final sftpEditor = property('sftpEditor', ''); + late final sftpEditor = propertyDefault('sftpEditor', ''); // Never show these settings for users // // ------BEGIN------ /// Version of store db - late final storeVersion = property('storeVersion', 0); + late final storeVersion = propertyDefault('storeVersion', 0); /// Have notified user for notificaiton permission or not - late final noNotiPerm = property('noNotiPerm', false); + late final noNotiPerm = propertyDefault('noNotiPerm', false); // ------END------ } diff --git a/lib/data/store/snippet.dart b/lib/data/store/snippet.dart index 0b0d146c2..9e0959927 100644 --- a/lib/data/store/snippet.dart +++ b/lib/data/store/snippet.dart @@ -2,14 +2,15 @@ import 'package:fl_lib/fl_lib.dart'; import 'package:server_box/data/model/server/snippet.dart'; -class SnippetStore extends PersistentStore { +class SnippetStore extends HiveStore { SnippetStore._() : super('snippet'); static final instance = SnippetStore._(); void put(Snippet snippet) { - box.put(snippet.name, snippet); - box.updateLastModified(); + // box.put(snippet.name, snippet); + // box.updateLastModified(); + set(snippet.name, snippet); } List fetch() { @@ -25,7 +26,8 @@ class SnippetStore extends PersistentStore { } void delete(Snippet s) { - box.delete(s.name); - box.updateLastModified(); + // box.delete(s.name); + // box.updateLastModified(); + remove(s.name); } } diff --git a/lib/generated/l10n/l10n.dart b/lib/generated/l10n/l10n.dart new file mode 100644 index 000000000..c6c099a93 --- /dev/null +++ b/lib/generated/l10n/l10n.dart @@ -0,0 +1,1507 @@ +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_localizations/flutter_localizations.dart'; +import 'package:intl/intl.dart' as intl; + +import 'l10n_de.dart'; +import 'l10n_en.dart'; +import 'l10n_es.dart'; +import 'l10n_fr.dart'; +import 'l10n_id.dart'; +import 'l10n_ja.dart'; +import 'l10n_nl.dart'; +import 'l10n_pt.dart'; +import 'l10n_ru.dart'; +import 'l10n_tr.dart'; +import 'l10n_uk.dart'; +import 'l10n_zh.dart'; + +// ignore_for_file: type=lint + +/// Callers can lookup localized strings with an instance of AppLocalizations +/// returned by `AppLocalizations.of(context)`. +/// +/// Applications need to include `AppLocalizations.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'l10n/l10n.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: AppLocalizations.localizationsDelegates, +/// supportedLocales: AppLocalizations.supportedLocales, +/// home: MyApplicationHome(), +/// ); +/// ``` +/// +/// ## Update pubspec.yaml +/// +/// Please make sure to update your pubspec.yaml to include the following +/// packages: +/// +/// ```yaml +/// dependencies: +/// # Internationalization support. +/// flutter_localizations: +/// sdk: flutter +/// intl: any # Use the pinned version from flutter_localizations +/// +/// # Rest of dependencies +/// ``` +/// +/// ## iOS Applications +/// +/// iOS applications define key application metadata, including supported +/// locales, in an Info.plist file that is built into the application bundle. +/// To configure the locales supported by your app, you’ll need to edit this +/// file. +/// +/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. +/// Then, in the Project Navigator, open the Info.plist file under the Runner +/// project’s Runner folder. +/// +/// Next, select the Information Property List item, select Add Item from the +/// Editor menu, then select Localizations from the pop-up menu. +/// +/// Select and expand the newly-created Localizations item then, for each +/// locale your application supports, add a new item and select the locale +/// you wish to add from the pop-up menu in the Value field. This list should +/// be consistent with the languages listed in the AppLocalizations.supportedLocales +/// property. +abstract class AppLocalizations { + AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static AppLocalizations? of(BuildContext context) { + return Localizations.of(context, AppLocalizations); + } + + static const LocalizationsDelegate delegate = _AppLocalizationsDelegate(); + + /// A list of this localizations delegate along with the default localizations + /// delegates. + /// + /// Returns a list of localizations delegates containing this delegate along with + /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, + /// and GlobalWidgetsLocalizations.delegate. + /// + /// Additional delegates can be added by appending to this list in + /// MaterialApp. This list does not have to be used at all if a custom list + /// of delegates is preferred or required. + static const List> localizationsDelegates = >[ + delegate, + GlobalMaterialLocalizations.delegate, + GlobalCupertinoLocalizations.delegate, + GlobalWidgetsLocalizations.delegate, + ]; + + /// A list of this localizations delegate's supported locales. + static const List supportedLocales = [ + Locale('de'), + Locale('en'), + Locale('es'), + Locale('fr'), + Locale('id'), + Locale('ja'), + Locale('nl'), + Locale('pt'), + Locale('ru'), + Locale('tr'), + Locale('uk'), + Locale('zh'), + Locale('zh', 'TW') + ]; + + /// No description provided for @aboutThanks. + /// + /// In en, this message translates to: + /// **'Thanks to the following people who participated in.'** + String get aboutThanks; + + /// No description provided for @acceptBeta. + /// + /// In en, this message translates to: + /// **'Accept beta version updates'** + String get acceptBeta; + + /// No description provided for @addSystemPrivateKeyTip. + /// + /// In en, this message translates to: + /// **'Currently private keys don\'t exist, do you want to add the one that comes with the system (~/.ssh/id_rsa)?'** + String get addSystemPrivateKeyTip; + + /// No description provided for @added2List. + /// + /// In en, this message translates to: + /// **'Added to task list'** + String get added2List; + + /// No description provided for @addr. + /// + /// In en, this message translates to: + /// **'Address'** + String get addr; + + /// No description provided for @alreadyLastDir. + /// + /// In en, this message translates to: + /// **'Already in last directory.'** + String get alreadyLastDir; + + /// No description provided for @authFailTip. + /// + /// In en, this message translates to: + /// **'Authentication failed, please check whether credentials are correct'** + String get authFailTip; + + /// No description provided for @autoBackupConflict. + /// + /// In en, this message translates to: + /// **'Only one automatic backup can be turned on at the same time.'** + String get autoBackupConflict; + + /// No description provided for @autoConnect. + /// + /// In en, this message translates to: + /// **'Auto connect'** + String get autoConnect; + + /// No description provided for @autoRun. + /// + /// In en, this message translates to: + /// **'Auto run'** + String get autoRun; + + /// No description provided for @autoUpdateHomeWidget. + /// + /// In en, this message translates to: + /// **'Automatic home widget update'** + String get autoUpdateHomeWidget; + + /// No description provided for @backupTip. + /// + /// In en, this message translates to: + /// **'The exported data is weakly encrypted. \nPlease keep it safe.'** + String get backupTip; + + /// No description provided for @backupVersionNotMatch. + /// + /// In en, this message translates to: + /// **'Backup version is not match.'** + String get backupVersionNotMatch; + + /// No description provided for @battery. + /// + /// In en, this message translates to: + /// **'Battery'** + String get battery; + + /// No description provided for @bgRun. + /// + /// In en, this message translates to: + /// **'Run in background'** + String get bgRun; + + /// No description provided for @bgRunTip. + /// + /// In en, this message translates to: + /// **'This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".'** + String get bgRunTip; + + /// No description provided for @cmd. + /// + /// In en, this message translates to: + /// **'Command'** + String get cmd; + + /// No description provided for @collapseUITip. + /// + /// In en, this message translates to: + /// **'Whether to collapse long lists present in the UI by default'** + String get collapseUITip; + + /// No description provided for @conn. + /// + /// In en, this message translates to: + /// **'Connection'** + String get conn; + + /// No description provided for @container. + /// + /// In en, this message translates to: + /// **'Container'** + String get container; + + /// No description provided for @containerTrySudoTip. + /// + /// In en, this message translates to: + /// **'For example: In the app, the user is set to aaa, but Docker is installed under the root user. In this case, you need to enable this option.'** + String get containerTrySudoTip; + + /// No description provided for @convert. + /// + /// In en, this message translates to: + /// **'Convert'** + String get convert; + + /// No description provided for @copyPath. + /// + /// In en, this message translates to: + /// **'Copy path'** + String get copyPath; + + /// No description provided for @cpuViewAsProgressTip. + /// + /// In en, this message translates to: + /// **'Display the usage of each CPU in a progress bar style (old style)'** + String get cpuViewAsProgressTip; + + /// No description provided for @cursorType. + /// + /// In en, this message translates to: + /// **'Cursor type'** + String get cursorType; + + /// No description provided for @customCmd. + /// + /// In en, this message translates to: + /// **'Custom commands'** + String get customCmd; + + /// No description provided for @customCmdDocUrl. + /// + /// In en, this message translates to: + /// **'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'** + String get customCmdDocUrl; + + /// No description provided for @customCmdHint. + /// + /// In en, this message translates to: + /// **'\"Command Name\": \"Command\"'** + String get customCmdHint; + + /// No description provided for @decode. + /// + /// In en, this message translates to: + /// **'Decode'** + String get decode; + + /// No description provided for @decompress. + /// + /// In en, this message translates to: + /// **'Decompress'** + String get decompress; + + /// No description provided for @deleteServers. + /// + /// In en, this message translates to: + /// **'Batch delete servers'** + String get deleteServers; + + /// No description provided for @dirEmpty. + /// + /// In en, this message translates to: + /// **'Make sure the folder is empty.'** + String get dirEmpty; + + /// No description provided for @disconnected. + /// + /// In en, this message translates to: + /// **'Disconnected'** + String get disconnected; + + /// No description provided for @disk. + /// + /// In en, this message translates to: + /// **'Disk'** + String get disk; + + /// No description provided for @diskIgnorePath. + /// + /// In en, this message translates to: + /// **'Ignore path for disk'** + String get diskIgnorePath; + + /// No description provided for @displayCpuIndex. + /// + /// In en, this message translates to: + /// **'Display CPU index'** + String get displayCpuIndex; + + /// No description provided for @dl2Local. + /// + /// In en, this message translates to: + /// **'Download {fileName} to local?'** + String dl2Local(Object fileName); + + /// No description provided for @dockerEmptyRunningItems. + /// + /// In en, this message translates to: + /// **'There are no running containers.\nThis could be because:\n- The Docker installation user is not the same as the username configured within the App.\n- The environment variable DOCKER_HOST was not read correctly. You can get it by running `echo \$DOCKER_HOST` in the terminal.'** + String get dockerEmptyRunningItems; + + /// No description provided for @dockerImagesFmt. + /// + /// In en, this message translates to: + /// **'{count} images'** + String dockerImagesFmt(Object count); + + /// No description provided for @dockerNotInstalled. + /// + /// In en, this message translates to: + /// **'Docker not installed'** + String get dockerNotInstalled; + + /// No description provided for @dockerStatusRunningAndStoppedFmt. + /// + /// In en, this message translates to: + /// **'{runningCount} running, {stoppedCount} container stopped.'** + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount); + + /// No description provided for @dockerStatusRunningFmt. + /// + /// In en, this message translates to: + /// **'{count} container running.'** + String dockerStatusRunningFmt(Object count); + + /// No description provided for @doubleColumnMode. + /// + /// In en, this message translates to: + /// **'Double column mode'** + String get doubleColumnMode; + + /// No description provided for @doubleColumnTip. + /// + /// In en, this message translates to: + /// **'This option only enables the feature, whether it can actually be enabled depends on the width of the device'** + String get doubleColumnTip; + + /// No description provided for @editVirtKeys. + /// + /// In en, this message translates to: + /// **'Edit virtual keys'** + String get editVirtKeys; + + /// No description provided for @editor. + /// + /// In en, this message translates to: + /// **'Editor'** + String get editor; + + /// No description provided for @editorHighlightTip. + /// + /// In en, this message translates to: + /// **'The current code highlighting performance is not ideal and can be optionally turned off to improve.'** + String get editorHighlightTip; + + /// No description provided for @encode. + /// + /// In en, this message translates to: + /// **'Encode'** + String get encode; + + /// No description provided for @envVars. + /// + /// In en, this message translates to: + /// **'Environment variable'** + String get envVars; + + /// No description provided for @experimentalFeature. + /// + /// In en, this message translates to: + /// **'Experimental feature'** + String get experimentalFeature; + + /// No description provided for @extraArgs. + /// + /// In en, this message translates to: + /// **'Extra arguments'** + String get extraArgs; + + /// No description provided for @fallbackSshDest. + /// + /// In en, this message translates to: + /// **'Fallback SSH destination'** + String get fallbackSshDest; + + /// No description provided for @fdroidReleaseTip. + /// + /// In en, this message translates to: + /// **'If you downloaded this app from F-Droid, it is recommended to turn off this option.'** + String get fdroidReleaseTip; + + /// No description provided for @fileTooLarge. + /// + /// In en, this message translates to: + /// **'File \'{file}\' too large {size}, max {sizeMax}'** + String fileTooLarge(Object file, Object size, Object sizeMax); + + /// No description provided for @followSystem. + /// + /// In en, this message translates to: + /// **'Follow system'** + String get followSystem; + + /// No description provided for @font. + /// + /// In en, this message translates to: + /// **'Font'** + String get font; + + /// No description provided for @fontSize. + /// + /// In en, this message translates to: + /// **'Font size'** + String get fontSize; + + /// No description provided for @force. + /// + /// In en, this message translates to: + /// **'Force'** + String get force; + + /// No description provided for @fullScreen. + /// + /// In en, this message translates to: + /// **'Full screen mode'** + String get fullScreen; + + /// No description provided for @fullScreenJitter. + /// + /// In en, this message translates to: + /// **'Full screen jitter'** + String get fullScreenJitter; + + /// No description provided for @fullScreenJitterHelp. + /// + /// In en, this message translates to: + /// **'To avoid screen burn-in'** + String get fullScreenJitterHelp; + + /// No description provided for @fullScreenTip. + /// + /// In en, this message translates to: + /// **'Should full-screen mode be enabled when the device is rotated to landscape mode? This option only applies to the server tab.'** + String get fullScreenTip; + + /// No description provided for @goBackQ. + /// + /// In en, this message translates to: + /// **'Go back?'** + String get goBackQ; + + /// No description provided for @goto. + /// + /// In en, this message translates to: + /// **'Go to'** + String get goto; + + /// No description provided for @hideTitleBar. + /// + /// In en, this message translates to: + /// **'Hide title bar'** + String get hideTitleBar; + + /// No description provided for @highlight. + /// + /// In en, this message translates to: + /// **'Code highlighting'** + String get highlight; + + /// No description provided for @homeWidgetUrlConfig. + /// + /// In en, this message translates to: + /// **'Config home widget url'** + String get homeWidgetUrlConfig; + + /// No description provided for @host. + /// + /// In en, this message translates to: + /// **'Host'** + String get host; + + /// No description provided for @httpFailedWithCode. + /// + /// In en, this message translates to: + /// **'request failed, status code: {code}'** + String httpFailedWithCode(Object code); + + /// No description provided for @ignoreCert. + /// + /// In en, this message translates to: + /// **'Ignore certificate'** + String get ignoreCert; + + /// No description provided for @image. + /// + /// In en, this message translates to: + /// **'Image'** + String get image; + + /// No description provided for @imagesList. + /// + /// In en, this message translates to: + /// **'Images list'** + String get imagesList; + + /// No description provided for @init. + /// + /// In en, this message translates to: + /// **'Initialize'** + String get init; + + /// No description provided for @inner. + /// + /// In en, this message translates to: + /// **'Inner'** + String get inner; + + /// No description provided for @install. + /// + /// In en, this message translates to: + /// **'install'** + String get install; + + /// No description provided for @installDockerWithUrl. + /// + /// In en, this message translates to: + /// **'Please https://docs.docker.com/engine/install docker first.'** + String get installDockerWithUrl; + + /// No description provided for @invalid. + /// + /// In en, this message translates to: + /// **'Invalid'** + String get invalid; + + /// No description provided for @jumpServer. + /// + /// In en, this message translates to: + /// **'Jump server'** + String get jumpServer; + + /// No description provided for @keepForeground. + /// + /// In en, this message translates to: + /// **'Keep app foreground!'** + String get keepForeground; + + /// No description provided for @keepStatusWhenErr. + /// + /// In en, this message translates to: + /// **'Preserve the last server state'** + String get keepStatusWhenErr; + + /// No description provided for @keepStatusWhenErrTip. + /// + /// In en, this message translates to: + /// **'Only in the event of an error during script execution'** + String get keepStatusWhenErrTip; + + /// No description provided for @keyAuth. + /// + /// In en, this message translates to: + /// **'Key Auth'** + String get keyAuth; + + /// No description provided for @letterCache. + /// + /// In en, this message translates to: + /// **'Letter caching'** + String get letterCache; + + /// No description provided for @letterCacheTip. + /// + /// In en, this message translates to: + /// **'Recommended to disable, but after disabling, it will be impossible to input CJK characters.'** + String get letterCacheTip; + + /// No description provided for @license. + /// + /// In en, this message translates to: + /// **'License'** + String get license; + + /// No description provided for @location. + /// + /// In en, this message translates to: + /// **'Location'** + String get location; + + /// No description provided for @loss. + /// + /// In en, this message translates to: + /// **'loss'** + String get loss; + + /// No description provided for @madeWithLove. + /// + /// In en, this message translates to: + /// **'Made with ❤️ by {myGithub}'** + String madeWithLove(Object myGithub); + + /// No description provided for @manual. + /// + /// In en, this message translates to: + /// **'Manual'** + String get manual; + + /// No description provided for @max. + /// + /// In en, this message translates to: + /// **'max'** + String get max; + + /// No description provided for @maxRetryCount. + /// + /// In en, this message translates to: + /// **'Number of server reconnections'** + String get maxRetryCount; + + /// No description provided for @maxRetryCountEqual0. + /// + /// In en, this message translates to: + /// **'Will retry again and again.'** + String get maxRetryCountEqual0; + + /// No description provided for @min. + /// + /// In en, this message translates to: + /// **'min'** + String get min; + + /// No description provided for @mission. + /// + /// In en, this message translates to: + /// **'Mission'** + String get mission; + + /// No description provided for @more. + /// + /// In en, this message translates to: + /// **'More'** + String get more; + + /// No description provided for @moveOutServerFuncBtnsHelp. + /// + /// In en, this message translates to: + /// **'On: can be displayed below each card on the Server Tab page. Off: can be displayed at the top of the Server Details page.'** + String get moveOutServerFuncBtnsHelp; + + /// No description provided for @ms. + /// + /// In en, this message translates to: + /// **'ms'** + String get ms; + + /// No description provided for @needHomeDir. + /// + /// In en, this message translates to: + /// **'If you are a Synology user, [see here](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Users of other systems need to search for how to create a home directory.'** + String get needHomeDir; + + /// No description provided for @needRestart. + /// + /// In en, this message translates to: + /// **'App needs to be restarted'** + String get needRestart; + + /// No description provided for @net. + /// + /// In en, this message translates to: + /// **'Network'** + String get net; + + /// No description provided for @netViewType. + /// + /// In en, this message translates to: + /// **'Network view type'** + String get netViewType; + + /// No description provided for @newContainer. + /// + /// In en, this message translates to: + /// **'New container'** + String get newContainer; + + /// No description provided for @noLineChart. + /// + /// In en, this message translates to: + /// **'Do not use line charts'** + String get noLineChart; + + /// No description provided for @noLineChartForCpu. + /// + /// In en, this message translates to: + /// **'Do not use line charts for CPU'** + String get noLineChartForCpu; + + /// No description provided for @noPrivateKeyTip. + /// + /// In en, this message translates to: + /// **'The private key does not exist, it may have been deleted or there is a configuration error.'** + String get noPrivateKeyTip; + + /// No description provided for @noPromptAgain. + /// + /// In en, this message translates to: + /// **'Do not prompt again'** + String get noPromptAgain; + + /// No description provided for @node. + /// + /// In en, this message translates to: + /// **'Node'** + String get node; + + /// No description provided for @notAvailable. + /// + /// In en, this message translates to: + /// **'Unavailable'** + String get notAvailable; + + /// No description provided for @onServerDetailPage. + /// + /// In en, this message translates to: + /// **'On server detail page'** + String get onServerDetailPage; + + /// No description provided for @onlyOneLine. + /// + /// In en, this message translates to: + /// **'Only display as one line (scrollable)'** + String get onlyOneLine; + + /// No description provided for @onlyWhenCoreBiggerThan8. + /// + /// In en, this message translates to: + /// **'Works only when the number of cores is greater than 8'** + String get onlyWhenCoreBiggerThan8; + + /// No description provided for @openLastPath. + /// + /// In en, this message translates to: + /// **'Open the last path'** + String get openLastPath; + + /// No description provided for @openLastPathTip. + /// + /// In en, this message translates to: + /// **'Different servers will have different logs, and the log is the path to the exit'** + String get openLastPathTip; + + /// No description provided for @parseContainerStatsTip. + /// + /// In en, this message translates to: + /// **'Parsing the occupancy status of Docker is relatively slow.'** + String get parseContainerStatsTip; + + /// No description provided for @percentOfSize. + /// + /// In en, this message translates to: + /// **'{percent}% of {size}'** + String percentOfSize(Object percent, Object size); + + /// No description provided for @permission. + /// + /// In en, this message translates to: + /// **'Permissions'** + String get permission; + + /// No description provided for @pingAvg. + /// + /// In en, this message translates to: + /// **'Avg:'** + String get pingAvg; + + /// No description provided for @pingInputIP. + /// + /// In en, this message translates to: + /// **'Please input a target IP / domain.'** + String get pingInputIP; + + /// No description provided for @pingNoServer. + /// + /// In en, this message translates to: + /// **'No server to ping.\nPlease add a server in server tab.'** + String get pingNoServer; + + /// No description provided for @pkg. + /// + /// In en, this message translates to: + /// **'Pkg'** + String get pkg; + + /// No description provided for @plugInType. + /// + /// In en, this message translates to: + /// **'Insertion Type'** + String get plugInType; + + /// No description provided for @port. + /// + /// In en, this message translates to: + /// **'Port'** + String get port; + + /// No description provided for @preview. + /// + /// In en, this message translates to: + /// **'Preview'** + String get preview; + + /// No description provided for @privateKey. + /// + /// In en, this message translates to: + /// **'Private Key'** + String get privateKey; + + /// No description provided for @process. + /// + /// In en, this message translates to: + /// **'Process'** + String get process; + + /// No description provided for @pushToken. + /// + /// In en, this message translates to: + /// **'Push token'** + String get pushToken; + + /// No description provided for @pveIgnoreCertTip. + /// + /// In en, this message translates to: + /// **'Not recommended to enable, beware of security risks! If you are using the default certificate from PVE, you need to enable this option.'** + String get pveIgnoreCertTip; + + /// No description provided for @pveLoginFailed. + /// + /// In en, this message translates to: + /// **'Login failed. Unable to authenticate with username/password from server configuration for Linux PAM login.'** + String get pveLoginFailed; + + /// No description provided for @pveVersionLow. + /// + /// In en, this message translates to: + /// **'This feature is currently in the testing phase and has only been tested on PVE 8+. Please use it with caution.'** + String get pveVersionLow; + + /// No description provided for @pwd. + /// + /// In en, this message translates to: + /// **'Password'** + String get pwd; + + /// No description provided for @read. + /// + /// In en, this message translates to: + /// **'Read'** + String get read; + + /// No description provided for @reboot. + /// + /// In en, this message translates to: + /// **'Reboot'** + String get reboot; + + /// No description provided for @rememberPwdInMem. + /// + /// In en, this message translates to: + /// **'Remember password in memory'** + String get rememberPwdInMem; + + /// No description provided for @rememberPwdInMemTip. + /// + /// In en, this message translates to: + /// **'Used for containers, suspending, etc.'** + String get rememberPwdInMemTip; + + /// No description provided for @rememberWindowSize. + /// + /// In en, this message translates to: + /// **'Remember window size'** + String get rememberWindowSize; + + /// No description provided for @remotePath. + /// + /// In en, this message translates to: + /// **'Remote path'** + String get remotePath; + + /// No description provided for @restart. + /// + /// In en, this message translates to: + /// **'Restart'** + String get restart; + + /// No description provided for @result. + /// + /// In en, this message translates to: + /// **'Result'** + String get result; + + /// No description provided for @rotateAngel. + /// + /// In en, this message translates to: + /// **'Rotation angle'** + String get rotateAngel; + + /// No description provided for @route. + /// + /// In en, this message translates to: + /// **'Routing'** + String get route; + + /// No description provided for @run. + /// + /// In en, this message translates to: + /// **'Run'** + String get run; + + /// No description provided for @running. + /// + /// In en, this message translates to: + /// **'Running'** + String get running; + + /// No description provided for @sameIdServerExist. + /// + /// In en, this message translates to: + /// **'A server with the same ID already exists'** + String get sameIdServerExist; + + /// No description provided for @save. + /// + /// In en, this message translates to: + /// **'Save'** + String get save; + + /// No description provided for @saved. + /// + /// In en, this message translates to: + /// **'Saved'** + String get saved; + + /// No description provided for @second. + /// + /// In en, this message translates to: + /// **'s'** + String get second; + + /// No description provided for @sensors. + /// + /// In en, this message translates to: + /// **'Sensor'** + String get sensors; + + /// No description provided for @sequence. + /// + /// In en, this message translates to: + /// **'Sequence'** + String get sequence; + + /// No description provided for @server. + /// + /// In en, this message translates to: + /// **'Server'** + String get server; + + /// No description provided for @serverDetailOrder. + /// + /// In en, this message translates to: + /// **'Detail page widget order'** + String get serverDetailOrder; + + /// No description provided for @serverFuncBtns. + /// + /// In en, this message translates to: + /// **'Server function buttons'** + String get serverFuncBtns; + + /// No description provided for @serverOrder. + /// + /// In en, this message translates to: + /// **'Server order'** + String get serverOrder; + + /// No description provided for @sftpDlPrepare. + /// + /// In en, this message translates to: + /// **'Preparing to connect...'** + String get sftpDlPrepare; + + /// No description provided for @sftpEditorTip. + /// + /// In en, this message translates to: + /// **'If empty, use the built-in file editor of the app. If a value is present, use the remote server’s editor, e.g., `vim` (recommended to automatically detect according to `EDITOR`).'** + String get sftpEditorTip; + + /// No description provided for @sftpRmrDirSummary. + /// + /// In en, this message translates to: + /// **'Use `rm -r` to delete a folder in SFTP.'** + String get sftpRmrDirSummary; + + /// No description provided for @sftpSSHConnected. + /// + /// In en, this message translates to: + /// **'SFTP Connected'** + String get sftpSSHConnected; + + /// No description provided for @sftpShowFoldersFirst. + /// + /// In en, this message translates to: + /// **'Display folders first'** + String get sftpShowFoldersFirst; + + /// No description provided for @showDistLogo. + /// + /// In en, this message translates to: + /// **'Show distribution logo'** + String get showDistLogo; + + /// No description provided for @shutdown. + /// + /// In en, this message translates to: + /// **'Shutdown'** + String get shutdown; + + /// No description provided for @size. + /// + /// In en, this message translates to: + /// **'Size'** + String get size; + + /// No description provided for @snippet. + /// + /// In en, this message translates to: + /// **'Snippet'** + String get snippet; + + /// No description provided for @softWrap. + /// + /// In en, this message translates to: + /// **'Soft wrap'** + String get softWrap; + + /// No description provided for @specifyDev. + /// + /// In en, this message translates to: + /// **'Specify device'** + String get specifyDev; + + /// No description provided for @specifyDevTip. + /// + /// In en, this message translates to: + /// **'For example, network traffic statistics are by default for all devices. You can specify a particular device here.'** + String get specifyDevTip; + + /// No description provided for @speed. + /// + /// In en, this message translates to: + /// **'Speed'** + String get speed; + + /// No description provided for @spentTime. + /// + /// In en, this message translates to: + /// **'Spent time: {time}'** + String spentTime(Object time); + + /// No description provided for @sshTermHelp. + /// + /// In en, this message translates to: + /// **'When the terminal is scrollable, dragging horizontally can select text. Clicking the keyboard button turns the keyboard on/off. The file icon opens the current path SFTP. The clipboard button copies the content when text is selected, and pastes content from the clipboard into the terminal when no text is selected and there is content on the clipboard. The code icon pastes code snippets into the terminal and executes them.'** + String get sshTermHelp; + + /// No description provided for @sshTip. + /// + /// In en, this message translates to: + /// **'This function is now in the experimental stage.\n\nPlease report bugs on {url} or join our development.'** + String sshTip(Object url); + + /// No description provided for @sshVirtualKeyAutoOff. + /// + /// In en, this message translates to: + /// **'Auto switching of virtual keys'** + String get sshVirtualKeyAutoOff; + + /// No description provided for @start. + /// + /// In en, this message translates to: + /// **'Start'** + String get start; + + /// No description provided for @stat. + /// + /// In en, this message translates to: + /// **'Statistics'** + String get stat; + + /// No description provided for @stats. + /// + /// In en, this message translates to: + /// **'Statistics'** + String get stats; + + /// No description provided for @stop. + /// + /// In en, this message translates to: + /// **'Stop'** + String get stop; + + /// No description provided for @stopped. + /// + /// In en, this message translates to: + /// **'Stopped'** + String get stopped; + + /// No description provided for @storage. + /// + /// In en, this message translates to: + /// **'Storage'** + String get storage; + + /// No description provided for @supportFmtArgs. + /// + /// In en, this message translates to: + /// **'The following formatting parameters are supported:'** + String get supportFmtArgs; + + /// No description provided for @suspend. + /// + /// In en, this message translates to: + /// **'Suspend'** + String get suspend; + + /// No description provided for @suspendTip. + /// + /// In en, this message translates to: + /// **'The suspend function requires root permission and systemd support.'** + String get suspendTip; + + /// No description provided for @switchTo. + /// + /// In en, this message translates to: + /// **'Switch to {val}'** + String switchTo(Object val); + + /// No description provided for @sync. + /// + /// In en, this message translates to: + /// **'Sync'** + String get sync; + + /// No description provided for @syncTip. + /// + /// In en, this message translates to: + /// **'A restart may be required for some changes to take effect.'** + String get syncTip; + + /// No description provided for @system. + /// + /// In en, this message translates to: + /// **'System'** + String get system; + + /// No description provided for @tag. + /// + /// In en, this message translates to: + /// **'Tags'** + String get tag; + + /// No description provided for @temperature. + /// + /// In en, this message translates to: + /// **'Temperature'** + String get temperature; + + /// No description provided for @termFontSizeTip. + /// + /// In en, this message translates to: + /// **'This setting will affect the terminal size (width and height). You can zoom in on the terminal page to adjust the font size of the current session.'** + String get termFontSizeTip; + + /// No description provided for @terminal. + /// + /// In en, this message translates to: + /// **'Terminal'** + String get terminal; + + /// No description provided for @test. + /// + /// In en, this message translates to: + /// **'Test'** + String get test; + + /// No description provided for @textScaler. + /// + /// In en, this message translates to: + /// **'Text scaler'** + String get textScaler; + + /// No description provided for @textScalerTip. + /// + /// In en, this message translates to: + /// **'1.0 => 100% (original size), only works on server page part of the font, not recommended to change.'** + String get textScalerTip; + + /// No description provided for @theme. + /// + /// In en, this message translates to: + /// **'Theme'** + String get theme; + + /// No description provided for @time. + /// + /// In en, this message translates to: + /// **'Time'** + String get time; + + /// No description provided for @times. + /// + /// In en, this message translates to: + /// **'Times'** + String get times; + + /// No description provided for @total. + /// + /// In en, this message translates to: + /// **'Total'** + String get total; + + /// No description provided for @traffic. + /// + /// In en, this message translates to: + /// **'Traffic'** + String get traffic; + + /// No description provided for @trySudo. + /// + /// In en, this message translates to: + /// **'Try using sudo'** + String get trySudo; + + /// No description provided for @ttl. + /// + /// In en, this message translates to: + /// **'TTL'** + String get ttl; + + /// No description provided for @unknown. + /// + /// In en, this message translates to: + /// **'Unknown'** + String get unknown; + + /// No description provided for @unkownConvertMode. + /// + /// In en, this message translates to: + /// **'Unknown conversion mode'** + String get unkownConvertMode; + + /// No description provided for @update. + /// + /// In en, this message translates to: + /// **'Update'** + String get update; + + /// No description provided for @updateIntervalEqual0. + /// + /// In en, this message translates to: + /// **'You set to 0, will not update automatically.\nCan\'t calculate CPU status.'** + String get updateIntervalEqual0; + + /// No description provided for @updateServerStatusInterval. + /// + /// In en, this message translates to: + /// **'Server status update interval'** + String get updateServerStatusInterval; + + /// No description provided for @upload. + /// + /// In en, this message translates to: + /// **'Upload'** + String get upload; + + /// No description provided for @upsideDown. + /// + /// In en, this message translates to: + /// **'Upside Down'** + String get upsideDown; + + /// No description provided for @uptime. + /// + /// In en, this message translates to: + /// **'Uptime'** + String get uptime; + + /// No description provided for @useCdn. + /// + /// In en, this message translates to: + /// **'Using CDN'** + String get useCdn; + + /// No description provided for @useCdnTip. + /// + /// In en, this message translates to: + /// **'Non-Chinese users are recommended to use CDN. Would you like to use it?'** + String get useCdnTip; + + /// No description provided for @useNoPwd. + /// + /// In en, this message translates to: + /// **'No password will be used'** + String get useNoPwd; + + /// No description provided for @usePodmanByDefault. + /// + /// In en, this message translates to: + /// **'Use Podman by default'** + String get usePodmanByDefault; + + /// No description provided for @used. + /// + /// In en, this message translates to: + /// **'Used'** + String get used; + + /// No description provided for @view. + /// + /// In en, this message translates to: + /// **'View'** + String get view; + + /// No description provided for @viewErr. + /// + /// In en, this message translates to: + /// **'See error'** + String get viewErr; + + /// No description provided for @virtKeyHelpClipboard. + /// + /// In en, this message translates to: + /// **'Copy to the clipboard if the selected terminal is not empty, otherwise paste the content of the clipboard to the terminal.'** + String get virtKeyHelpClipboard; + + /// No description provided for @virtKeyHelpIME. + /// + /// In en, this message translates to: + /// **'Turn on/off the keyboard'** + String get virtKeyHelpIME; + + /// No description provided for @virtKeyHelpSFTP. + /// + /// In en, this message translates to: + /// **'Open current directory in SFTP.'** + String get virtKeyHelpSFTP; + + /// No description provided for @waitConnection. + /// + /// In en, this message translates to: + /// **'Please wait for the connection to be established.'** + String get waitConnection; + + /// No description provided for @wakeLock. + /// + /// In en, this message translates to: + /// **'Keep awake'** + String get wakeLock; + + /// No description provided for @watchNotPaired. + /// + /// In en, this message translates to: + /// **'No paired Apple Watch'** + String get watchNotPaired; + + /// No description provided for @webdavSettingEmpty. + /// + /// In en, this message translates to: + /// **'WebDav setting is empty'** + String get webdavSettingEmpty; + + /// No description provided for @whenOpenApp. + /// + /// In en, this message translates to: + /// **'When opening the app'** + String get whenOpenApp; + + /// No description provided for @wolTip. + /// + /// In en, this message translates to: + /// **'After configuring WOL (Wake-on-LAN), a WOL request is sent each time the server is connected.'** + String get wolTip; + + /// No description provided for @write. + /// + /// In en, this message translates to: + /// **'Write'** + String get write; + + /// No description provided for @writeScriptFailTip. + /// + /// In en, this message translates to: + /// **'Writing to the script failed, possibly due to lack of permissions or the directory does not exist.'** + String get writeScriptFailTip; + + /// No description provided for @writeScriptTip. + /// + /// In en, this message translates to: + /// **'After connecting to the server, a script will be written to ~/.config/server_box to monitor the system status. You can review the script content.'** + String get writeScriptTip; +} + +class _AppLocalizationsDelegate extends LocalizationsDelegate { + const _AppLocalizationsDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupAppLocalizations(locale)); + } + + @override + bool isSupported(Locale locale) => ['de', 'en', 'es', 'fr', 'id', 'ja', 'nl', 'pt', 'ru', 'tr', 'uk', 'zh'].contains(locale.languageCode); + + @override + bool shouldReload(_AppLocalizationsDelegate old) => false; +} + +AppLocalizations lookupAppLocalizations(Locale locale) { + + // Lookup logic when language+country codes are specified. + switch (locale.languageCode) { + case 'zh': { + switch (locale.countryCode) { + case 'TW': return AppLocalizationsZhTw(); + } + break; + } + } + + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'de': return AppLocalizationsDe(); + case 'en': return AppLocalizationsEn(); + case 'es': return AppLocalizationsEs(); + case 'fr': return AppLocalizationsFr(); + case 'id': return AppLocalizationsId(); + case 'ja': return AppLocalizationsJa(); + case 'nl': return AppLocalizationsNl(); + case 'pt': return AppLocalizationsPt(); + case 'ru': return AppLocalizationsRu(); + case 'tr': return AppLocalizationsTr(); + case 'uk': return AppLocalizationsUk(); + case 'zh': return AppLocalizationsZh(); + } + + throw FlutterError( + 'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely ' + 'an issue with the localizations generation tool. Please file an issue ' + 'on GitHub with a reproducible sample app and the gen-l10n configuration ' + 'that was used.' + ); +} diff --git a/lib/generated/l10n/l10n_de.dart b/lib/generated/l10n/l10n_de.dart new file mode 100644 index 000000000..093bb0c82 --- /dev/null +++ b/lib/generated/l10n/l10n_de.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for German (`de`). +class AppLocalizationsDe extends AppLocalizations { + AppLocalizationsDe([String locale = 'de']) : super(locale); + + @override + String get aboutThanks => 'Vielen Dank an die folgenden Personen, die daran teilgenommen haben.\n'; + + @override + String get acceptBeta => 'Akzeptieren Sie Testversion-Updates'; + + @override + String get addSystemPrivateKeyTip => 'Derzeit haben Sie keinen privaten Schlüssel, fügen Sie den Schlüssel hinzu, der mit dem System geliefert wird (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Zur Aufgabenliste hinzugefügt'; + + @override + String get addr => 'Adresse'; + + @override + String get alreadyLastDir => 'Bereits im letzten Verzeichnis.'; + + @override + String get authFailTip => 'Authentifizierung fehlgeschlagen, bitte überprüfen Sie, ob das Passwort/Schlüssel/Host/Benutzer usw. falsch sind.'; + + @override + String get autoBackupConflict => 'Es kann nur eine automatische Sicherung gleichzeitig aktiviert werden.'; + + @override + String get autoConnect => 'Automatisch verbinden'; + + @override + String get autoRun => 'Automatischer Start'; + + @override + String get autoUpdateHomeWidget => 'Home-Widget automatisch aktualisieren'; + + @override + String get backupTip => 'Das Backup wird nur einfach verschlüsselt.\nBitte bewahre die Datei sicher auf.'; + + @override + String get backupVersionNotMatch => 'Die Backup-Version stimmt nicht überein.'; + + @override + String get battery => 'Batterie'; + + @override + String get bgRun => 'Hintergrundaktualisierung'; + + @override + String get bgRunTip => 'Dieser Schalter bedeutet nur, dass die App versuchen wird, im Hintergrund zu laufen. Ob sie im Hintergrund laufen kann, hängt davon ab, ob die Berechtigungen aktiviert sind oder nicht. Bei nativem Android deaktivieren Sie bitte \"Batterieoptimierung\" in dieser App, und bei miui ändern Sie bitte die Energiesparrichtlinie auf \"Unbegrenzt\".'; + + @override + String get cmd => 'Command'; + + @override + String get collapseUITip => 'Ob lange Listen in der Benutzeroberfläche standardmäßig eingeklappt werden sollen oder nicht'; + + @override + String get conn => 'Verbindung'; + + @override + String get container => 'Container'; + + @override + String get containerTrySudoTip => 'Zum Beispiel: In der App ist der Benutzer auf aaa eingestellt, aber Docker ist unter dem Root-Benutzer installiert. In diesem Fall müssen Sie diese Option aktivieren'; + + @override + String get convert => 'Konvertieren'; + + @override + String get copyPath => 'Pfad kopieren'; + + @override + String get cpuViewAsProgressTip => 'Zeigen Sie die Auslastung jedes CPUs in einem Fortschrittsbalken-Stil an (alter Stil)'; + + @override + String get cursorType => 'Cursor-Typ'; + + @override + String get customCmd => 'Benutzerdefinierte Befehle'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Befehlsname\": \"Befehl\"'; + + @override + String get decode => 'Decode'; + + @override + String get decompress => 'Dekomprimieren'; + + @override + String get deleteServers => 'Batch-Löschung von Servern'; + + @override + String get dirEmpty => 'Stelle sicher, dass der Ordner leer ist.'; + + @override + String get disconnected => 'Disconnected'; + + @override + String get disk => 'Festplatte'; + + @override + String get diskIgnorePath => 'Pfad für Datenträger ignorieren'; + + @override + String get displayCpuIndex => 'Zeigen Sie den CPU-Index an'; + + @override + String dl2Local(Object fileName) { + return 'Datei \"$fileName\" herunterladen?'; + } + + @override + String get dockerEmptyRunningItems => 'Es gibt keine laufenden Container.\nDas könnte daran liegen:\n- Der Docker-Installationsbenutzer ist nicht mit dem in der App konfigurierten Benutzernamen identisch.\n- Die Umgebungsvariable DOCKER_HOST wurde nicht korrekt gelesen. Sie können sie ermitteln, indem Sie `echo \$DOCKER_HOST` im Terminal ausführen.'; + + @override + String dockerImagesFmt(Object count) { + return '$count Image(s)'; + } + + @override + String get dockerNotInstalled => 'Docker ist nicht installiert'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount aktiv, $stoppedCount container gestoppt.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count Container aktiv'; + } + + @override + String get doubleColumnMode => 'Doppelspaltiger Modus'; + + @override + String get doubleColumnTip => 'Diese Option aktiviert nur die Funktion, ob sie tatsächlich aktiviert werden kann, hängt auch von der Breite des Geräts ab'; + + @override + String get editVirtKeys => 'Virtuelle Tasten bearbeiten'; + + @override + String get editor => 'Editor'; + + @override + String get editorHighlightTip => 'Die Leistung der aktuellen Codehervorhebung ist schlechter und kann zur Verbesserung optional ausgeschaltet werden.'; + + @override + String get encode => 'Encode'; + + @override + String get envVars => 'Umgebungsvariable'; + + @override + String get experimentalFeature => 'Experimentelles Feature'; + + @override + String get extraArgs => 'Extra args'; + + @override + String get fallbackSshDest => 'SSH-Fallback-Ziel'; + + @override + String get fdroidReleaseTip => 'Wenn Sie diese App von F-Droid heruntergeladen haben, wird empfohlen, diese Option zu deaktivieren.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'Datei \'$file\' ist zu groß $size, max $sizeMax'; + } + + @override + String get followSystem => 'System verfolgen'; + + @override + String get font => 'Schriftarten'; + + @override + String get fontSize => 'Schriftgröße'; + + @override + String get force => 'freiwillig'; + + @override + String get fullScreen => 'Vollbildmodus'; + + @override + String get fullScreenJitter => 'Jitter im Vollbildmodus'; + + @override + String get fullScreenJitterHelp => 'Einbrennen des Bildschirms verhindern'; + + @override + String get fullScreenTip => 'Soll der Vollbildmodus aktiviert werden, wenn das Gerät in den Quermodus gedreht wird? Diese Option gilt nur für die Server-Registerkarte.'; + + @override + String get goBackQ => 'Zurückkommen?'; + + @override + String get goto => 'Pfad öffnen'; + + @override + String get hideTitleBar => 'Titelleiste ausblenden'; + + @override + String get highlight => 'Code highlight'; + + @override + String get homeWidgetUrlConfig => 'Home-Widget-Link konfigurieren'; + + @override + String get host => 'Host'; + + @override + String httpFailedWithCode(Object code) { + return 'Anfrage fehlgeschlagen, Statuscode: $code'; + } + + @override + String get ignoreCert => 'Zertifikat ignorieren'; + + @override + String get image => 'Image'; + + @override + String get imagesList => 'Images'; + + @override + String get init => 'Initialisieren'; + + @override + String get inner => 'Eingebaut'; + + @override + String get install => 'install'; + + @override + String get installDockerWithUrl => 'Bitte installiere docker zuerst. https://docs.docker.com/engine/install'; + + @override + String get invalid => 'Ungültig'; + + @override + String get jumpServer => 'Server springen'; + + @override + String get keepForeground => 'Stelle sicher, dass die App geöffnet bleibt.'; + + @override + String get keepStatusWhenErr => 'Den letzten Serverstatus beibehalten'; + + @override + String get keepStatusWhenErrTip => 'Nur im Fehlerfall während der Ausführung des Skripts'; + + @override + String get keyAuth => 'Schlüsselauthentifzierung'; + + @override + String get letterCache => 'Buchstaben-Caching'; + + @override + String get letterCacheTip => 'Empfohlen, zu deaktivieren, aber nach dem Deaktivieren können keine CJK-Zeichen eingegeben werden.'; + + @override + String get license => 'Lizenzen'; + + @override + String get location => 'Standort'; + + @override + String get loss => 'loss'; + + @override + String madeWithLove(Object myGithub) { + return 'Erstellt mit ❤️ von $myGithub'; + } + + @override + String get manual => 'Handbuch'; + + @override + String get max => 'max'; + + @override + String get maxRetryCount => 'Anzahl an Verbindungsversuchen'; + + @override + String get maxRetryCountEqual0 => 'Unbegrenzte Verbindungsversuche zum Server'; + + @override + String get min => 'min'; + + @override + String get mission => 'Mission'; + + @override + String get more => 'Mehr'; + + @override + String get moveOutServerFuncBtnsHelp => 'Ein: kann unter jeder Karte auf der Registerkarte \"Server\" angezeigt werden. Aus: kann oben auf der Seite \"Serverdetails\" angezeigt werden.'; + + @override + String get ms => 'ms'; + + @override + String get needHomeDir => 'Wenn Sie ein Synology-Benutzer sind, [sehen Sie hier](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Benutzer anderer Systeme müssen suchen, wie man ein Home-Verzeichnis erstellt.'; + + @override + String get needRestart => 'App muss neugestartet werden'; + + @override + String get net => 'Netzwerk'; + + @override + String get netViewType => 'Netzwerkansicht Typ'; + + @override + String get newContainer => 'Neuer Container'; + + @override + String get noLineChart => 'Verwenden Sie keine Liniendiagramme'; + + @override + String get noLineChartForCpu => 'Verwenden Sie keine Liniendiagramme für CPU'; + + @override + String get noPrivateKeyTip => 'Der private Schlüssel existiert nicht, möglicherweise wurde er gelöscht oder es liegt ein Konfigurationsfehler vor.'; + + @override + String get noPromptAgain => 'Nicht mehr nachfragen'; + + @override + String get node => 'Knoten'; + + @override + String get notAvailable => 'Nicht verfügbar'; + + @override + String get onServerDetailPage => 'in Detailansicht des Servers'; + + @override + String get onlyOneLine => 'Nur als eine Zeile anzeigen (scrollbar)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Wirksam nur, wenn die Anzahl der Kerne > 8 ist.'; + + @override + String get openLastPath => 'Öffnen Sie den letzten Pfad'; + + @override + String get openLastPathTip => 'Verschiedene Server haben unterschiedliche Einträge, und der Eintrag ist der Pfad zum Ausgang'; + + @override + String get parseContainerStatsTip => 'Das Analysieren des Belegungsstatus durch Docker ist relativ langsam'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% von $size'; + } + + @override + String get permission => 'Berechtigungen'; + + @override + String get pingAvg => 'Avg:'; + + @override + String get pingInputIP => 'Bitte gib eine Ziel-IP/Domain ein.'; + + @override + String get pingNoServer => 'Kein Server zum Anpingen.\nBitte füge einen Server hinzu.'; + + @override + String get pkg => 'Pkg'; + + @override + String get plugInType => 'Einfügetyp'; + + @override + String get port => 'Port'; + + @override + String get preview => 'Vorschau'; + + @override + String get privateKey => 'Private Key'; + + @override + String get process => 'Prozess'; + + @override + String get pushToken => 'Push Token'; + + @override + String get pveIgnoreCertTip => 'Nicht empfohlen, Achten Sie auf Sicherheitsrisiken! Wenn Sie das Standardzertifikat von PVE verwenden, müssen Sie diese Option aktivieren.'; + + @override + String get pveLoginFailed => 'Anmeldung fehlgeschlagen. Kann nicht mit Benutzername/Passwort aus der Serverkonfiguration angemeldet werden, um sich über Linux PAM anzumelden.'; + + @override + String get pveVersionLow => 'Diese Funktion befindet sich derzeit in der Testphase und wurde nur auf PVE 8+ getestet. Bitte verwenden Sie sie mit Vorsicht.'; + + @override + String get pwd => 'Passwort'; + + @override + String get read => 'Lesen'; + + @override + String get reboot => 'Neustart'; + + @override + String get rememberPwdInMem => 'Passwort im Speicher behalten'; + + @override + String get rememberPwdInMemTip => 'Für Container, Aufhängen usw.'; + + @override + String get rememberWindowSize => 'Fenstergröße merken'; + + @override + String get remotePath => 'Entfernte Pfade'; + + @override + String get restart => 'Neustart'; + + @override + String get result => 'Result'; + + @override + String get rotateAngel => 'Rotationswinkel'; + + @override + String get route => 'Routen'; + + @override + String get run => 'Ausführen'; + + @override + String get running => 'läuft'; + + @override + String get sameIdServerExist => 'Ein Server mit derselben ID existiert bereits'; + + @override + String get save => 'Speichern'; + + @override + String get saved => 'Gerettet'; + + @override + String get second => 's'; + + @override + String get sensors => 'Sensor'; + + @override + String get sequence => 'Sequenz'; + + @override + String get server => 'Server'; + + @override + String get serverDetailOrder => 'Reihenfolge der Widgets auf der Detailseite'; + + @override + String get serverFuncBtns => 'Server-Funktionsschaltflächen'; + + @override + String get serverOrder => 'Server-Bestellung'; + + @override + String get sftpDlPrepare => 'Verbindung vorbereiten...'; + + @override + String get sftpEditorTip => 'Wenn leer, verwenden Sie den im App integrierten Dateieditor. Wenn ein Wert vorhanden ist, wird der Editor des Remote-Servers verwendet, z.B. `vim` (es wird empfohlen, automatisch gemäß `EDITOR` zu ermitteln).'; + + @override + String get sftpRmrDirSummary => 'Verwenden Sie \"rm -r\", um das Verzeichnis in SFTP zu löschen.'; + + @override + String get sftpSSHConnected => 'SFTP Verbunden'; + + @override + String get sftpShowFoldersFirst => 'Ordner zuerst anzeigen'; + + @override + String get showDistLogo => 'Distributionslogo anzeigen'; + + @override + String get shutdown => 'Abschaltung'; + + @override + String get size => 'Größe'; + + @override + String get snippet => 'Snippet'; + + @override + String get softWrap => 'Weicher Umbruch'; + + @override + String get specifyDev => 'Gerät angeben'; + + @override + String get specifyDevTip => 'Zum Beispiel bezieht sich die Standard-Netzwerkverkehrsstatistik auf alle Geräte. Hier können Sie ein bestimmtes Gerät angeben.'; + + @override + String get speed => 'Tempo'; + + @override + String spentTime(Object time) { + return 'Benötigte Zeit: $time'; + } + + @override + String get sshTermHelp => 'Wenn das Terminal scrollbar ist, kann durch horizontales Ziehen Text ausgewählt werden. Durch Klicken auf die Tastentaste wird die Tastatur ein- oder ausgeschaltet. Das Dateisymbol öffnet den aktuellen Pfad SFTP. Die Zwischenablage-Schaltfläche kopiert den Inhalt, wenn Text ausgewählt ist, und fügt Inhalte aus der Zwischenablage in das Terminal ein, wenn kein Text ausgewählt ist und Inhalte in der Zwischenablage vorhanden sind. Das Codesymbol fügt Code-Schnipsel ins Terminal ein und führt sie aus.'; + + @override + String sshTip(Object url) { + return 'Diese Funktion befindet sich jetzt in der Experimentierphase.\n\nBitte melde Bugs auf $url oder mach mit bei der Entwicklung.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Automatische Umschaltung der virtuellen Tasten'; + + @override + String get start => 'Start'; + + @override + String get stat => 'Statistik'; + + @override + String get stats => 'Statistik'; + + @override + String get stop => 'Stop'; + + @override + String get stopped => 'Ausgelaufen'; + + @override + String get storage => 'Speicher'; + + @override + String get supportFmtArgs => 'Die folgenden Formatierungsparameter werden unterstützt:'; + + @override + String get suspend => 'Suspend'; + + @override + String get suspendTip => 'Die Suspend-Funktion erfordert Root-Rechte und systemd-Unterstützung.'; + + @override + String switchTo(Object val) { + return 'Wechseln zu $val'; + } + + @override + String get sync => 'Sync'; + + @override + String get syncTip => 'Damit einige Änderungen wirksam werden, kann ein Neustart erforderlich sein.'; + + @override + String get system => 'Systeme'; + + @override + String get tag => 'Tags'; + + @override + String get temperature => 'Temperatur'; + + @override + String get termFontSizeTip => 'Diese Einstellung beeinflusst die Größe des Terminals (Breite und Höhe). Sie können die Terminalseite zoomen, um die Schriftgröße der aktuellen Sitzung anzupassen.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Prüfung'; + + @override + String get textScaler => 'Skalierung der Schriftart'; + + @override + String get textScalerTip => '1.0 => 100% (Originalgröße), funktioniert nur auf der Serverseite Teil der Schrift, nicht empfohlen zu ändern.'; + + @override + String get theme => 'Themen'; + + @override + String get time => 'Zeit'; + + @override + String get times => 'x'; + + @override + String get total => 'Total'; + + @override + String get traffic => 'Durchflussmenge'; + + @override + String get trySudo => 'Versuche es mit sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Unbekannt'; + + @override + String get unkownConvertMode => 'Unbekannter Konvertierungsmodus'; + + @override + String get update => 'Update'; + + @override + String get updateIntervalEqual0 => 'Wenn du den Wert 0 einstellst, wird nicht automatisch aktualisiert.\nDer CPU-Status kann nicht berechnet werden.'; + + @override + String get updateServerStatusInterval => 'Aktualisierungsintervall des Serverstatus'; + + @override + String get upload => 'Hochladen'; + + @override + String get upsideDown => 'Upside Down'; + + @override + String get uptime => 'Betriebszeit'; + + @override + String get useCdn => 'Verwenden von CDN'; + + @override + String get useCdnTip => 'Nicht-chinesischen Benutzern wird die Verwendung eines CDN empfohlen. Möchten Sie es verwenden?'; + + @override + String get useNoPwd => 'Es wird kein Passwort verwendet'; + + @override + String get usePodmanByDefault => 'Standardmäßige Verwendung von Podman'; + + @override + String get used => 'Gebraucht'; + + @override + String get view => 'Ansicht'; + + @override + String get viewErr => 'Fehler anzeigen'; + + @override + String get virtKeyHelpClipboard => 'In die Zwischenablage kopieren, wenn das ausgewählte Terminal nicht leer ist, andernfalls den Inhalt der Zwischenablage in das Terminal einfügen.'; + + @override + String get virtKeyHelpIME => 'Tastatur ein-/ausschalten'; + + @override + String get virtKeyHelpSFTP => 'Aktuelles Verzeichnis in SFTP öffnen.'; + + @override + String get waitConnection => 'Bitte warte, bis die Verbindung hergestellt wurde.'; + + @override + String get wakeLock => 'Wach halten'; + + @override + String get watchNotPaired => 'Keine gekoppelte Apple Watch'; + + @override + String get webdavSettingEmpty => 'Webdav-Einstellungen sind leer'; + + @override + String get whenOpenApp => 'Beim Öffnen der App'; + + @override + String get wolTip => 'Nach der Konfiguration von WOL (Wake-on-LAN) wird jedes Mal, wenn der Server verbunden wird, eine WOL-Anfrage gesendet.'; + + @override + String get write => 'Schreiben'; + + @override + String get writeScriptFailTip => 'Das Schreiben des Skripts ist fehlgeschlagen, möglicherweise aufgrund fehlender Berechtigungen oder das Verzeichnis existiert nicht.'; + + @override + String get writeScriptTip => 'Nach der Verbindung mit dem Server wird ein Skript in ~/.config/server_box geschrieben, um den Systemstatus zu überwachen. Sie können den Skriptinhalt überprüfen.'; +} diff --git a/lib/generated/l10n/l10n_en.dart b/lib/generated/l10n/l10n_en.dart new file mode 100644 index 000000000..264e2fb95 --- /dev/null +++ b/lib/generated/l10n/l10n_en.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for English (`en`). +class AppLocalizationsEn extends AppLocalizations { + AppLocalizationsEn([String locale = 'en']) : super(locale); + + @override + String get aboutThanks => 'Thanks to the following people who participated in.'; + + @override + String get acceptBeta => 'Accept beta version updates'; + + @override + String get addSystemPrivateKeyTip => 'Currently private keys don\'t exist, do you want to add the one that comes with the system (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Added to task list'; + + @override + String get addr => 'Address'; + + @override + String get alreadyLastDir => 'Already in last directory.'; + + @override + String get authFailTip => 'Authentication failed, please check whether credentials are correct'; + + @override + String get autoBackupConflict => 'Only one automatic backup can be turned on at the same time.'; + + @override + String get autoConnect => 'Auto connect'; + + @override + String get autoRun => 'Auto run'; + + @override + String get autoUpdateHomeWidget => 'Automatic home widget update'; + + @override + String get backupTip => 'The exported data is weakly encrypted. \nPlease keep it safe.'; + + @override + String get backupVersionNotMatch => 'Backup version is not match.'; + + @override + String get battery => 'Battery'; + + @override + String get bgRun => 'Run in background'; + + @override + String get bgRunTip => 'This switch only means the program will try to run in the background. Whether it can run in the background depends on whether the permission is enabled or not. For AOSP-based Android ROMs, please disable \"Battery Optimization\" in this app. For MIUI / HyperOS, please change the power saving policy to \"Unlimited\".'; + + @override + String get cmd => 'Command'; + + @override + String get collapseUITip => 'Whether to collapse long lists present in the UI by default'; + + @override + String get conn => 'Connection'; + + @override + String get container => 'Container'; + + @override + String get containerTrySudoTip => 'For example: In the app, the user is set to aaa, but Docker is installed under the root user. In this case, you need to enable this option.'; + + @override + String get convert => 'Convert'; + + @override + String get copyPath => 'Copy path'; + + @override + String get cpuViewAsProgressTip => 'Display the usage of each CPU in a progress bar style (old style)'; + + @override + String get cursorType => 'Cursor type'; + + @override + String get customCmd => 'Custom commands'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Command Name\": \"Command\"'; + + @override + String get decode => 'Decode'; + + @override + String get decompress => 'Decompress'; + + @override + String get deleteServers => 'Batch delete servers'; + + @override + String get dirEmpty => 'Make sure the folder is empty.'; + + @override + String get disconnected => 'Disconnected'; + + @override + String get disk => 'Disk'; + + @override + String get diskIgnorePath => 'Ignore path for disk'; + + @override + String get displayCpuIndex => 'Display CPU index'; + + @override + String dl2Local(Object fileName) { + return 'Download $fileName to local?'; + } + + @override + String get dockerEmptyRunningItems => 'There are no running containers.\nThis could be because:\n- The Docker installation user is not the same as the username configured within the App.\n- The environment variable DOCKER_HOST was not read correctly. You can get it by running `echo \$DOCKER_HOST` in the terminal.'; + + @override + String dockerImagesFmt(Object count) { + return '$count images'; + } + + @override + String get dockerNotInstalled => 'Docker not installed'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount running, $stoppedCount container stopped.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count container running.'; + } + + @override + String get doubleColumnMode => 'Double column mode'; + + @override + String get doubleColumnTip => 'This option only enables the feature, whether it can actually be enabled depends on the width of the device'; + + @override + String get editVirtKeys => 'Edit virtual keys'; + + @override + String get editor => 'Editor'; + + @override + String get editorHighlightTip => 'The current code highlighting performance is not ideal and can be optionally turned off to improve.'; + + @override + String get encode => 'Encode'; + + @override + String get envVars => 'Environment variable'; + + @override + String get experimentalFeature => 'Experimental feature'; + + @override + String get extraArgs => 'Extra arguments'; + + @override + String get fallbackSshDest => 'Fallback SSH destination'; + + @override + String get fdroidReleaseTip => 'If you downloaded this app from F-Droid, it is recommended to turn off this option.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'File \'$file\' too large $size, max $sizeMax'; + } + + @override + String get followSystem => 'Follow system'; + + @override + String get font => 'Font'; + + @override + String get fontSize => 'Font size'; + + @override + String get force => 'Force'; + + @override + String get fullScreen => 'Full screen mode'; + + @override + String get fullScreenJitter => 'Full screen jitter'; + + @override + String get fullScreenJitterHelp => 'To avoid screen burn-in'; + + @override + String get fullScreenTip => 'Should full-screen mode be enabled when the device is rotated to landscape mode? This option only applies to the server tab.'; + + @override + String get goBackQ => 'Go back?'; + + @override + String get goto => 'Go to'; + + @override + String get hideTitleBar => 'Hide title bar'; + + @override + String get highlight => 'Code highlighting'; + + @override + String get homeWidgetUrlConfig => 'Config home widget url'; + + @override + String get host => 'Host'; + + @override + String httpFailedWithCode(Object code) { + return 'request failed, status code: $code'; + } + + @override + String get ignoreCert => 'Ignore certificate'; + + @override + String get image => 'Image'; + + @override + String get imagesList => 'Images list'; + + @override + String get init => 'Initialize'; + + @override + String get inner => 'Inner'; + + @override + String get install => 'install'; + + @override + String get installDockerWithUrl => 'Please https://docs.docker.com/engine/install docker first.'; + + @override + String get invalid => 'Invalid'; + + @override + String get jumpServer => 'Jump server'; + + @override + String get keepForeground => 'Keep app foreground!'; + + @override + String get keepStatusWhenErr => 'Preserve the last server state'; + + @override + String get keepStatusWhenErrTip => 'Only in the event of an error during script execution'; + + @override + String get keyAuth => 'Key Auth'; + + @override + String get letterCache => 'Letter caching'; + + @override + String get letterCacheTip => 'Recommended to disable, but after disabling, it will be impossible to input CJK characters.'; + + @override + String get license => 'License'; + + @override + String get location => 'Location'; + + @override + String get loss => 'loss'; + + @override + String madeWithLove(Object myGithub) { + return 'Made with ❤️ by $myGithub'; + } + + @override + String get manual => 'Manual'; + + @override + String get max => 'max'; + + @override + String get maxRetryCount => 'Number of server reconnections'; + + @override + String get maxRetryCountEqual0 => 'Will retry again and again.'; + + @override + String get min => 'min'; + + @override + String get mission => 'Mission'; + + @override + String get more => 'More'; + + @override + String get moveOutServerFuncBtnsHelp => 'On: can be displayed below each card on the Server Tab page. Off: can be displayed at the top of the Server Details page.'; + + @override + String get ms => 'ms'; + + @override + String get needHomeDir => 'If you are a Synology user, [see here](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Users of other systems need to search for how to create a home directory.'; + + @override + String get needRestart => 'App needs to be restarted'; + + @override + String get net => 'Network'; + + @override + String get netViewType => 'Network view type'; + + @override + String get newContainer => 'New container'; + + @override + String get noLineChart => 'Do not use line charts'; + + @override + String get noLineChartForCpu => 'Do not use line charts for CPU'; + + @override + String get noPrivateKeyTip => 'The private key does not exist, it may have been deleted or there is a configuration error.'; + + @override + String get noPromptAgain => 'Do not prompt again'; + + @override + String get node => 'Node'; + + @override + String get notAvailable => 'Unavailable'; + + @override + String get onServerDetailPage => 'On server detail page'; + + @override + String get onlyOneLine => 'Only display as one line (scrollable)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Works only when the number of cores is greater than 8'; + + @override + String get openLastPath => 'Open the last path'; + + @override + String get openLastPathTip => 'Different servers will have different logs, and the log is the path to the exit'; + + @override + String get parseContainerStatsTip => 'Parsing the occupancy status of Docker is relatively slow.'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% of $size'; + } + + @override + String get permission => 'Permissions'; + + @override + String get pingAvg => 'Avg:'; + + @override + String get pingInputIP => 'Please input a target IP / domain.'; + + @override + String get pingNoServer => 'No server to ping.\nPlease add a server in server tab.'; + + @override + String get pkg => 'Pkg'; + + @override + String get plugInType => 'Insertion Type'; + + @override + String get port => 'Port'; + + @override + String get preview => 'Preview'; + + @override + String get privateKey => 'Private Key'; + + @override + String get process => 'Process'; + + @override + String get pushToken => 'Push token'; + + @override + String get pveIgnoreCertTip => 'Not recommended to enable, beware of security risks! If you are using the default certificate from PVE, you need to enable this option.'; + + @override + String get pveLoginFailed => 'Login failed. Unable to authenticate with username/password from server configuration for Linux PAM login.'; + + @override + String get pveVersionLow => 'This feature is currently in the testing phase and has only been tested on PVE 8+. Please use it with caution.'; + + @override + String get pwd => 'Password'; + + @override + String get read => 'Read'; + + @override + String get reboot => 'Reboot'; + + @override + String get rememberPwdInMem => 'Remember password in memory'; + + @override + String get rememberPwdInMemTip => 'Used for containers, suspending, etc.'; + + @override + String get rememberWindowSize => 'Remember window size'; + + @override + String get remotePath => 'Remote path'; + + @override + String get restart => 'Restart'; + + @override + String get result => 'Result'; + + @override + String get rotateAngel => 'Rotation angle'; + + @override + String get route => 'Routing'; + + @override + String get run => 'Run'; + + @override + String get running => 'Running'; + + @override + String get sameIdServerExist => 'A server with the same ID already exists'; + + @override + String get save => 'Save'; + + @override + String get saved => 'Saved'; + + @override + String get second => 's'; + + @override + String get sensors => 'Sensor'; + + @override + String get sequence => 'Sequence'; + + @override + String get server => 'Server'; + + @override + String get serverDetailOrder => 'Detail page widget order'; + + @override + String get serverFuncBtns => 'Server function buttons'; + + @override + String get serverOrder => 'Server order'; + + @override + String get sftpDlPrepare => 'Preparing to connect...'; + + @override + String get sftpEditorTip => 'If empty, use the built-in file editor of the app. If a value is present, use the remote server’s editor, e.g., `vim` (recommended to automatically detect according to `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Use `rm -r` to delete a folder in SFTP.'; + + @override + String get sftpSSHConnected => 'SFTP Connected'; + + @override + String get sftpShowFoldersFirst => 'Display folders first'; + + @override + String get showDistLogo => 'Show distribution logo'; + + @override + String get shutdown => 'Shutdown'; + + @override + String get size => 'Size'; + + @override + String get snippet => 'Snippet'; + + @override + String get softWrap => 'Soft wrap'; + + @override + String get specifyDev => 'Specify device'; + + @override + String get specifyDevTip => 'For example, network traffic statistics are by default for all devices. You can specify a particular device here.'; + + @override + String get speed => 'Speed'; + + @override + String spentTime(Object time) { + return 'Spent time: $time'; + } + + @override + String get sshTermHelp => 'When the terminal is scrollable, dragging horizontally can select text. Clicking the keyboard button turns the keyboard on/off. The file icon opens the current path SFTP. The clipboard button copies the content when text is selected, and pastes content from the clipboard into the terminal when no text is selected and there is content on the clipboard. The code icon pastes code snippets into the terminal and executes them.'; + + @override + String sshTip(Object url) { + return 'This function is now in the experimental stage.\n\nPlease report bugs on $url or join our development.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Auto switching of virtual keys'; + + @override + String get start => 'Start'; + + @override + String get stat => 'Statistics'; + + @override + String get stats => 'Statistics'; + + @override + String get stop => 'Stop'; + + @override + String get stopped => 'Stopped'; + + @override + String get storage => 'Storage'; + + @override + String get supportFmtArgs => 'The following formatting parameters are supported:'; + + @override + String get suspend => 'Suspend'; + + @override + String get suspendTip => 'The suspend function requires root permission and systemd support.'; + + @override + String switchTo(Object val) { + return 'Switch to $val'; + } + + @override + String get sync => 'Sync'; + + @override + String get syncTip => 'A restart may be required for some changes to take effect.'; + + @override + String get system => 'System'; + + @override + String get tag => 'Tags'; + + @override + String get temperature => 'Temperature'; + + @override + String get termFontSizeTip => 'This setting will affect the terminal size (width and height). You can zoom in on the terminal page to adjust the font size of the current session.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Test'; + + @override + String get textScaler => 'Text scaler'; + + @override + String get textScalerTip => '1.0 => 100% (original size), only works on server page part of the font, not recommended to change.'; + + @override + String get theme => 'Theme'; + + @override + String get time => 'Time'; + + @override + String get times => 'Times'; + + @override + String get total => 'Total'; + + @override + String get traffic => 'Traffic'; + + @override + String get trySudo => 'Try using sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Unknown'; + + @override + String get unkownConvertMode => 'Unknown conversion mode'; + + @override + String get update => 'Update'; + + @override + String get updateIntervalEqual0 => 'You set to 0, will not update automatically.\nCan\'t calculate CPU status.'; + + @override + String get updateServerStatusInterval => 'Server status update interval'; + + @override + String get upload => 'Upload'; + + @override + String get upsideDown => 'Upside Down'; + + @override + String get uptime => 'Uptime'; + + @override + String get useCdn => 'Using CDN'; + + @override + String get useCdnTip => 'Non-Chinese users are recommended to use CDN. Would you like to use it?'; + + @override + String get useNoPwd => 'No password will be used'; + + @override + String get usePodmanByDefault => 'Use Podman by default'; + + @override + String get used => 'Used'; + + @override + String get view => 'View'; + + @override + String get viewErr => 'See error'; + + @override + String get virtKeyHelpClipboard => 'Copy to the clipboard if the selected terminal is not empty, otherwise paste the content of the clipboard to the terminal.'; + + @override + String get virtKeyHelpIME => 'Turn on/off the keyboard'; + + @override + String get virtKeyHelpSFTP => 'Open current directory in SFTP.'; + + @override + String get waitConnection => 'Please wait for the connection to be established.'; + + @override + String get wakeLock => 'Keep awake'; + + @override + String get watchNotPaired => 'No paired Apple Watch'; + + @override + String get webdavSettingEmpty => 'WebDav setting is empty'; + + @override + String get whenOpenApp => 'When opening the app'; + + @override + String get wolTip => 'After configuring WOL (Wake-on-LAN), a WOL request is sent each time the server is connected.'; + + @override + String get write => 'Write'; + + @override + String get writeScriptFailTip => 'Writing to the script failed, possibly due to lack of permissions or the directory does not exist.'; + + @override + String get writeScriptTip => 'After connecting to the server, a script will be written to ~/.config/server_box to monitor the system status. You can review the script content.'; +} diff --git a/lib/generated/l10n/l10n_es.dart b/lib/generated/l10n/l10n_es.dart new file mode 100644 index 000000000..8a536cb2a --- /dev/null +++ b/lib/generated/l10n/l10n_es.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Spanish Castilian (`es`). +class AppLocalizationsEs extends AppLocalizations { + AppLocalizationsEs([String locale = 'es']) : super(locale); + + @override + String get aboutThanks => 'Gracias a los siguientes participantes.'; + + @override + String get acceptBeta => 'Aceptar actualizaciones de la versión de prueba'; + + @override + String get addSystemPrivateKeyTip => 'Actualmente no hay ninguna llave privada, ¿quieres agregar la que viene por defecto en el sistema (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Añadido a la lista de tareas'; + + @override + String get addr => 'Dirección'; + + @override + String get alreadyLastDir => 'Ya estás en el directorio superior'; + + @override + String get authFailTip => 'La autenticación ha fallado, por favor verifica si la contraseña/llave/host/usuario, etc., son incorrectos.'; + + @override + String get autoBackupConflict => 'Solo se puede activar una copia de seguridad automática a la vez'; + + @override + String get autoConnect => 'Conexión automática'; + + @override + String get autoRun => 'Ejecución automática'; + + @override + String get autoUpdateHomeWidget => 'Actualizar automáticamente el widget del escritorio'; + + @override + String get backupTip => 'Los datos exportados solo están encriptados de manera básica, por favor guárdalos en un lugar seguro.'; + + @override + String get backupVersionNotMatch => 'La versión de la copia de seguridad no coincide, no se puede restaurar'; + + @override + String get battery => 'Batería'; + + @override + String get bgRun => 'Ejecución en segundo plano'; + + @override + String get bgRunTip => 'Este interruptor solo indica que la aplicación intentará correr en segundo plano, si puede hacerlo o no depende de si tiene el permiso correspondiente. En Android puro, por favor desactiva la “optimización de batería” para esta app, en MIUI por favor cambia la estrategia de ahorro de energía a “Sin restricciones”.'; + + @override + String get cmd => 'Comando'; + + @override + String get collapseUITip => '¿Colapsar por defecto las listas largas en la UI?'; + + @override + String get conn => 'Conectar'; + + @override + String get container => 'Contenedor'; + + @override + String get containerTrySudoTip => 'Por ejemplo: si configuras el usuario dentro de la app como aaa, pero Docker está instalado bajo el usuario root, entonces necesitarás habilitar esta opción'; + + @override + String get convert => 'Convertir'; + + @override + String get copyPath => 'Copiar ruta'; + + @override + String get cpuViewAsProgressTip => 'Muestre la tasa de uso de cada CPU en estilo de barra de progreso (estilo antiguo)'; + + @override + String get cursorType => 'Tipo de cursor'; + + @override + String get customCmd => 'Comandos personalizados'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Nombre del comando\": \"Comando\"'; + + @override + String get decode => 'Decodificar'; + + @override + String get decompress => 'Descomprimir'; + + @override + String get deleteServers => 'Eliminar servidores en lote'; + + @override + String get dirEmpty => 'Asegúrate de que el directorio esté vacío'; + + @override + String get disconnected => 'Desconectado'; + + @override + String get disk => 'Disco'; + + @override + String get diskIgnorePath => 'Rutas de disco ignoradas'; + + @override + String get displayCpuIndex => 'Muestre el índice de CPU'; + + @override + String dl2Local(Object fileName) { + return '¿Descargar $fileName a local?'; + } + + @override + String get dockerEmptyRunningItems => 'No hay contenedores en ejecución.\nEsto podría deberse a que:\n- El usuario con el que se instaló Docker es diferente al configurado en la app\n- La variable de entorno DOCKER_HOST no se ha leído correctamente. Puedes obtenerla ejecutando `echo \$DOCKER_HOST` en el terminal.'; + + @override + String dockerImagesFmt(Object count) { + return 'Total de $count imágenes'; + } + + @override + String get dockerNotInstalled => 'Docker no está instalado'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount en ejecución, $stoppedCount detenidos'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count contenedores en ejecución'; + } + + @override + String get doubleColumnMode => 'Modo de doble columna'; + + @override + String get doubleColumnTip => 'Esta opción solo habilita la función, si se puede activar o no depende del ancho del dispositivo'; + + @override + String get editVirtKeys => 'Editar teclas virtuales'; + + @override + String get editor => 'Editor'; + + @override + String get editorHighlightTip => 'El rendimiento del resaltado de código es bastante pobre actualmente, puedes elegir desactivarlo para mejorar.'; + + @override + String get encode => 'Codificar'; + + @override + String get envVars => 'Variable de entorno'; + + @override + String get experimentalFeature => 'Función experimental'; + + @override + String get extraArgs => 'Argumentos extra'; + + @override + String get fallbackSshDest => 'Destino SSH alternativo'; + + @override + String get fdroidReleaseTip => 'Si descargaste esta aplicación desde F-Droid, se recomienda desactivar esta opción.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'El archivo \'$file\' es demasiado grande \'$size\', supera el $sizeMax'; + } + + @override + String get followSystem => 'Seguir al sistema'; + + @override + String get font => 'Fuente'; + + @override + String get fontSize => 'Tamaño de fuente'; + + @override + String get force => 'Forzar'; + + @override + String get fullScreen => 'Modo pantalla completa'; + + @override + String get fullScreenJitter => 'Temblores en modo pantalla completa'; + + @override + String get fullScreenJitterHelp => 'Prevención de quemaduras de pantalla'; + + @override + String get fullScreenTip => '¿Debe habilitarse el modo de pantalla completa cuando el dispositivo se rote al modo horizontal? Esta opción solo se aplica a la pestaña del servidor.'; + + @override + String get goBackQ => '¿Regresar?'; + + @override + String get goto => 'Ir a'; + + @override + String get hideTitleBar => 'Ocultar barra de título'; + + @override + String get highlight => 'Resaltar código'; + + @override + String get homeWidgetUrlConfig => 'Configuración de URL del widget de inicio'; + + @override + String get host => 'Anfitrión'; + + @override + String httpFailedWithCode(Object code) { + return 'Fallo en la solicitud, código de estado: $code'; + } + + @override + String get ignoreCert => 'Ignorar certificado'; + + @override + String get image => 'Imagen'; + + @override + String get imagesList => 'Lista de imágenes'; + + @override + String get init => 'Inicializar'; + + @override + String get inner => 'Interno'; + + @override + String get install => 'Instalar'; + + @override + String get installDockerWithUrl => 'Por favor instala Docker primero desde https://docs.docker.com/engine/install'; + + @override + String get invalid => 'Inválido'; + + @override + String get jumpServer => 'Servidor de salto'; + + @override + String get keepForeground => '¡Por favor, mantén la app en primer plano!'; + + @override + String get keepStatusWhenErr => 'Mantener el estado anterior del servidor'; + + @override + String get keepStatusWhenErrTip => 'Solo aplica cuando hay errores al ejecutar scripts'; + + @override + String get keyAuth => 'Autenticación con llave'; + + @override + String get letterCache => 'Caché de letras'; + + @override + String get letterCacheTip => 'Recomendado desactivar, pero después de desactivarlo, no se podrán ingresar caracteres CJK.'; + + @override + String get license => 'Licencia de código abierto'; + + @override + String get location => 'Ubicación'; + + @override + String get loss => 'Tasa de pérdida'; + + @override + String madeWithLove(Object myGithub) { + return 'Hecho con ❤️ por $myGithub'; + } + + @override + String get manual => 'Manual'; + + @override + String get max => 'Máximo'; + + @override + String get maxRetryCount => 'Número máximo de reintentos de conexión al servidor'; + + @override + String get maxRetryCountEqual0 => 'Reintentará infinitamente'; + + @override + String get min => 'Mínimo'; + + @override + String get mission => 'Misión'; + + @override + String get more => 'Más'; + + @override + String get moveOutServerFuncBtnsHelp => 'Activado: se mostrará debajo de cada tarjeta en la página de servidores. Desactivado: se mostrará en la parte superior de los detalles del servidor.'; + + @override + String get ms => 'milisegundos'; + + @override + String get needHomeDir => 'Si eres usuario de Synology, [consulta aquí](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Los usuarios de otros sistemas deben buscar cómo crear un directorio home.'; + + @override + String get needRestart => 'Necesita reiniciar la app'; + + @override + String get net => 'Red'; + + @override + String get netViewType => 'Tipo de vista de red'; + + @override + String get newContainer => 'Crear contenedor nuevo'; + + @override + String get noLineChart => 'No utilice gráficos de líneas'; + + @override + String get noLineChartForCpu => 'No utilice gráficos lineales para la CPU'; + + @override + String get noPrivateKeyTip => 'La clave privada no existe, puede haber sido eliminada o hay un error de configuración.'; + + @override + String get noPromptAgain => 'No volver a preguntar'; + + @override + String get node => 'Nodo'; + + @override + String get notAvailable => 'No disponible'; + + @override + String get onServerDetailPage => 'En la página de detalles del servidor'; + + @override + String get onlyOneLine => 'Mostrar solo en una línea (desplazable)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Efectivo solo cuando el número de núcleos > 8'; + + @override + String get openLastPath => 'Abrir el último camino'; + + @override + String get openLastPathTip => 'Los diferentes servidores tendrán diferentes registros, y lo que se registra es la ruta de salida'; + + @override + String get parseContainerStatsTip => 'El análisis del estado de uso de Docker es bastante lento'; + + @override + String percentOfSize(Object percent, Object size) { + return 'El $percent% de $size'; + } + + @override + String get permission => 'Permisos'; + + @override + String get pingAvg => 'Promedio:'; + + @override + String get pingInputIP => 'Por favor, introduce la IP de destino o el dominio'; + + @override + String get pingNoServer => 'No hay servidores disponibles para hacer Ping\nPor favor, añade un servidor en la pestaña de servidores y vuelve a intentarlo'; + + @override + String get pkg => 'Gestión de paquetes'; + + @override + String get plugInType => 'Tipo de inserción'; + + @override + String get port => 'Puerto'; + + @override + String get preview => 'Vista previa'; + + @override + String get privateKey => 'Llave privada'; + + @override + String get process => 'Proceso'; + + @override + String get pushToken => 'Token de notificaciones'; + + @override + String get pveIgnoreCertTip => 'No se recomienda activarlo, ¡tenga cuidado con los riesgos de seguridad! Si está utilizando el certificado predeterminado de PVE, debe habilitar esta opción.'; + + @override + String get pveLoginFailed => 'Fallo al iniciar sesión. No se puede autenticar con el nombre de usuario/contraseña de la configuración del servidor para el inicio de sesión de Linux PAM.'; + + @override + String get pveVersionLow => 'Esta función está actualmente en fase de prueba y solo se ha probado en PVE 8+. Úsela con precaución.'; + + @override + String get pwd => 'Contraseña'; + + @override + String get read => 'Leer'; + + @override + String get reboot => 'Reiniciar'; + + @override + String get rememberPwdInMem => 'Recordar contraseña en la memoria'; + + @override + String get rememberPwdInMemTip => 'Utilizado para contenedores, suspensión, etc.'; + + @override + String get rememberWindowSize => 'Recordar el tamaño de la ventana'; + + @override + String get remotePath => 'Ruta remota'; + + @override + String get restart => 'Reiniciar'; + + @override + String get result => 'Resultado'; + + @override + String get rotateAngel => 'Ángulo de rotación'; + + @override + String get route => 'Enrutamiento'; + + @override + String get run => 'Ejecutar'; + + @override + String get running => 'En ejecución'; + + @override + String get sameIdServerExist => 'Ya existe un servidor con el mismo ID'; + + @override + String get save => 'Guardar'; + + @override + String get saved => 'Guardado'; + + @override + String get second => 'Segundo'; + + @override + String get sensors => 'Sensores'; + + @override + String get sequence => 'Secuencia'; + + @override + String get server => 'Servidor'; + + @override + String get serverDetailOrder => 'Orden de los componentes en la página de detalles del servidor'; + + @override + String get serverFuncBtns => 'Botones de función del servidor'; + + @override + String get serverOrder => 'Orden del servidor'; + + @override + String get sftpDlPrepare => 'Preparando para conectar al servidor...'; + + @override + String get sftpEditorTip => 'Si está vacío, use el editor de archivos incorporado de la aplicación. Si hay un valor, use el editor del servidor remoto, por ejemplo, `vim` (se recomienda detectar automáticamente según `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Usar `rm -r` en SFTP para eliminar directorios'; + + @override + String get sftpSSHConnected => 'SFTP conectado...'; + + @override + String get sftpShowFoldersFirst => 'Mostrar carpetas primero'; + + @override + String get showDistLogo => 'Mostrar logo de distribución'; + + @override + String get shutdown => 'Apagar'; + + @override + String get size => 'Tamaño'; + + @override + String get snippet => 'Fragmento de código'; + + @override + String get softWrap => 'Salto de línea suave'; + + @override + String get specifyDev => 'Especificar dispositivo'; + + @override + String get specifyDevTip => 'Por ejemplo, las estadísticas de tráfico de red son por defecto para todos los dispositivos. Aquí puede especificar un dispositivo en particular.'; + + @override + String get speed => 'Velocidad'; + + @override + String spentTime(Object time) { + return 'Tiempo gastado: $time'; + } + + @override + String get sshTermHelp => 'Cuando el terminal es desplazable, arrastrar horizontalmente puede seleccionar texto. Hacer clic en el botón del teclado enciende/apaga el teclado. El icono de archivo abre el SFTP de la ruta actual. El botón del portapapeles copia el contenido cuando se selecciona texto y pega el contenido del portapapeles en el terminal cuando no se selecciona texto y hay contenido en el portapapeles. El icono de código pega fragmentos de código en el terminal y los ejecuta.'; + + @override + String sshTip(Object url) { + return 'Esta función está en fase de pruebas.\n\nPor favor, informa los problemas en $url, o únete a nuestro desarrollo.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Desactivación automática de teclas virtuales'; + + @override + String get start => 'Iniciar'; + + @override + String get stat => 'Estadísticas'; + + @override + String get stats => 'Estadísticas'; + + @override + String get stop => 'Detener'; + + @override + String get stopped => 'Detenido'; + + @override + String get storage => 'Almacenamiento'; + + @override + String get supportFmtArgs => 'Soporta los siguientes argumentos de formato:'; + + @override + String get suspend => 'Suspender'; + + @override + String get suspendTip => 'La función de suspender necesita permisos de root y soporte de systemd.'; + + @override + String switchTo(Object val) { + return 'Cambiar a $val'; + } + + @override + String get sync => 'Sincronizar'; + + @override + String get syncTip => 'Puede que necesites reiniciar para que algunos cambios tengan efecto.'; + + @override + String get system => 'Sistema'; + + @override + String get tag => 'Etiqueta'; + + @override + String get temperature => 'Temperatura'; + + @override + String get termFontSizeTip => 'Este ajuste afectará el tamaño del terminal (ancho y alto). Puedes hacer zoom en la página del terminal para ajustar el tamaño de fuente de la sesión actual.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Prueba'; + + @override + String get textScaler => 'Escalar texto'; + + @override + String get textScalerTip => '1.0 => 100% (tamaño original), solo afecta a ciertas fuentes en la página del servidor, no se recomienda modificar.'; + + @override + String get theme => 'Tema'; + + @override + String get time => 'Tiempo'; + + @override + String get times => 'Veces'; + + @override + String get total => 'Total'; + + @override + String get traffic => 'Tráfico'; + + @override + String get trySudo => 'Intentar con sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Desconocido'; + + @override + String get unkownConvertMode => 'Modo de conversión desconocido'; + + @override + String get update => 'Actualizar'; + + @override + String get updateIntervalEqual0 => 'Si configuras esto a 0, el estado del servidor no se refrescará automáticamente.\nY no se podrá calcular el uso de CPU.'; + + @override + String get updateServerStatusInterval => 'Intervalo de actualización del estado del servidor'; + + @override + String get upload => 'Subir'; + + @override + String get upsideDown => 'Invertir arriba por abajo'; + + @override + String get uptime => 'Tiempo de actividad'; + + @override + String get useCdn => 'Usando CDN'; + + @override + String get useCdnTip => 'Se recomienda a los usuarios no chinos utilizar CDN. ¿Le gustaría utilizarlo?'; + + @override + String get useNoPwd => 'Se usará sin contraseña'; + + @override + String get usePodmanByDefault => 'Usar Podman por defecto'; + + @override + String get used => 'Usado'; + + @override + String get view => 'Vista'; + + @override + String get viewErr => 'Ver error'; + + @override + String get virtKeyHelpClipboard => 'Si el terminal tiene caracteres seleccionados, entonces copiará los caracteres seleccionados al portapapeles, de lo contrario, pegará el contenido del portapapeles al terminal.'; + + @override + String get virtKeyHelpIME => 'Encender/apagar el teclado'; + + @override + String get virtKeyHelpSFTP => 'Abrir la ruta actual en SFTP.'; + + @override + String get waitConnection => 'Por favor, espera a que la conexión se establezca'; + + @override + String get wakeLock => 'Mantener despierto'; + + @override + String get watchNotPaired => 'No hay un Apple Watch emparejado'; + + @override + String get webdavSettingEmpty => 'La configuración de Webdav está vacía'; + + @override + String get whenOpenApp => 'Al abrir la App'; + + @override + String get wolTip => 'Después de configurar WOL (Wake-on-LAN), se envía una solicitud de WOL cada vez que se conecta el servidor.'; + + @override + String get write => 'Escribir'; + + @override + String get writeScriptFailTip => 'La escritura en el script falló, posiblemente por falta de permisos o porque el directorio no existe.'; + + @override + String get writeScriptTip => 'Después de conectarse al servidor, se escribirá un script en ~/.config/server_box para monitorear el estado del sistema. Puedes revisar el contenido del script.'; +} diff --git a/lib/generated/l10n/l10n_fr.dart b/lib/generated/l10n/l10n_fr.dart new file mode 100644 index 000000000..0a81b0f58 --- /dev/null +++ b/lib/generated/l10n/l10n_fr.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for French (`fr`). +class AppLocalizationsFr extends AppLocalizations { + AppLocalizationsFr([String locale = 'fr']) : super(locale); + + @override + String get aboutThanks => 'Merci aux personnes suivantes qui ont participé.'; + + @override + String get acceptBeta => 'Accepter les mises à jour de la version de test'; + + @override + String get addSystemPrivateKeyTip => 'Actuellement, vous n\'avez aucune clé privée. Souhaitez-vous ajouter celle qui vient avec le système (~/.ssh/id_rsa) ?'; + + @override + String get added2List => 'Ajouté à la liste des tâches'; + + @override + String get addr => 'Adresse'; + + @override + String get alreadyLastDir => 'Déjà dans le dernier répertoire.'; + + @override + String get authFailTip => 'Échec de l\'authentification. Veuillez vérifier si le mot de passe/clé/hôte/utilisateur, etc., est incorrect.'; + + @override + String get autoBackupConflict => 'Un seul sauvegarde automatique peut être activé en même temps.'; + + @override + String get autoConnect => 'Connexion automatique'; + + @override + String get autoRun => 'Exécution automatique'; + + @override + String get autoUpdateHomeWidget => 'Mise à jour automatique du widget d\'accueil'; + + @override + String get backupTip => 'Les données exportées sont simplement chiffrées. \nVeuillez les garder en sécurité.'; + + @override + String get backupVersionNotMatch => 'La version de sauvegarde ne correspond pas.'; + + @override + String get battery => 'Batterie'; + + @override + String get bgRun => 'Exécution en arrière-plan'; + + @override + String get bgRunTip => 'Cette option signifie seulement que le programme essaiera de s\'exécuter en arrière-plan, que cela soit possible dépend de l\'autorisation activée ou non. Pour Android natif, veuillez désactiver l\'« Optimisation de la batterie » dans cette application, et pour MIUI, veuillez changer la politique d\'économie d\'énergie en « Illimité ».'; + + @override + String get cmd => 'Commande'; + + @override + String get collapseUITip => 'Indique si les longues listes présentées dans l\'interface utilisateur doivent être réduites par défaut.'; + + @override + String get conn => 'Connexion'; + + @override + String get container => 'Conteneur'; + + @override + String get containerTrySudoTip => 'Par exemple : Dans l\'application, l\'utilisateur est défini comme aaa, mais Docker est installé sous l\'utilisateur root. Dans ce cas, vous devez activer cette option.'; + + @override + String get convert => 'Convertir'; + + @override + String get copyPath => 'Copier le chemin'; + + @override + String get cpuViewAsProgressTip => 'Afficher le taux d\'utilisation de chaque CPU sous forme de barre de progression (ancien style)'; + + @override + String get cursorType => 'Type de curseur'; + + @override + String get customCmd => 'Commandes personnalisées'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Nom de la commande\": \"Commande\"'; + + @override + String get decode => 'Décoder'; + + @override + String get decompress => 'Décompresser'; + + @override + String get deleteServers => 'Supprimer des serveurs en lot'; + + @override + String get dirEmpty => 'Assurez-vous que le répertoire est vide.'; + + @override + String get disconnected => 'Déconnecté'; + + @override + String get disk => 'Disque'; + + @override + String get diskIgnorePath => 'Chemin à ignorer pour le disque'; + + @override + String get displayCpuIndex => 'Afficher l\'index CPU'; + + @override + String dl2Local(Object fileName) { + return 'Télécharger $fileName localement ?'; + } + + @override + String get dockerEmptyRunningItems => 'Aucun conteneur en cours d\'exécution.\nCela peut être dû à :\n- L\'utilisateur d\'installation de Docker n\'est pas le même que celui configuré dans l\'application.\n- La variable d\'environnement DOCKER_HOST n\'a pas été lue correctement. Vous pouvez l\'obtenir en exécutant `echo \$DOCKER_HOST` dans le terminal.'; + + @override + String dockerImagesFmt(Object count) { + return '$count images'; + } + + @override + String get dockerNotInstalled => 'Docker non installé'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount en cours d\'exécution, $stoppedCount conteneur arrêté.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count conteneur en cours d\'exécution.'; + } + + @override + String get doubleColumnMode => 'Mode double colonne'; + + @override + String get doubleColumnTip => 'Cette option n\'active que la fonctionnalité, qu\'elle puisse être activée dépend de la largeur de l\'appareil.'; + + @override + String get editVirtKeys => 'Modifier les touches virtuelles'; + + @override + String get editor => 'Éditeur'; + + @override + String get editorHighlightTip => 'La performance actuelle de mise en surbrillance du code est pire et peut être désactivée en option pour s\'améliorer.'; + + @override + String get encode => 'Encoder'; + + @override + String get envVars => 'Variable d’environnement'; + + @override + String get experimentalFeature => 'Fonctionnalité expérimentale'; + + @override + String get extraArgs => 'Arguments supplémentaires'; + + @override + String get fallbackSshDest => 'Destino SSH alternativo'; + + @override + String get fdroidReleaseTip => 'Si vous avez téléchargé cette application depuis F-Droid, il est recommandé de désactiver cette option.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'Fichier \'$file\' trop volumineux $size, max $sizeMax'; + } + + @override + String get followSystem => 'Suivre le système'; + + @override + String get font => 'Police'; + + @override + String get fontSize => 'Taille de la police'; + + @override + String get force => 'Forcer'; + + @override + String get fullScreen => 'Mode plein écran'; + + @override + String get fullScreenJitter => 'Secousse en plein écran'; + + @override + String get fullScreenJitterHelp => 'Pour éviter les brûlures d\'écran'; + + @override + String get fullScreenTip => 'Le mode plein écran doit-il être activé lorsque l\'appareil est orienté en mode paysage ? Cette option s\'applique uniquement à l\'onglet serveur.'; + + @override + String get goBackQ => 'Revenir en arrière ?'; + + @override + String get goto => 'Aller à'; + + @override + String get hideTitleBar => 'Masquer la barre de titre'; + + @override + String get highlight => 'Mise en surbrillance du code'; + + @override + String get homeWidgetUrlConfig => 'Configurer l\'URL du widget d\'accueil'; + + @override + String get host => 'Hôte'; + + @override + String httpFailedWithCode(Object code) { + return 'Échec de la requête, code d\'état : $code'; + } + + @override + String get ignoreCert => 'Ignorer le certificat'; + + @override + String get image => 'Image'; + + @override + String get imagesList => 'Liste des images'; + + @override + String get init => 'Initialiser'; + + @override + String get inner => 'Interne'; + + @override + String get install => 'Installer'; + + @override + String get installDockerWithUrl => 'Veuillez d\'abord installer docker depuis https://docs.docker.com/engine/install.'; + + @override + String get invalid => 'Invalide'; + + @override + String get jumpServer => 'Aller au serveur'; + + @override + String get keepForeground => 'Garder l\'application en premier plan !'; + + @override + String get keepStatusWhenErr => 'Conserver l\'état du dernier serveur'; + + @override + String get keepStatusWhenErrTip => 'Uniquement en cas d\'erreur lors de l\'exécution du script'; + + @override + String get keyAuth => 'Authentification par clé'; + + @override + String get letterCache => 'Mise en cache des lettres'; + + @override + String get letterCacheTip => 'Recommandé de désactiver, mais après désactivation, il sera impossible de saisir des caractères CJK.'; + + @override + String get license => 'Licence'; + + @override + String get location => 'Emplacement'; + + @override + String get loss => 'Perte'; + + @override + String madeWithLove(Object myGithub) { + return 'Fabriqué avec ❤️ par $myGithub'; + } + + @override + String get manual => 'Manuel'; + + @override + String get max => 'max'; + + @override + String get maxRetryCount => 'Nombre de reconnexions au serveur'; + + @override + String get maxRetryCountEqual0 => 'Il va réessayer encore et encore.'; + + @override + String get min => 'min'; + + @override + String get mission => 'Mission'; + + @override + String get more => 'Plus'; + + @override + String get moveOutServerFuncBtnsHelp => 'Activé : peut être affiché sous chaque carte sur la page de l\'onglet Serveur. Désactivé : peut être affiché en haut de la page de détails du serveur.'; + + @override + String get ms => 'ms'; + + @override + String get needHomeDir => 'Si vous êtes utilisateur Synology, [consultez ici](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Les utilisateurs d\'autres systèmes doivent rechercher comment créer un répertoire personnel.'; + + @override + String get needRestart => 'Nécessite un redémarrage de l\'application'; + + @override + String get net => 'Réseau'; + + @override + String get netViewType => 'Type de vue réseau'; + + @override + String get newContainer => 'Nouveau conteneur'; + + @override + String get noLineChart => 'Ne pas utiliser de graphiques linéaires'; + + @override + String get noLineChartForCpu => 'Ne pas utiliser de graphiques linéaires pour l\'unité centrale'; + + @override + String get noPrivateKeyTip => 'La clé privée n\'existe pas, elle a peut-être été supprimée ou il y a une erreur de configuration.'; + + @override + String get noPromptAgain => 'Ne pas demander à nouveau'; + + @override + String get node => 'Nœud'; + + @override + String get notAvailable => 'Indisponible'; + + @override + String get onServerDetailPage => 'Sur la page de détails du serveur'; + + @override + String get onlyOneLine => 'Afficher uniquement en une seule ligne (défilement)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Fonctionne uniquement lorsque le nombre de cœurs est > 8'; + + @override + String get openLastPath => 'Ouvrir le dernier chemin'; + + @override + String get openLastPathTip => 'Les différents serveurs auront des journaux différents, et le journal est le chemin vers la sortie'; + + @override + String get parseContainerStatsTip => 'L\'analyse de l\'occupation des conteneurs Docker est relativement lente.'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% de $size'; + } + + @override + String get permission => 'Permissions'; + + @override + String get pingAvg => 'Moy.:'; + + @override + String get pingInputIP => 'Veuillez saisir une adresse IP / un domaine cible.'; + + @override + String get pingNoServer => 'Aucun serveur à pinger.\nVeuillez ajouter un serveur dans l\'onglet serveur.'; + + @override + String get pkg => 'Pkg'; + + @override + String get plugInType => 'Type d\'insertion'; + + @override + String get port => 'Port'; + + @override + String get preview => 'Aperçu'; + + @override + String get privateKey => 'Clé privée'; + + @override + String get process => 'Processus'; + + @override + String get pushToken => 'Jeton d\'identification'; + + @override + String get pveIgnoreCertTip => 'Il n\'est pas recommandé de l\'activer, attention aux risques de sécurité ! Si vous utilisez le certificat par défaut de PVE, vous devez activer cette option.'; + + @override + String get pveLoginFailed => 'Échec de la connexion. Impossible d\'authentifier avec le nom d\'utilisateur / mot de passe de la configuration du serveur pour la connexion Linux PAM.'; + + @override + String get pveVersionLow => 'Cette fonctionnalité est actuellement en phase de test et n\'a été testée que sur PVE 8+. Veuillez l\'utiliser avec prudence.'; + + @override + String get pwd => 'Mot de passe'; + + @override + String get read => 'Lire'; + + @override + String get reboot => 'Redémarrer'; + + @override + String get rememberPwdInMem => 'Mémoriser le mot de passe en mémoire'; + + @override + String get rememberPwdInMemTip => 'Utilisé pour les conteneurs, la suspension, etc.'; + + @override + String get rememberWindowSize => 'Se souvenir de la taille de la fenêtre'; + + @override + String get remotePath => 'Chemin distant'; + + @override + String get restart => 'Redémarrer'; + + @override + String get result => 'Résultat'; + + @override + String get rotateAngel => 'Angle de rotation'; + + @override + String get route => 'Routage'; + + @override + String get run => 'Exécuter'; + + @override + String get running => 'En cours d\'exécution'; + + @override + String get sameIdServerExist => 'Un serveur avec le même ID existe déjà'; + + @override + String get save => 'Enregistrer'; + + @override + String get saved => 'Enregistré'; + + @override + String get second => 's'; + + @override + String get sensors => 'Capteurs'; + + @override + String get sequence => 'Séquence'; + + @override + String get server => 'Serveur'; + + @override + String get serverDetailOrder => 'Ordre des widgets de la page de détails du serveur'; + + @override + String get serverFuncBtns => 'Boutons de fonction du serveur'; + + @override + String get serverOrder => 'Ordre du serveur'; + + @override + String get sftpDlPrepare => 'Préparation de la connexion...'; + + @override + String get sftpEditorTip => 'Si vide, utilisez l’éditeur de fichiers intégré de l’application. Si une valeur est présente, utilisez l’éditeur du serveur distant, par exemple `vim` (il est recommandé de détecter automatiquement selon `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Utilisez `rm -r` pour supprimer un dossier en SFTP.'; + + @override + String get sftpSSHConnected => 'SFTP Connecté'; + + @override + String get sftpShowFoldersFirst => 'Afficher d\'abord les dossiers'; + + @override + String get showDistLogo => 'Afficher le logo de la distribution'; + + @override + String get shutdown => 'Éteindre'; + + @override + String get size => 'Taille'; + + @override + String get snippet => 'Extrait'; + + @override + String get softWrap => 'Retour à la ligne souple'; + + @override + String get specifyDev => 'Spécifier l\'appareil'; + + @override + String get specifyDevTip => 'Par exemple, les statistiques de trafic réseau concernent par défaut tous les appareils. Vous pouvez spécifier ici un appareil particulier.'; + + @override + String get speed => 'Vitesse'; + + @override + String spentTime(Object time) { + return 'Temps écoulé : $time'; + } + + @override + String get sshTermHelp => 'Lorsque le terminal est défilable, faire glisser horizontalement permet de sélectionner du texte. En cliquant sur le bouton du clavier, vous activez/désactivez le clavier. L\'icône de fichier ouvre le chemin actuel SFTP. Le bouton du presse-papiers copie le contenu lorsque du texte est sélectionné, et colle le contenu du presse-papiers dans le terminal lorsqu\'aucun texte n\'est sélectionné et qu\'il y a du contenu dans le presse-papiers. L\'icône de code colle des extraits de code dans le terminal et les exécute.'; + + @override + String sshTip(Object url) { + return 'Cette fonctionnalité est actuellement à l\'étape expérimentale.\n\nVeuillez signaler les bugs sur $url ou rejoindre notre développement.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Activation automatique des touches virtuelles'; + + @override + String get start => 'Démarrer'; + + @override + String get stat => 'Statistiques'; + + @override + String get stats => 'Statistiques'; + + @override + String get stop => 'Arrêter'; + + @override + String get stopped => 'Arrêté'; + + @override + String get storage => 'Stockage'; + + @override + String get supportFmtArgs => 'Les paramètres de mise en forme suivants sont pris en charge :'; + + @override + String get suspend => 'Suspendre'; + + @override + String get suspendTip => 'La fonction de suspension nécessite des privilèges root et le support de systemd.'; + + @override + String switchTo(Object val) { + return 'Passer à $val'; + } + + @override + String get sync => 'Sync'; + + @override + String get syncTip => 'Un redémarrage peut être nécessaire pour que certains changements prennent effet.'; + + @override + String get system => 'Système'; + + @override + String get tag => 'Étiquettes'; + + @override + String get temperature => 'Température'; + + @override + String get termFontSizeTip => 'Ce paramètre affectera la taille du terminal (largeur et hauteur). Vous pouvez zoomer sur la page du terminal pour ajuster la taille de la police de la session en cours.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Tester'; + + @override + String get textScaler => 'Mise à l\'échelle du texte'; + + @override + String get textScalerTip => '1.0 => 100% (taille originale), fonctionne uniquement sur la partie de la police de la page du serveur, il est déconseillé de la modifier.'; + + @override + String get theme => 'Thème'; + + @override + String get time => 'Temps'; + + @override + String get times => 'Fois'; + + @override + String get total => 'Total'; + + @override + String get traffic => 'Trafic'; + + @override + String get trySudo => 'Essayer d\'utiliser sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Inconnu'; + + @override + String get unkownConvertMode => 'Mode de conversion inconnu'; + + @override + String get update => 'Mettre à jour'; + + @override + String get updateIntervalEqual0 => 'Vous avez défini à 0, la mise à jour ne se fera pas automatiquement.\nImpossible de calculer l\'état du CPU.'; + + @override + String get updateServerStatusInterval => 'Intervalle de mise à jour de l\'état du serveur'; + + @override + String get upload => 'Télécharger'; + + @override + String get upsideDown => 'À l\'envers'; + + @override + String get uptime => 'Temps d\'activité'; + + @override + String get useCdn => 'Utiliser CDN'; + + @override + String get useCdnTip => 'Il est recommandé aux utilisateurs non chinois d\'utiliser le CDN. Souhaitez-vous l\'utiliser ?'; + + @override + String get useNoPwd => 'Aucun mot de passe ne sera utilisé'; + + @override + String get usePodmanByDefault => 'Par défaut avec Podman'; + + @override + String get used => 'Utilisé'; + + @override + String get view => 'Vue'; + + @override + String get viewErr => 'Voir erreur'; + + @override + String get virtKeyHelpClipboard => 'Copiez dans le presse-papiers si le terminal sélectionné n\'est pas vide, sinon collez le contenu du presse-papiers dans le terminal.'; + + @override + String get virtKeyHelpIME => 'Activer/désactiver le clavier'; + + @override + String get virtKeyHelpSFTP => 'Ouvrir le répertoire actuel en SFTP.'; + + @override + String get waitConnection => 'Veuillez attendre que la connexion soit établie.'; + + @override + String get wakeLock => 'Maintenir éveillé'; + + @override + String get watchNotPaired => 'Aucune Apple Watch associée'; + + @override + String get webdavSettingEmpty => 'Le paramètre Webdav est vide'; + + @override + String get whenOpenApp => 'À l\'ouverture de l\'application'; + + @override + String get wolTip => 'Après avoir configuré le WOL (Wake-on-LAN), une requête WOL est envoyée chaque fois que le serveur est connecté.'; + + @override + String get write => 'Écrire'; + + @override + String get writeScriptFailTip => 'Échec de l\'écriture dans le script, probablement en raison d\'un manque de permissions ou que le répertoire n\'existe pas.'; + + @override + String get writeScriptTip => 'Après la connexion au serveur, un script sera écrit dans ~/.config/server_box pour surveiller l’état du système. Vous pouvez examiner le contenu du script.'; +} diff --git a/lib/generated/l10n/l10n_id.dart b/lib/generated/l10n/l10n_id.dart new file mode 100644 index 000000000..e010d1251 --- /dev/null +++ b/lib/generated/l10n/l10n_id.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Indonesian (`id`). +class AppLocalizationsId extends AppLocalizations { + AppLocalizationsId([String locale = 'id']) : super(locale); + + @override + String get aboutThanks => 'Terima kasih kepada orang -orang berikut yang berpartisipasi.'; + + @override + String get acceptBeta => 'Terima pembaruan versi uji coba'; + + @override + String get addSystemPrivateKeyTip => 'Saat ini tidak memiliki kunci privat, apakah Anda menambahkan kunci yang disertakan dengan sistem (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Ditambahkan ke Daftar Tugas'; + + @override + String get addr => 'Alamat'; + + @override + String get alreadyLastDir => 'Sudah di direktori terakhir.'; + + @override + String get authFailTip => 'Otentikasi gagal, silakan periksa apakah kata sandi/kunci/host/pengguna, dll, salah.'; + + @override + String get autoBackupConflict => 'Hanya satu pencadangan otomatis yang dapat diaktifkan pada saat yang bersamaan.'; + + @override + String get autoConnect => 'Hubungkan otomatis'; + + @override + String get autoRun => 'Berjalan Otomatis'; + + @override + String get autoUpdateHomeWidget => 'Widget Rumah Pembaruan Otomatis'; + + @override + String get backupTip => 'Data yang diekspor hanya dienkripsi.\nTolong jaga keamanannya.'; + + @override + String get backupVersionNotMatch => 'Versi cadangan tidak cocok.'; + + @override + String get battery => 'Baterai'; + + @override + String get bgRun => 'Jalankan di Backgroud'; + + @override + String get bgRunTip => 'Sakelar ini hanya berarti aplikasi akan mencoba berjalan di latar belakang, apakah aplikasi dapat berjalan di latar belakang tergantung pada apakah izin diaktifkan atau tidak. Untuk Android asli, nonaktifkan \"Pengoptimalan Baterai\" di aplikasi ini, dan untuk miui, ubah kebijakan penghematan daya ke \"Tidak Terbatas\".'; + + @override + String get cmd => 'Memerintah'; + + @override + String get collapseUITip => 'Apakah akan menciutkan daftar panjang yang ada di UI secara default atau tidak'; + + @override + String get conn => 'Koneksi'; + + @override + String get container => 'Wadah'; + + @override + String get containerTrySudoTip => 'Contohnya: Di dalam aplikasi, pengguna diatur sebagai aaa, tetapi Docker diinstal di bawah pengguna root. Dalam kasus ini, Anda perlu mengaktifkan opsi ini.'; + + @override + String get convert => 'Mengubah'; + + @override + String get copyPath => 'Path Copy'; + + @override + String get cpuViewAsProgressTip => 'Tampilkan tingkat penggunaan setiap CPU dalam gaya bilah kemajuan (gaya lama)'; + + @override + String get cursorType => 'Jenis kursor'; + + @override + String get customCmd => 'Perintah kustom'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Nama Perintah\": \"Perintah\"'; + + @override + String get decode => 'Membaca sandi'; + + @override + String get decompress => 'Dekompresi'; + + @override + String get deleteServers => 'Penghapusan server secara batch'; + + @override + String get dirEmpty => 'Pastikan dir kosong.'; + + @override + String get disconnected => 'Terputus'; + + @override + String get disk => 'Disk'; + + @override + String get diskIgnorePath => 'Abaikan jalan untuk disk'; + + @override + String get displayCpuIndex => 'Tampilkan indeks CPU'; + + @override + String dl2Local(Object fileName) { + return 'Unduh $fileName ke lokal?'; + } + + @override + String get dockerEmptyRunningItems => 'Tidak ada wadah yang sedang berjalan.\nHal ini dapat terjadi karena:\n- Pengguna instalasi Docker tidak sama dengan nama pengguna yang dikonfigurasi di dalam Aplikasi.\n- Variabel lingkungan DOCKER_HOST tidak terbaca dengan benar. Anda bisa mendapatkannya dengan menjalankan `echo \$DOCKER_HOST` di terminal.'; + + @override + String dockerImagesFmt(Object count) { + return '$count gambar'; + } + + @override + String get dockerNotInstalled => 'Docker tidak terpasang'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount running, $stoppedCount container stopped.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count wadah berjalan.'; + } + + @override + String get doubleColumnMode => 'Mode kolom ganda'; + + @override + String get doubleColumnTip => 'Opsi ini hanya mengaktifkan fitur, apakah itu benar-benar dapat diaktifkan tergantung pada lebar perangkat'; + + @override + String get editVirtKeys => 'Edit kunci virtual'; + + @override + String get editor => 'Editor'; + + @override + String get editorHighlightTip => 'Performa penyorotan kode saat ini lebih buruk, dan dapat dimatikan secara opsional untuk perbaikan.'; + + @override + String get encode => 'Menyandi'; + + @override + String get envVars => 'Variabel lingkungan'; + + @override + String get experimentalFeature => 'Fitur eksperimental'; + + @override + String get extraArgs => 'Args ekstra'; + + @override + String get fallbackSshDest => 'Tujuan SSH mundur'; + + @override + String get fdroidReleaseTip => 'Jika Anda mengunduh aplikasi ini dari F-Droid, disarankan untuk mematikan opsi ini.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'File \'$file\' terlalu besar $size, max $sizeMax'; + } + + @override + String get followSystem => 'Ikuti sistem'; + + @override + String get font => 'Font'; + + @override + String get fontSize => 'Ukuran huruf'; + + @override + String get force => 'sukarela'; + + @override + String get fullScreen => 'Mode Layar Penuh'; + + @override + String get fullScreenJitter => 'Jitter layar penuh'; + + @override + String get fullScreenJitterHelp => 'Untuk menghindari pembakaran layar'; + + @override + String get fullScreenTip => 'Apakah mode layar penuh diaktifkan ketika perangkat diputar ke modus lanskap? Opsi ini hanya berlaku untuk tab server.'; + + @override + String get goBackQ => 'Datang kembali?'; + + @override + String get goto => 'Pergi ke'; + + @override + String get hideTitleBar => 'Sembunyikan bilah judul'; + + @override + String get highlight => 'Sorotan kode'; + + @override + String get homeWidgetUrlConfig => 'Konfigurasi URL Widget Rumah'; + + @override + String get host => 'Host'; + + @override + String httpFailedWithCode(Object code) { + return 'Permintaan gagal, kode status: $code'; + } + + @override + String get ignoreCert => 'Abaikan sertifikat'; + + @override + String get image => 'Gambar'; + + @override + String get imagesList => 'Daftar gambar'; + + @override + String get init => 'Menginisialisasi'; + + @override + String get inner => 'Batin'; + + @override + String get install => 'Install'; + + @override + String get installDockerWithUrl => 'Silakan https://docs.docker.com/engine/install Docker pertama.'; + + @override + String get invalid => 'Tidak valid'; + + @override + String get jumpServer => 'Lompat server'; + + @override + String get keepForeground => 'Simpan Aplikasi Foreground!'; + + @override + String get keepStatusWhenErr => 'Menyimpan status server terakhir'; + + @override + String get keepStatusWhenErrTip => 'Hanya ketika terjadi kesalahan saat menjalankan skrip'; + + @override + String get keyAuth => 'Auth kunci'; + + @override + String get letterCache => 'Caching huruf'; + + @override + String get letterCacheTip => 'Direkomendasikan untuk menonaktifkan, tetapi setelah dinonaktifkan, tidak mungkin untuk memasukkan karakter CJK.'; + + @override + String get license => 'Lisensi'; + + @override + String get location => 'Lokasi'; + + @override + String get loss => 'kehilangan'; + + @override + String madeWithLove(Object myGithub) { + return 'Dibuat dengan ❤️ oleh $myGithub'; + } + + @override + String get manual => 'Manual'; + + @override + String get max => 'Max'; + + @override + String get maxRetryCount => 'Jumlah penyambungan kembali server'; + + @override + String get maxRetryCountEqual0 => 'Akan mencoba lagi lagi dan lagi.'; + + @override + String get min => 'Min'; + + @override + String get mission => 'Misi'; + + @override + String get more => 'Lebih Banyak'; + + @override + String get moveOutServerFuncBtnsHelp => 'Aktif: dapat ditampilkan di bawah setiap kartu pada halaman Tab Server. Nonaktif: dapat ditampilkan di bagian atas halaman Rincian Server.'; + + @override + String get ms => 'MS'; + + @override + String get needHomeDir => 'Jika Anda pengguna Synology, [lihat di sini](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Pengguna sistem lain perlu mencari cara membuat direktori home.'; + + @override + String get needRestart => 'Perlu memulai ulang aplikasi'; + + @override + String get net => 'Jaringan'; + + @override + String get netViewType => 'Jenis tampilan bersih'; + + @override + String get newContainer => 'Wadah baru'; + + @override + String get noLineChart => 'Jangan gunakan grafik garis'; + + @override + String get noLineChartForCpu => 'Jangan gunakan diagram garis untuk CPU'; + + @override + String get noPrivateKeyTip => 'Kunci privat tidak ada, mungkin telah dihapus atau ada kesalahan konfigurasi.'; + + @override + String get noPromptAgain => 'Jangan tanya lagi'; + + @override + String get node => 'Node'; + + @override + String get notAvailable => 'Tidak tersedia'; + + @override + String get onServerDetailPage => 'Di halaman detail server'; + + @override + String get onlyOneLine => 'Hanya tampilkan sebagai satu baris (dapat digulir)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Berlaku hanya ketika jumlah inti > 8'; + + @override + String get openLastPath => 'Buka jalur terakhir'; + + @override + String get openLastPathTip => 'Server yang berbeda akan memiliki catatan yang berbeda, dan catatan tersebut adalah jalur menuju pintu keluar'; + + @override + String get parseContainerStatsTip => 'Parsing status okupansi oleh Docker agak lambat'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% dari $size'; + } + + @override + String get permission => 'Izin'; + + @override + String get pingAvg => 'Rata -rata:'; + + @override + String get pingInputIP => 'Harap masukkan IP / domain target.'; + + @override + String get pingNoServer => 'Tidak ada server untuk melakukan ping.\nHarap tambahkan server di tab Server.'; + + @override + String get pkg => 'Pkg'; + + @override + String get plugInType => 'Jenis Penyisipan'; + + @override + String get port => 'Port'; + + @override + String get preview => 'Pratinjau'; + + @override + String get privateKey => 'Kunci Pribadi'; + + @override + String get process => 'Proses'; + + @override + String get pushToken => 'Dorong token'; + + @override + String get pveIgnoreCertTip => 'Tidak disarankan untuk diaktifkan, waspadai risiko keamanan! Jika Anda menggunakan sertifikat default dari PVE, Anda perlu mengaktifkan opsi ini.'; + + @override + String get pveLoginFailed => 'Login gagal. Tidak dapat mengautentikasi dengan nama pengguna/kata sandi dari konfigurasi server untuk login Linux PAM.'; + + @override + String get pveVersionLow => 'Fitur ini saat ini sedang dalam tahap pengujian dan hanya diuji pada PVE 8+. Gunakan dengan hati-hati.'; + + @override + String get pwd => 'Kata sandi'; + + @override + String get read => 'Baca'; + + @override + String get reboot => 'Reboot'; + + @override + String get rememberPwdInMem => 'Ingat kata sandi di dalam memori'; + + @override + String get rememberPwdInMemTip => 'Digunakan untuk kontainer, menangguhkan, dll.'; + + @override + String get rememberWindowSize => 'Ingat ukuran jendela'; + + @override + String get remotePath => 'Jalur jarak jauh'; + + @override + String get restart => 'Mengulang kembali'; + + @override + String get result => 'Hasil'; + + @override + String get rotateAngel => 'Sudut rotasi'; + + @override + String get route => 'Routing'; + + @override + String get run => 'Berlari'; + + @override + String get running => 'berlari'; + + @override + String get sameIdServerExist => 'Server dengan ID yang sama sudah ada'; + + @override + String get save => 'Menyimpan'; + + @override + String get saved => 'Diselamatkan'; + + @override + String get second => 'S'; + + @override + String get sensors => 'Sensor'; + + @override + String get sequence => 'Urutan'; + + @override + String get server => 'Server'; + + @override + String get serverDetailOrder => 'Detail pesanan widget halaman'; + + @override + String get serverFuncBtns => 'Tombol fungsi server'; + + @override + String get serverOrder => 'Pesanan server'; + + @override + String get sftpDlPrepare => 'Bersiap untuk terhubung ...'; + + @override + String get sftpEditorTip => 'Jika kosong, gunakan editor file bawaan aplikasi. Jika ada nilai, gunakan editor server jarak jauh, misalnya `vim` (disarankan untuk mendeteksi secara otomatis sesuai `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Gunakan `rm -r` untuk menghapus dir di SFTP'; + + @override + String get sftpSSHConnected => 'Sftp terhubung'; + + @override + String get sftpShowFoldersFirst => 'Folder ditampilkan lebih dulu'; + + @override + String get showDistLogo => 'Tampilkan logo distribusi'; + + @override + String get shutdown => 'Matikan'; + + @override + String get size => 'Ukuran'; + + @override + String get snippet => 'Snippet'; + + @override + String get softWrap => 'Pembungkus lembut'; + + @override + String get specifyDev => 'Tentukan perangkat'; + + @override + String get specifyDevTip => 'Misalnya, statistik lalu lintas jaringan secara default adalah untuk semua perangkat. Anda dapat menentukan perangkat tertentu di sini.'; + + @override + String get speed => 'Kecepatan'; + + @override + String spentTime(Object time) { + return 'Menghabiskan waktu: $time'; + } + + @override + String get sshTermHelp => 'Ketika terminal dapat digulirkan, menggeser secara horizontal dapat memilih teks. Mengklik tombol keyboard mengaktifkan/menonaktifkan keyboard. Ikon file membuka SFTP jalur saat ini. Tombol papan klip menyalin konten saat teks dipilih, dan menempelkan konten dari papan klip ke terminal saat tidak ada teks yang dipilih dan ada konten di papan klip. Ikon kode menempelkan potongan kode ke terminal dan mengeksekusinya.'; + + @override + String sshTip(Object url) { + return 'Fungsi ini sekarang dalam tahap eksperimen.\n\nHarap laporkan bug di $url atau bergabunglah dengan pengembangan kami.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Switching Otomatis Kunci Virtual'; + + @override + String get start => 'Awal'; + + @override + String get stat => 'Statistik'; + + @override + String get stats => 'Statistik'; + + @override + String get stop => 'Berhenti'; + + @override + String get stopped => 'dihentikan'; + + @override + String get storage => 'Penyimpanan'; + + @override + String get supportFmtArgs => 'Parameter pemformatan berikut ini didukung:'; + + @override + String get suspend => 'Suspend'; + + @override + String get suspendTip => 'Fungsi penangguhan memerlukan hak akses root dan dukungan systemd.'; + + @override + String switchTo(Object val) { + return 'Beralih ke $val'; + } + + @override + String get sync => 'Sinkronisasi'; + + @override + String get syncTip => 'Pengaktifan ulang mungkin diperlukan agar beberapa perubahan dapat diterapkan.'; + + @override + String get system => 'Sistem'; + + @override + String get tag => 'Tag'; + + @override + String get temperature => 'Suhu'; + + @override + String get termFontSizeTip => 'Pengaturan ini akan memengaruhi ukuran terminal (lebar dan tinggi). Anda dapat melakukan zoom pada halaman terminal untuk menyesuaikan ukuran font sesi saat ini.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'pengujian'; + + @override + String get textScaler => 'Penskalaan font'; + + @override + String get textScalerTip => '1.0 => 100% (ukuran asli), hanya berfungsi pada bagian halaman server font, tidak disarankan untuk diubah.'; + + @override + String get theme => ' Tema'; + + @override + String get time => 'Waktu'; + + @override + String get times => 'Waktu'; + + @override + String get total => 'Total'; + + @override + String get traffic => 'Lalu lintas'; + + @override + String get trySudo => 'Cobalah menggunakan sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Tidak dikenal'; + + @override + String get unkownConvertMode => 'Mode Konversi Tidak Diketahui'; + + @override + String get update => 'Memperbarui'; + + @override + String get updateIntervalEqual0 => 'Anda mengatur ke 0, tidak akan memperbarui secara otomatis.\nTidak dapat menghitung status CPU.'; + + @override + String get updateServerStatusInterval => 'Interval Pembaruan Status Server'; + + @override + String get upload => 'Mengunggah'; + + @override + String get upsideDown => 'Terbalik'; + + @override + String get uptime => 'Uptime'; + + @override + String get useCdn => 'Menggunakan CDN'; + + @override + String get useCdnTip => 'Pengguna non-Cina disarankan menggunakan CDN. Apakah Anda ingin menggunakannya?'; + + @override + String get useNoPwd => 'Tidak ada kata sandi yang akan digunakan'; + + @override + String get usePodmanByDefault => 'Menggunakan Podman sebagai bawaan'; + + @override + String get used => 'Digunakan'; + + @override + String get view => 'Tampilan'; + + @override + String get viewErr => 'Lihat kesalahan'; + + @override + String get virtKeyHelpClipboard => 'Salin ke clipboard jika terminal yang dipilih tidak kosong, jika tidak, tempel isi clipboard ke terminal.'; + + @override + String get virtKeyHelpIME => 'Menyalakan/mematikan keyboard'; + + @override + String get virtKeyHelpSFTP => 'Buka direktori saat ini di SFTP.'; + + @override + String get waitConnection => 'Harap tunggu koneksi akan dibuat.'; + + @override + String get wakeLock => 'Tetap terjaga'; + + @override + String get watchNotPaired => 'Tidak ada Apple Watch yang dipasangkan'; + + @override + String get webdavSettingEmpty => 'Pengaturan webdav kosong'; + + @override + String get whenOpenApp => 'Saat membuka aplikasi'; + + @override + String get wolTip => 'Setelah mengonfigurasi WOL (Wake-on-LAN), permintaan WOL dikirim setiap kali server terhubung.'; + + @override + String get write => 'Tulis'; + + @override + String get writeScriptFailTip => 'Penulisan ke skrip gagal, mungkin karena tidak ada izin atau direktori tidak ada.'; + + @override + String get writeScriptTip => 'Setelah terhubung ke server, sebuah skrip akan ditulis ke ~/.config/server_box untuk memantau status sistem. Anda dapat meninjau konten skrip tersebut.'; +} diff --git a/lib/generated/l10n/l10n_ja.dart b/lib/generated/l10n/l10n_ja.dart new file mode 100644 index 000000000..f7755770c --- /dev/null +++ b/lib/generated/l10n/l10n_ja.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Japanese (`ja`). +class AppLocalizationsJa extends AppLocalizations { + AppLocalizationsJa([String locale = 'ja']) : super(locale); + + @override + String get aboutThanks => '以下の参加者に感謝します。'; + + @override + String get acceptBeta => 'テストバージョンの更新を受け入れる'; + + @override + String get addSystemPrivateKeyTip => '現在秘密鍵がありません。システムのデフォルト(~/.ssh/id_rsa)を追加しますか?'; + + @override + String get added2List => 'タスクリストに追加されました'; + + @override + String get addr => 'アドレス'; + + @override + String get alreadyLastDir => 'すでに最上位のディレクトリです'; + + @override + String get authFailTip => '認証に失敗しました。パスワード/鍵/ホスト/ユーザーなどが間違っていないか確認してください。'; + + @override + String get autoBackupConflict => '自動バックアップは一度に一つしか開始できません'; + + @override + String get autoConnect => '自動接続'; + + @override + String get autoRun => '自動実行'; + + @override + String get autoUpdateHomeWidget => 'ホームウィジェットを自動更新'; + + @override + String get backupTip => 'エクスポートされたデータは簡単に暗号化されています。適切に保管してください。'; + + @override + String get backupVersionNotMatch => 'バックアップバージョンが一致しないため、復元できません'; + + @override + String get battery => 'バッテリー'; + + @override + String get bgRun => 'バックグラウンド実行'; + + @override + String get bgRunTip => 'このスイッチはプログラムがバックグラウンドで実行を試みることを意味しますが、実際にバックグラウンドで実行できるかどうかは、権限が有効になっているかに依存します。AOSPベースのAndroid ROMでは、このアプリの「バッテリー最適化」をオフにしてください。MIUIでは、省エネモードを「無制限」に変更してください。'; + + @override + String get cmd => 'コマンド'; + + @override + String get collapseUITip => 'UIの長いリストをデフォルトで折りたたむかどうか'; + + @override + String get conn => '接続'; + + @override + String get container => 'コンテナ'; + + @override + String get containerTrySudoTip => '例:アプリ内でユーザーをaaaに設定しているが、Dockerがrootユーザーでインストールされている場合、このオプションを有効にする必要があります'; + + @override + String get convert => '変換'; + + @override + String get copyPath => 'パスをコピー'; + + @override + String get cpuViewAsProgressTip => '各CPUの使用率をプログレスバースタイルで表示する(旧スタイル)'; + + @override + String get cursorType => 'カーソルタイプ'; + + @override + String get customCmd => 'カスタムコマンド'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"コマンド名\": \"コマンド\"'; + + @override + String get decode => 'デコード'; + + @override + String get decompress => '解凍'; + + @override + String get deleteServers => 'サーバーを一括削除'; + + @override + String get dirEmpty => 'フォルダーが空であることを確認してください'; + + @override + String get disconnected => '接続が切断されました'; + + @override + String get disk => 'ディスク'; + + @override + String get diskIgnorePath => '無視されたディスクパス'; + + @override + String get displayCpuIndex => 'CPUインデックスを表示する'; + + @override + String dl2Local(Object fileName) { + return '$fileNameをローカルにダウンロードしますか?'; + } + + @override + String get dockerEmptyRunningItems => '実行中のコンテナがありません。\nこれは次の理由による可能性があります:\n- Dockerのインストールユーザーとアプリ内の設定されたユーザー名が異なる\n- 環境変数DOCKER_HOSTが正しく読み込まれていない。ターミナルで`echo \$DOCKER_HOST`を実行して取得できます。'; + + @override + String dockerImagesFmt(Object count) { + return '合計$countイメージ'; + } + + @override + String get dockerNotInstalled => 'Dockerがインストールされていません'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount個が実行中、$stoppedCount個が停止中'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count個のコンテナが実行中'; + } + + @override + String get doubleColumnMode => 'ダブルカラムモード'; + + @override + String get doubleColumnTip => 'このオプションは機能を有効にするだけで、実際に有効にできるかどうかはデバイスの幅に依存します'; + + @override + String get editVirtKeys => '仮想キーを編集'; + + @override + String get editor => 'エディター'; + + @override + String get editorHighlightTip => '現在のコードハイライトのパフォーマンスはかなり悪いため、改善するために無効にすることを選択できます。'; + + @override + String get encode => 'エンコード'; + + @override + String get envVars => '環境変数'; + + @override + String get experimentalFeature => '実験的な機能'; + + @override + String get extraArgs => '追加引数'; + + @override + String get fallbackSshDest => 'フォールバックSSH宛先'; + + @override + String get fdroidReleaseTip => 'このアプリをF-Droidからダウンロードした場合、このオプションをオフにすることをお勧めします。'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'ファイル \'$file\' は大きすぎます \'$size\'、$sizeMax を超えています'; + } + + @override + String get followSystem => 'システムに従う'; + + @override + String get font => 'フォント'; + + @override + String get fontSize => 'フォントサイズ'; + + @override + String get force => '強制'; + + @override + String get fullScreen => 'フルスクリーンモード'; + + @override + String get fullScreenJitter => 'フルスクリーンモードのジッター'; + + @override + String get fullScreenJitterHelp => '焼き付き防止'; + + @override + String get fullScreenTip => 'デバイスが横向きに回転したときにフルスクリーンモードを有効にしますか?このオプションはサーバータブにのみ適用されます。'; + + @override + String get goBackQ => '戻りますか?'; + + @override + String get goto => '移動'; + + @override + String get hideTitleBar => 'タイトルバーを非表示にする'; + + @override + String get highlight => 'コードハイライト'; + + @override + String get homeWidgetUrlConfig => 'ホームウィジェットURL設定'; + + @override + String get host => 'ホスト'; + + @override + String httpFailedWithCode(Object code) { + return 'リクエスト失敗、ステータスコード: $code'; + } + + @override + String get ignoreCert => '証明書を無視する'; + + @override + String get image => 'イメージ'; + + @override + String get imagesList => 'イメージリスト'; + + @override + String get init => '初期化する'; + + @override + String get inner => '内蔵'; + + @override + String get install => 'インストール'; + + @override + String get installDockerWithUrl => '最初に https://docs.docker.com/engine/install dockerをインストールしてください'; + + @override + String get invalid => '無効'; + + @override + String get jumpServer => 'ジャンプサーバー'; + + @override + String get keepForeground => 'アプリを前面に保ってください!'; + + @override + String get keepStatusWhenErr => 'エラー時に前回のサーバーステータスを保持'; + + @override + String get keepStatusWhenErrTip => 'スクリプトの実行エラーに限ります'; + + @override + String get keyAuth => 'キー認証'; + + @override + String get letterCache => '文字キャッシング'; + + @override + String get letterCacheTip => '無効にすることを推奨しますが、無効にした後はCJK文字を入力することができなくなります。'; + + @override + String get license => 'オープンソースライセンス'; + + @override + String get location => '場所'; + + @override + String get loss => 'パケットロス'; + + @override + String madeWithLove(Object myGithub) { + return '$myGithubによって❤️で作成済み'; + } + + @override + String get manual => 'マニュアル'; + + @override + String get max => '最大'; + + @override + String get maxRetryCount => 'サーバーの再接続試行回数'; + + @override + String get maxRetryCountEqual0 => '無限に再試行します'; + + @override + String get min => '最小'; + + @override + String get mission => 'ミッション'; + + @override + String get more => 'もっと'; + + @override + String get moveOutServerFuncBtnsHelp => '有効にする:サーバータブの各カードの下に表示されます。無効にする:サーバーの詳細ページの上部に表示されます。'; + + @override + String get ms => 'ミリ秒'; + + @override + String get needHomeDir => 'Synologyユーザーの場合は、[こちらをご覧ください](https://kb.synology.com/DSM/tutorial/user_enable_home_service)。他のシステムのユーザーは、ホームディレクトリの作成方法を検索する必要があります。'; + + @override + String get needRestart => 'アプリを再起動する必要があります'; + + @override + String get net => 'ネットワーク'; + + @override + String get netViewType => 'ネットワークビュータイプ'; + + @override + String get newContainer => '新しいコンテナを作成'; + + @override + String get noLineChart => '折れ線グラフを使用しない'; + + @override + String get noLineChartForCpu => 'CPUに折れ線グラフを使わない'; + + @override + String get noPrivateKeyTip => '秘密鍵が存在しません。削除されたか、設定ミスがある可能性があります。'; + + @override + String get noPromptAgain => '再度確認しない'; + + @override + String get node => 'ノード'; + + @override + String get notAvailable => '利用不可'; + + @override + String get onServerDetailPage => 'サーバーの詳細ページで'; + + @override + String get onlyOneLine => '一行のみ表示(スクロール可能)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'コア数が8より大きい場合にのみ有効'; + + @override + String get openLastPath => '最後のパスを開く'; + + @override + String get openLastPathTip => '異なるサーバーには異なる記録があり、記録されているのは退出時のパスです'; + + @override + String get parseContainerStatsTip => 'Dockerの使用状況の解析は比較的遅いです'; + + @override + String percentOfSize(Object percent, Object size) { + return '$size の $percent%'; + } + + @override + String get permission => '権限'; + + @override + String get pingAvg => '平均:'; + + @override + String get pingInputIP => '対象のIPまたはドメインを入力してください'; + + @override + String get pingNoServer => 'Pingに使用するサーバーがありません\nサーバータブでサーバーを追加してから再試行してください'; + + @override + String get pkg => 'パッケージ管理'; + + @override + String get plugInType => '挿入タイプ'; + + @override + String get port => 'ポート'; + + @override + String get preview => 'プレビュー'; + + @override + String get privateKey => '秘密鍵'; + + @override + String get process => 'プロセス'; + + @override + String get pushToken => 'プッシュトークン'; + + @override + String get pveIgnoreCertTip => 'オプションを有効にすることは推奨されません、セキュリティリスクに注意してください!PVEのデフォルト証明書を使用している場合は、このオプションを有効にする必要があります。'; + + @override + String get pveLoginFailed => 'ログインに失敗しました。Linux PAMログインのためにサーバー構成からのユーザー名/パスワードで認証できません。'; + + @override + String get pveVersionLow => 'この機能は現在テスト段階にあり、PVE 8+でのみテストされています。ご利用の際は慎重に。'; + + @override + String get pwd => 'パスワード'; + + @override + String get read => '読み取り'; + + @override + String get reboot => '再起動'; + + @override + String get rememberPwdInMem => 'メモリにパスワードを記憶する'; + + @override + String get rememberPwdInMemTip => 'コンテナ、一時停止などに使用されます。'; + + @override + String get rememberWindowSize => 'ウィンドウサイズを記憶する'; + + @override + String get remotePath => 'リモートパス'; + + @override + String get restart => '再開'; + + @override + String get result => '結果'; + + @override + String get rotateAngel => '回転角度'; + + @override + String get route => 'ルーティング'; + + @override + String get run => '実行'; + + @override + String get running => '実行中'; + + @override + String get sameIdServerExist => '同じIDのサーバーが既に存在します'; + + @override + String get save => '保存'; + + @override + String get saved => '保存されました'; + + @override + String get second => '秒'; + + @override + String get sensors => 'センサー'; + + @override + String get sequence => '順序'; + + @override + String get server => 'サーバー'; + + @override + String get serverDetailOrder => '詳細ページのウィジェット順序'; + + @override + String get serverFuncBtns => 'サーバー機能ボタン'; + + @override + String get serverOrder => 'サーバー順序'; + + @override + String get sftpDlPrepare => 'サーバーへの接続を準備中...'; + + @override + String get sftpEditorTip => '空の場合は、アプリ内蔵のファイルエディタを使用します。値がある場合は、リモートサーバーのエディタ(例:`vim`)を使用します(`EDITOR` に従って自動検出することをお勧めします)。'; + + @override + String get sftpRmrDirSummary => 'SFTPで`rm -r`を使用してフォルダーを削除'; + + @override + String get sftpSSHConnected => 'SFTPに接続されました...'; + + @override + String get sftpShowFoldersFirst => 'フォルダーを先に表示'; + + @override + String get showDistLogo => 'ディストリビューションのロゴを表示'; + + @override + String get shutdown => 'シャットダウン'; + + @override + String get size => 'サイズ'; + + @override + String get snippet => 'スニペット'; + + @override + String get softWrap => 'ソフトラップ'; + + @override + String get specifyDev => 'デバイスを指定'; + + @override + String get specifyDevTip => '例えば、ネットワークトラフィック統計はデフォルトですべてのデバイスに対するものです。ここで特定のデバイスを指定できます。'; + + @override + String get speed => '速度'; + + @override + String spentTime(Object time) { + return '費した時間: $time'; + } + + @override + String get sshTermHelp => 'ターミナルがスクロール可能な場合、横にドラッグするとテキストを選択できます。キーボードボタンをクリックするとキーボードのオン/オフが切り替わります。ファイルアイコンは現在のパスSFTPを開きます。クリップボードボタンは、テキストが選択されているときに内容をコピーし、テキストが選択されておらずクリップボードに内容がある場合には、その内容をターミナルに貼り付けます。コードアイコンは、コードスニペットをターミナルに貼り付けて実行します。'; + + @override + String sshTip(Object url) { + return 'この機能は現在テスト段階にあります。\n\n問題がある場合は、$urlでフィードバックしてください。'; + } + + @override + String get sshVirtualKeyAutoOff => '仮想キーの自動オフ'; + + @override + String get start => '開始'; + + @override + String get stat => '統計'; + + @override + String get stats => '統計'; + + @override + String get stop => '停止'; + + @override + String get stopped => '停止しました'; + + @override + String get storage => 'ストレージ'; + + @override + String get supportFmtArgs => '以下のフォーマット引数がサポートされています:'; + + @override + String get suspend => '中断'; + + @override + String get suspendTip => 'suspend機能はroot権限とsystemdのサポートが必要です。'; + + @override + String switchTo(Object val) { + return '$valに切り替える'; + } + + @override + String get sync => '同期する'; + + @override + String get syncTip => '再起動が必要な場合があります。一部の変更はその後に有効になります。'; + + @override + String get system => 'システム'; + + @override + String get tag => 'タグ'; + + @override + String get temperature => '温度'; + + @override + String get termFontSizeTip => 'この設定は端末のサイズ(幅と高さ)に影響します。現在のセッションのフォントサイズを調整するために、端末ページを拡大縮小できます。'; + + @override + String get terminal => 'ターミナル'; + + @override + String get test => 'テスト'; + + @override + String get textScaler => 'テキストスケーラー'; + + @override + String get textScalerTip => '1.0 => 100%(デフォルトサイズ)。サーバーページの一部のテキストにのみ適用されます。変更をお勧めしません。'; + + @override + String get theme => 'テーマ'; + + @override + String get time => '時間'; + + @override + String get times => '回'; + + @override + String get total => '合計'; + + @override + String get traffic => 'トラフィック'; + + @override + String get trySudo => 'sudoを試みる'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => '不明'; + + @override + String get unkownConvertMode => '未知の変換モード'; + + @override + String get update => '更新'; + + @override + String get updateIntervalEqual0 => '0に設定すると、サーバーの状態は自動的に更新されず、CPU使用率も計算できません。'; + + @override + String get updateServerStatusInterval => 'サーバー状態の更新間隔'; + + @override + String get upload => 'アップロード'; + + @override + String get upsideDown => '上下逆転'; + + @override + String get uptime => '稼働時間'; + + @override + String get useCdn => 'CDNの使用'; + + @override + String get useCdnTip => '中国以外のユーザーにはCDNの使用が推奨されています。ご利用しますか?'; + + @override + String get useNoPwd => 'パスワードなしで使用します'; + + @override + String get usePodmanByDefault => 'デフォルトでPodmanを使用'; + + @override + String get used => '使用済み'; + + @override + String get view => 'ビュー'; + + @override + String get viewErr => 'エラーを表示'; + + @override + String get virtKeyHelpClipboard => '端末に選択された文字がある場合は、選択された文字をクリップボードにコピーします。そうでない場合は、クリップボードの内容を端末に貼り付けます。'; + + @override + String get virtKeyHelpIME => 'キーボードのオン/オフ'; + + @override + String get virtKeyHelpSFTP => '現在のパスでSFTPを開く。'; + + @override + String get waitConnection => '接続の確立を待ってください'; + + @override + String get wakeLock => '起動を保つ'; + + @override + String get watchNotPaired => 'ペアリングされたApple Watchがありません'; + + @override + String get webdavSettingEmpty => 'Webdavの設定が空です'; + + @override + String get whenOpenApp => 'アプリを開くとき'; + + @override + String get wolTip => 'WOL(Wake-on-LAN)を設定した後、サーバーに接続するたびにWOLリクエストが送信されます。'; + + @override + String get write => '書き込み'; + + @override + String get writeScriptFailTip => 'スクリプトの書き込みに失敗しました。権限がないかディレクトリが存在しない可能性があります。'; + + @override + String get writeScriptTip => 'サーバーに接続すると、システムの状態を監視するためのスクリプトが ~/.config/server_box に書き込まれます。スクリプトの内容を確認できます。'; +} diff --git a/lib/generated/l10n/l10n_nl.dart b/lib/generated/l10n/l10n_nl.dart new file mode 100644 index 000000000..4fe062f9b --- /dev/null +++ b/lib/generated/l10n/l10n_nl.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Dutch Flemish (`nl`). +class AppLocalizationsNl extends AppLocalizations { + AppLocalizationsNl([String locale = 'nl']) : super(locale); + + @override + String get aboutThanks => 'Met dank aan de volgende mensen die hebben deelgenomen aan.'; + + @override + String get acceptBeta => 'Accepteer testversie-updates'; + + @override + String get addSystemPrivateKeyTip => 'Er is momenteel geen privésleutel, wilt u degene toevoegen die bij het systeem wordt geleverd (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Toegevoegd aan takenlijst'; + + @override + String get addr => 'Adres'; + + @override + String get alreadyLastDir => 'Al in de laatst gebruikte map.'; + + @override + String get authFailTip => 'Authenticatie mislukt, controleer of het wachtwoord/sleutel/host/gebruiker, enz., incorrect zijn.'; + + @override + String get autoBackupConflict => 'Er kan slechts één automatische back-up tegelijk worden ingeschakeld.'; + + @override + String get autoConnect => 'Automatisch verbinden'; + + @override + String get autoRun => 'Automatisch uitvoeren'; + + @override + String get autoUpdateHomeWidget => 'Automatische update van home-widget'; + + @override + String get backupTip => 'De geëxporteerde gegevens zijn simpelweg versleuteld. \nBewaar deze aub veilig.'; + + @override + String get backupVersionNotMatch => 'Back-upversie komt niet overeen.'; + + @override + String get battery => 'Batterij'; + + @override + String get bgRun => 'Uitvoeren op de achtergrond'; + + @override + String get bgRunTip => 'Deze schakelaar betekent alleen dat het programma zal proberen op de achtergrond uit te voeren, of het in de achtergrond kan worden uitgevoerd, hangt af van of de toestemming is ingeschakeld of niet. Voor native Android, schakel \"Batterijoptimalisatie\" uit in deze app, en voor miui, wijzig de energiebesparingsbeleid naar \"Onbeperkt\".'; + + @override + String get cmd => 'Opdracht'; + + @override + String get collapseUITip => 'Of lange lijsten in de UI standaard moeten worden ingeklapt'; + + @override + String get conn => 'Verbinding'; + + @override + String get container => 'Container'; + + @override + String get containerTrySudoTip => 'Bijvoorbeeld: in de app is de gebruiker ingesteld op aaa, maar Docker is geïnstalleerd onder de rootgebruiker. In dit geval moet u deze optie inschakelen.'; + + @override + String get convert => 'Converteren'; + + @override + String get copyPath => 'Pad kopiëren'; + + @override + String get cpuViewAsProgressTip => 'Toon het gebruik van elke CPU in een voortgangsbalkstijl (oude stijl)'; + + @override + String get cursorType => 'Cursortype'; + + @override + String get customCmd => 'Aangepaste opdrachten'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Opdrachtnaam\": \"Opdracht\"'; + + @override + String get decode => 'Decoderen'; + + @override + String get decompress => 'Decomprimeren'; + + @override + String get deleteServers => 'Servers batchgewijs verwijderen'; + + @override + String get dirEmpty => 'Zorg ervoor dat de map leeg is.'; + + @override + String get disconnected => 'Verbroken'; + + @override + String get disk => 'Schijf'; + + @override + String get diskIgnorePath => 'Pad negeren voor schijf'; + + @override + String get displayCpuIndex => 'Toon de CPU-index'; + + @override + String dl2Local(Object fileName) { + return 'Download $fileName naar lokaal?'; + } + + @override + String get dockerEmptyRunningItems => 'Er zijn geen actieve containers.\nDit kan komen doordat:\n- De Docker-installatiegebruiker niet overeenkomt met de gebruikersnaam die is geconfigureerd binnen de app.\n- De omgevingsvariabele DOCKER_HOST is niet correct gelezen. U kunt deze krijgen door `echo \$DOCKER_HOST` in de terminal uit te voeren.'; + + @override + String dockerImagesFmt(Object count) { + return '$count afbeeldingen'; + } + + @override + String get dockerNotInstalled => 'Docker niet geïnstalleerd'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount actief, $stoppedCount container gestopt.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count container actief.'; + } + + @override + String get doubleColumnMode => 'Dubbele kolommodus'; + + @override + String get doubleColumnTip => 'Deze optie schakelt alleen de functie in, of deze daadwerkelijk kan worden ingeschakeld, hangt af van de breedte van het apparaat'; + + @override + String get editVirtKeys => 'Virtuele toetsen bewerken'; + + @override + String get editor => 'Editor'; + + @override + String get editorHighlightTip => 'De huidige codehighlighting-prestaties zijn slechter en kunnen optioneel worden uitgeschakeld om te verbeteren.'; + + @override + String get encode => 'Coderen'; + + @override + String get envVars => 'Omgevingsvariabele'; + + @override + String get experimentalFeature => 'Experimentele functie'; + + @override + String get extraArgs => 'Extra argumenten'; + + @override + String get fallbackSshDest => 'Fallback SSH-bestemming'; + + @override + String get fdroidReleaseTip => 'Als u deze app van F-Droid heeft gedownload, wordt aanbevolen deze optie uit te schakelen.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'Bestand \'$file\' te groot $size, max $sizeMax'; + } + + @override + String get followSystem => 'Volg systeem'; + + @override + String get font => 'Lettertype'; + + @override + String get fontSize => 'Lettergrootte'; + + @override + String get force => 'Forceer'; + + @override + String get fullScreen => 'Volledig schermmodus'; + + @override + String get fullScreenJitter => 'Volledig scherm trilling'; + + @override + String get fullScreenJitterHelp => 'Om inbranden van het scherm te voorkomen'; + + @override + String get fullScreenTip => 'Moet de volledig schermmodus worden ingeschakeld wanneer het apparaat naar de liggende modus wordt gedraaid? Deze optie is alleen van toepassing op het servertabblad.'; + + @override + String get goBackQ => 'Terug gaan?'; + + @override + String get goto => 'Ga naar'; + + @override + String get hideTitleBar => 'Titelbalk verbergen'; + + @override + String get highlight => 'Code-highlight'; + + @override + String get homeWidgetUrlConfig => 'Home-widget-url configureren'; + + @override + String get host => 'Host'; + + @override + String httpFailedWithCode(Object code) { + return 'verzoek mislukt, statuscode: $code'; + } + + @override + String get ignoreCert => 'Certificaat negeren'; + + @override + String get image => 'Afbeelding'; + + @override + String get imagesList => 'Lijst met afbeeldingen'; + + @override + String get init => 'Initialiseren'; + + @override + String get inner => 'Intern'; + + @override + String get install => 'Installeren'; + + @override + String get installDockerWithUrl => 'Installeer eerst docker via https://docs.docker.com/engine/install.'; + + @override + String get invalid => 'Ongeldig'; + + @override + String get jumpServer => 'Spring naar server'; + + @override + String get keepForeground => 'Houd de app op de voorgrond!'; + + @override + String get keepStatusWhenErr => 'Behoud de laatste serverstatus'; + + @override + String get keepStatusWhenErrTip => 'Alleen in geval van een fout tijdens de scriptuitvoering'; + + @override + String get keyAuth => 'Sleutelauthenticatie'; + + @override + String get letterCache => 'Lettercaching'; + + @override + String get letterCacheTip => 'Aanbevolen om uit te schakelen, maar na het uitschakelen is het niet mogelijk om CJK-tekens in te voeren.'; + + @override + String get license => 'Licentie'; + + @override + String get location => 'Locatie'; + + @override + String get loss => 'verlies'; + + @override + String madeWithLove(Object myGithub) { + return 'Gemaakt met ❤️ door $myGithub'; + } + + @override + String get manual => 'Handleiding'; + + @override + String get max => 'max'; + + @override + String get maxRetryCount => 'Aantal serverherverbindingen'; + + @override + String get maxRetryCountEqual0 => 'Zal opnieuw blijven proberen.'; + + @override + String get min => 'min'; + + @override + String get mission => 'Missie'; + + @override + String get more => 'Meer'; + + @override + String get moveOutServerFuncBtnsHelp => 'Aan: kan worden weergegeven onder elke kaart op de Server-tabbladpagina. Uit: kan worden weergegeven bovenaan de Serverdetails-pagina.'; + + @override + String get ms => 'ms'; + + @override + String get needHomeDir => 'Als u een Synology-gebruiker bent, [zie hier](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Gebruikers van andere systemen moeten zoeken hoe ze een home directory kunnen creëren.'; + + @override + String get needRestart => 'App moet opnieuw worden gestart'; + + @override + String get net => 'Netwerk'; + + @override + String get netViewType => 'Netweergavetype'; + + @override + String get newContainer => 'Nieuwe container'; + + @override + String get noLineChart => 'lijndiagrammen gebruiken'; + + @override + String get noLineChartForCpu => 'Gebruik geen lijndiagrammen voor CPU'; + + @override + String get noPrivateKeyTip => 'De privésleutel bestaat niet, deze is mogelijk verwijderd of er is een configuratiefout.'; + + @override + String get noPromptAgain => 'Niet meer vragen'; + + @override + String get node => 'Node'; + + @override + String get notAvailable => 'Niet beschikbaar'; + + @override + String get onServerDetailPage => 'Op serverdetailspagina'; + + @override + String get onlyOneLine => 'Alleen als één regel weergeven (scrollbaar)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Alleen effectief wanneer het aantal cores > 8'; + + @override + String get openLastPath => 'Open het laatste pad'; + + @override + String get openLastPathTip => 'Verschillende servers hebben verschillende logs, en de log is het pad naar de uitgang'; + + @override + String get parseContainerStatsTip => 'Het parsen van de bezettingsstatus van Docker is relatief langzaam.'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% van $size'; + } + + @override + String get permission => 'Machtigingen'; + + @override + String get pingAvg => 'Gem:'; + + @override + String get pingInputIP => 'Voer een doel-IP / domein in.'; + + @override + String get pingNoServer => 'Geen server om te pingen.\nVoeg een server toe in het servertabblad.'; + + @override + String get pkg => 'Pkg'; + + @override + String get plugInType => 'Invoegingstype'; + + @override + String get port => 'Poort'; + + @override + String get preview => 'Voorbeeld'; + + @override + String get privateKey => 'Privésleutel'; + + @override + String get process => 'Proces'; + + @override + String get pushToken => 'Push-token'; + + @override + String get pveIgnoreCertTip => 'Niet aanbevolen om in te schakelen, let op beveiligingsrisico\'s! Als u de standaardcertificaat van PVE gebruikt, moet u deze optie inschakelen.'; + + @override + String get pveLoginFailed => 'Aanmelden mislukt. Kan niet authenticeren met gebruikersnaam/wachtwoord van serverconfiguratie voor Linux PAM-login.'; + + @override + String get pveVersionLow => 'Deze functie bevindt zich momenteel in de testfase en is alleen getest op PVE 8+. Gebruik het met voorzichtigheid.'; + + @override + String get pwd => 'Wachtwoord'; + + @override + String get read => 'Lezen'; + + @override + String get reboot => 'Herstart'; + + @override + String get rememberPwdInMem => 'Wachtwoord onthouden in geheugen'; + + @override + String get rememberPwdInMemTip => 'Gebruikt voor containers, opschorting, enz.'; + + @override + String get rememberWindowSize => 'Venstergrootte onthouden'; + + @override + String get remotePath => 'Extern pad'; + + @override + String get restart => 'Herstarten'; + + @override + String get result => 'Resultaat'; + + @override + String get rotateAngel => 'Rotatiehoek'; + + @override + String get route => 'Route'; + + @override + String get run => 'Uitvoeren'; + + @override + String get running => 'Uitgevoerd'; + + @override + String get sameIdServerExist => 'Er bestaat al een server met dezelfde ID'; + + @override + String get save => 'Opslaan'; + + @override + String get saved => 'Opgeslagen'; + + @override + String get second => 's'; + + @override + String get sensors => 'Sensor'; + + @override + String get sequence => 'Volgorde'; + + @override + String get server => 'Server'; + + @override + String get serverDetailOrder => 'Volgorde van widget op detailpagina'; + + @override + String get serverFuncBtns => 'Server functieknoppen'; + + @override + String get serverOrder => 'Servervolgorde'; + + @override + String get sftpDlPrepare => 'Voorbereiden om verbinding te maken...'; + + @override + String get sftpEditorTip => 'Indien leeg, gebruik de ingebouwde bestandseditor van de app. Indien een waarde aanwezig is, gebruik de editor van de externe server, bijvoorbeeld `vim` (aanbevolen om automatisch te detecteren volgens `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Gebruik `rm -r` om een map te verwijderen in SFTP.'; + + @override + String get sftpSSHConnected => 'SFTP Verbonden'; + + @override + String get sftpShowFoldersFirst => 'Mappen eerst weergeven'; + + @override + String get showDistLogo => 'Distributielogo weergeven'; + + @override + String get shutdown => 'Afsluiten'; + + @override + String get size => 'Grootte'; + + @override + String get snippet => 'Fragment'; + + @override + String get softWrap => 'Zachte wrap'; + + @override + String get specifyDev => 'Apparaat specificeren'; + + @override + String get specifyDevTip => 'Bijvoorbeeld, netwerkverkeersstatistieken zijn standaard voor alle apparaten. Hier kunt u een specifiek apparaat opgeven.'; + + @override + String get speed => 'Snelheid'; + + @override + String spentTime(Object time) { + return 'Gebruikte tijd: $time'; + } + + @override + String get sshTermHelp => 'Wanneer het terminal scrollbaar is, kan horizontaal slepen tekst selecteren. Klikken op de toetsenbordknop schakelt het toetsenbord aan/uit. Het bestandsicoon opent de huidige pad SFTP. De klembordknop kopieert de inhoud wanneer tekst is geselecteerd en plakt inhoud van het klembord in de terminal wanneer geen tekst is geselecteerd en er inhoud op het klembord staat. Het code-icoon plakt codefragmenten in de terminal en voert ze uit.'; + + @override + String sshTip(Object url) { + return 'Deze functie bevindt zich momenteel in de experimentele fase.\n\nMeld alstublieft bugs op $url of sluit je aan bij onze ontwikkeling.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Automatisch schakelen van virtuele toetsen'; + + @override + String get start => 'Starten'; + + @override + String get stat => 'Statistieken'; + + @override + String get stats => 'Statistieken'; + + @override + String get stop => 'Stoppen'; + + @override + String get stopped => 'Gestopt'; + + @override + String get storage => 'Opslag'; + + @override + String get supportFmtArgs => 'De volgende opmaakparameters worden ondersteund:'; + + @override + String get suspend => 'Ophangen'; + + @override + String get suspendTip => 'De opschortfunctie vereist rootrechten en systemd-ondersteuning.'; + + @override + String switchTo(Object val) { + return 'Overschakelen naar $val'; + } + + @override + String get sync => 'Sync'; + + @override + String get syncTip => 'Een herstart kan nodig zijn voor sommige wijzigingen om van kracht te worden.'; + + @override + String get system => 'Systeem'; + + @override + String get tag => 'Labels'; + + @override + String get temperature => 'Temperatuur'; + + @override + String get termFontSizeTip => 'Deze instelling heeft invloed op de terminalgrootte (breedte en hoogte). U kunt inzoomen op de terminalpagina om de lettergrootte van de huidige sessie aan te passen.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Testen'; + + @override + String get textScaler => 'Tekstschaler'; + + @override + String get textScalerTip => '1.0 => 100% (oorspronkelijke grootte), werkt alleen op het gedeelte van de serverpagina van het lettertype, niet aanbevolen om te wijzigen.'; + + @override + String get theme => 'Thema'; + + @override + String get time => 'Tijd'; + + @override + String get times => 'Keer'; + + @override + String get total => 'Totaal'; + + @override + String get traffic => 'Verkeer'; + + @override + String get trySudo => 'Probeer sudo te gebruiken'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Onbekend'; + + @override + String get unkownConvertMode => 'Onbekende conversiemodus'; + + @override + String get update => 'Bijwerken'; + + @override + String get updateIntervalEqual0 => 'Het staat op 0, het zal niet automatisch bijwerken\nCPU status kan niet berekend worden.'; + + @override + String get updateServerStatusInterval => 'Interne server status bijwerking interval'; + + @override + String get upload => 'Upload'; + + @override + String get upsideDown => 'Ondersteboven'; + + @override + String get uptime => 'Uptime'; + + @override + String get useCdn => 'Gebruikt CDN'; + + @override + String get useCdnTip => 'Niet-chinese gebruikers worden aangeraden om deze CDN te gebruiken. Wil je dat?'; + + @override + String get useNoPwd => 'Er zal geen wachtwoord gebruikt worden'; + + @override + String get usePodmanByDefault => 'Valt terug op Podman'; + + @override + String get used => 'Gebruikt'; + + @override + String get view => 'Weergave'; + + @override + String get viewErr => 'Zie foutmelding'; + + @override + String get virtKeyHelpClipboard => 'Kopiëren naar het klembord als de geselecteerde terminal niet leeg is, anders de inhoud van het klembord plakken in de terminal.'; + + @override + String get virtKeyHelpIME => 'Toetsenbord aan/uit zetten'; + + @override + String get virtKeyHelpSFTP => 'Huidige map openen in SFTP.'; + + @override + String get waitConnection => 'Wacht alstublieft tot de verbinding tot stand is gebracht.'; + + @override + String get wakeLock => 'Wakker houden'; + + @override + String get watchNotPaired => 'Geen gekoppelde Apple Watch'; + + @override + String get webdavSettingEmpty => 'Webdav-instelling is leeg'; + + @override + String get whenOpenApp => 'Bij het openen van de app'; + + @override + String get wolTip => 'Na het configureren van WOL (Wake-on-LAN), wordt elke keer dat de server wordt verbonden een WOL-verzoek verzonden.'; + + @override + String get write => 'Schrijven'; + + @override + String get writeScriptFailTip => 'Het schrijven naar het script is mislukt, mogelijk door gebrek aan rechten of omdat de map niet bestaat.'; + + @override + String get writeScriptTip => 'Na het verbinden met de server wordt een script geschreven naar ~/.config/server_box om de systeemstatus te monitoren. U kunt de inhoud van het script controleren.'; +} diff --git a/lib/generated/l10n/l10n_pt.dart b/lib/generated/l10n/l10n_pt.dart new file mode 100644 index 000000000..53fd28af2 --- /dev/null +++ b/lib/generated/l10n/l10n_pt.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Portuguese (`pt`). +class AppLocalizationsPt extends AppLocalizations { + AppLocalizationsPt([String locale = 'pt']) : super(locale); + + @override + String get aboutThanks => 'Agradecimentos a todos os participantes.'; + + @override + String get acceptBeta => 'Aceitar atualizações da versão de teste'; + + @override + String get addSystemPrivateKeyTip => 'Atualmente, não há nenhuma chave privada. Gostaria de adicionar a chave do sistema (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Adicionado à lista de tarefas'; + + @override + String get addr => 'Endereço'; + + @override + String get alreadyLastDir => 'Já é o diretório mais alto'; + + @override + String get authFailTip => 'Autenticação falhou, por favor verifique se a senha/chave/host/usuário, etc., estão incorretos.'; + + @override + String get autoBackupConflict => 'Apenas um backup automático pode ser ativado por vez'; + + @override + String get autoConnect => 'Conexão automática'; + + @override + String get autoRun => 'Execução automática'; + + @override + String get autoUpdateHomeWidget => 'Atualização automática do widget da tela inicial'; + + @override + String get backupTip => 'Os dados exportados são criptografados de forma simples, por favor, guarde-os com segurança.'; + + @override + String get backupVersionNotMatch => 'Versão de backup não compatível, não é possível restaurar'; + + @override + String get battery => 'Bateria'; + + @override + String get bgRun => 'Execução em segundo plano'; + + @override + String get bgRunTip => 'Este interruptor indica que o programa tentará rodar em segundo plano, mas a capacidade de fazer isso depende das permissões concedidas. No Android nativo, desative a \'Otimização de bateria\' para este app, no MIUI, altere a estratégia de economia de energia para \'Sem restrições\'.'; + + @override + String get cmd => 'Comando'; + + @override + String get collapseUITip => 'Deve colapsar listas longas na UI por padrão?'; + + @override + String get conn => 'Conectar'; + + @override + String get container => 'Contêiner'; + + @override + String get containerTrySudoTip => 'Por exemplo: se o usuário for definido como aaa dentro do app, mas o Docker estiver instalado sob o usuário root, esta opção precisará ser ativada'; + + @override + String get convert => 'Converter'; + + @override + String get copyPath => 'Copiar caminho'; + + @override + String get cpuViewAsProgressTip => 'Exiba a taxa de uso de cada CPU em estilo de barra de progresso (estilo antigo)'; + + @override + String get cursorType => 'Tipo de cursor'; + + @override + String get customCmd => 'Comandos personalizados'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Nome do comando\": \"Comando\"'; + + @override + String get decode => 'Decodificar'; + + @override + String get decompress => 'Descomprimir'; + + @override + String get deleteServers => 'Excluir servidores em lote'; + + @override + String get dirEmpty => 'Certifique-se de que a pasta está vazia'; + + @override + String get disconnected => 'Desconectado'; + + @override + String get disk => 'Disco'; + + @override + String get diskIgnorePath => 'Caminhos de disco ignorados'; + + @override + String get displayCpuIndex => 'Exiba o índice de CPU'; + + @override + String dl2Local(Object fileName) { + return 'Baixar $fileName para o local?'; + } + + @override + String get dockerEmptyRunningItems => 'Não há contêineres em execução.\nIsso pode ser porque:\n- O usuário que instalou o Docker difere do usuário configurado no app\n- A variável de ambiente DOCKER_HOST não foi lida corretamente. Você pode verificar isso executando `echo \$DOCKER_HOST` no terminal.'; + + @override + String dockerImagesFmt(Object count) { + return 'Total de $count imagens'; + } + + @override + String get dockerNotInstalled => 'Docker não instalado'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount em execução, $stoppedCount parados'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count contêiner(es) em execução'; + } + + @override + String get doubleColumnMode => 'Modo de coluna dupla'; + + @override + String get doubleColumnTip => 'Esta opção apenas ativa a funcionalidade, se ela será ativada depende também da largura do dispositivo'; + + @override + String get editVirtKeys => 'Editar teclas virtuais'; + + @override + String get editor => 'Editor'; + + @override + String get editorHighlightTip => 'O desempenho do destaque de código atualmente é ruim, pode optar por desativá-lo para melhorar.'; + + @override + String get encode => 'Codificar'; + + @override + String get envVars => 'Variável de ambiente'; + + @override + String get experimentalFeature => 'Recurso experimental'; + + @override + String get extraArgs => 'Argumentos extras'; + + @override + String get fallbackSshDest => 'Destino SSH de fallback'; + + @override + String get fdroidReleaseTip => 'Se você baixou este aplicativo do F-Droid, é recomendado desativar esta opção.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'Arquivo \'$file\' muito grande \'$size\', excedendo $sizeMax'; + } + + @override + String get followSystem => 'Seguir sistema'; + + @override + String get font => 'Fonte'; + + @override + String get fontSize => 'Tamanho da fonte'; + + @override + String get force => 'Forçar'; + + @override + String get fullScreen => 'Modo tela cheia'; + + @override + String get fullScreenJitter => 'Tremulação em tela cheia'; + + @override + String get fullScreenJitterHelp => 'Prevenir burn-in de tela'; + + @override + String get fullScreenTip => 'Deve ser ativado o modo de tela cheia quando o dispositivo é girado para o modo paisagem? Esta opção aplica-se apenas à aba do servidor.'; + + @override + String get goBackQ => 'Voltar?'; + + @override + String get goto => 'Ir para'; + + @override + String get hideTitleBar => 'Ocultar barra de título'; + + @override + String get highlight => 'Destaque de código'; + + @override + String get homeWidgetUrlConfig => 'Configuração de URL do widget da tela inicial'; + + @override + String get host => 'Host'; + + @override + String httpFailedWithCode(Object code) { + return 'Falha na solicitação, código de status: $code'; + } + + @override + String get ignoreCert => 'Ignorar certificado'; + + @override + String get image => 'Imagem'; + + @override + String get imagesList => 'Lista de imagens'; + + @override + String get init => 'Inicializar'; + + @override + String get inner => 'Interno'; + + @override + String get install => 'Instalar'; + + @override + String get installDockerWithUrl => 'Por favor, instale o Docker primeiro em https://docs.docker.com/engine/install'; + + @override + String get invalid => 'Inválido'; + + @override + String get jumpServer => 'Servidor de salto'; + + @override + String get keepForeground => 'Por favor, mantenha o app em primeiro plano!'; + + @override + String get keepStatusWhenErr => 'Manter o status anterior do servidor'; + + @override + String get keepStatusWhenErrTip => 'Limitado a erros de execução de scripts'; + + @override + String get keyAuth => 'Autenticação por chave'; + + @override + String get letterCache => 'Cache de letras'; + + @override + String get letterCacheTip => 'Recomendado desativar, mas após desativar, será impossível inserir caracteres CJK.'; + + @override + String get license => 'Licença de código aberto'; + + @override + String get location => 'Localização'; + + @override + String get loss => 'Taxa de perda'; + + @override + String madeWithLove(Object myGithub) { + return 'Feito com ❤️ por $myGithub'; + } + + @override + String get manual => 'Manual'; + + @override + String get max => 'Máximo'; + + @override + String get maxRetryCount => 'Número de tentativas de reconexão com o servidor'; + + @override + String get maxRetryCountEqual0 => 'Irá tentar indefinidamente'; + + @override + String get min => 'Mínimo'; + + @override + String get mission => 'Missão'; + + @override + String get more => 'Mais'; + + @override + String get moveOutServerFuncBtnsHelp => 'Ativado: Mostra abaixo de cada cartão na aba do servidor. Desativado: Mostra no topo da página de detalhes do servidor.'; + + @override + String get ms => 'ms'; + + @override + String get needHomeDir => 'Se você é usuário de Synology, [veja aqui](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Usuários de outros sistemas precisam pesquisar como criar um diretório home.'; + + @override + String get needRestart => 'Necessita reiniciar o app'; + + @override + String get net => 'Rede'; + + @override + String get netViewType => 'Tipo de visualização de rede'; + + @override + String get newContainer => 'Novo contêiner'; + + @override + String get noLineChart => 'Não usar gráficos de linha'; + + @override + String get noLineChartForCpu => 'Não utilizar gráficos de linhas para a CPU'; + + @override + String get noPrivateKeyTip => 'A chave privada não existe, pode ter sido deletada ou há um erro de configuração.'; + + @override + String get noPromptAgain => 'Não perguntar novamente'; + + @override + String get node => 'Nó'; + + @override + String get notAvailable => 'Indisponível'; + + @override + String get onServerDetailPage => 'Na página de detalhes do servidor'; + + @override + String get onlyOneLine => 'Exibir apenas como uma linha (rolável)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Efetivo apenas quando o número de núcleos > 8'; + + @override + String get openLastPath => 'Abrir o último caminho'; + + @override + String get openLastPathTip => 'Registros diferentes para servidores diferentes, e registra o caminho ao sair'; + + @override + String get parseContainerStatsTip => 'Análise de status do Docker pode ser lenta'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% de $size'; + } + + @override + String get permission => 'Permissões'; + + @override + String get pingAvg => 'Média:'; + + @override + String get pingInputIP => 'Por favor, insira o IP ou domínio alvo'; + + @override + String get pingNoServer => 'Nenhum servidor disponível para Ping\nPor favor, adicione um servidor na aba de servidores e tente novamente'; + + @override + String get pkg => 'Gerenciamento de pacotes'; + + @override + String get plugInType => 'Tipo de Inserção'; + + @override + String get port => 'Porta'; + + @override + String get preview => 'Pré-visualização'; + + @override + String get privateKey => 'Chave privada'; + + @override + String get process => 'Processo'; + + @override + String get pushToken => 'Token de notificação push'; + + @override + String get pveIgnoreCertTip => 'Não recomendado para ativar, cuidado com os riscos de segurança! Se estiver usando o certificado padrão do PVE, você precisa habilitar esta opção.'; + + @override + String get pveLoginFailed => 'Falha no login. Não é possível autenticar com o nome de usuário/senha da configuração do servidor para login no Linux PAM.'; + + @override + String get pveVersionLow => 'Esta funcionalidade está atualmente em fase de teste e foi testada apenas no PVE 8+. Por favor, use com cautela.'; + + @override + String get pwd => 'Senha'; + + @override + String get read => 'Leitura'; + + @override + String get reboot => 'Reiniciar'; + + @override + String get rememberPwdInMem => 'Lembrar senha na memória'; + + @override + String get rememberPwdInMemTip => 'Usado para contêineres, suspensão, etc.'; + + @override + String get rememberWindowSize => 'Lembrar o tamanho da janela'; + + @override + String get remotePath => 'Caminho remoto'; + + @override + String get restart => 'Reiniciar'; + + @override + String get result => 'Resultado'; + + @override + String get rotateAngel => 'Ângulo de rotação'; + + @override + String get route => 'Roteamento'; + + @override + String get run => 'Executar'; + + @override + String get running => 'Executando'; + + @override + String get sameIdServerExist => 'Já existe um servidor com o mesmo ID'; + + @override + String get save => 'Salvar'; + + @override + String get saved => 'Salvo'; + + @override + String get second => 'Segundo'; + + @override + String get sensors => 'Sensores'; + + @override + String get sequence => 'Sequência'; + + @override + String get server => 'Servidor'; + + @override + String get serverDetailOrder => 'Ordem dos componentes na página de detalhes do servidor'; + + @override + String get serverFuncBtns => 'Botões de função do servidor'; + + @override + String get serverOrder => 'Ordem do servidor'; + + @override + String get sftpDlPrepare => 'Preparando para conectar ao servidor...'; + + @override + String get sftpEditorTip => 'Se vazio, use o editor de arquivos integrado do aplicativo. Se houver um valor, use o editor do servidor remoto, por exemplo, `vim` (recomendado detectar automaticamente de acordo com `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Usar `rm -r` em SFTP para excluir pastas'; + + @override + String get sftpSSHConnected => 'SFTP conectado...'; + + @override + String get sftpShowFoldersFirst => 'Mostrar pastas primeiro'; + + @override + String get showDistLogo => 'Mostrar logo da distribuição'; + + @override + String get shutdown => 'Desligar'; + + @override + String get size => 'Tamanho'; + + @override + String get snippet => 'Snippet'; + + @override + String get softWrap => 'Quebra de linha suave'; + + @override + String get specifyDev => 'Especificar dispositivo'; + + @override + String get specifyDevTip => 'Por exemplo, as estatísticas de tráfego de rede são por padrão para todos os dispositivos. Você pode especificar um dispositivo específico aqui.'; + + @override + String get speed => 'Velocidade'; + + @override + String spentTime(Object time) { + return 'Tempo gasto: $time'; + } + + @override + String get sshTermHelp => 'Quando o terminal é rolável, arrastar horizontalmente pode selecionar texto. Clicar no botão do teclado ativa/desativa o teclado. O ícone de arquivo abre o SFTP do caminho atual. O botão da área de transferência copia o conteúdo quando o texto é selecionado e cola o conteúdo da área de transferência no terminal quando nenhum texto é selecionado e há conteúdo na área de transferência. O ícone de código cola trechos de código no terminal e os executa.'; + + @override + String sshTip(Object url) { + return 'Esta funcionalidade está em fase de teste.\n\nPor favor, reporte problemas em $url ou junte-se a nós no desenvolvimento.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Desativação automática das teclas virtuais'; + + @override + String get start => 'Iniciar'; + + @override + String get stat => 'Estatísticas'; + + @override + String get stats => 'Estatísticas'; + + @override + String get stop => 'Parar'; + + @override + String get stopped => 'Parado'; + + @override + String get storage => 'Armazenamento'; + + @override + String get supportFmtArgs => 'Suporta os seguintes argumentos formatados:'; + + @override + String get suspend => 'Suspender'; + + @override + String get suspendTip => 'A função de suspensão requer permissões de root e suporte do systemd.'; + + @override + String switchTo(Object val) { + return 'Mudar para $val'; + } + + @override + String get sync => 'Sincronizar'; + + @override + String get syncTip => 'Pode ser necessário reiniciar para algumas mudanças surtirem efeito.'; + + @override + String get system => 'Sistema'; + + @override + String get tag => 'Tag'; + + @override + String get temperature => 'Temperatura'; + + @override + String get termFontSizeTip => 'Esta configuração afetará o tamanho do terminal (largura e altura). Você pode dar zoom na página do terminal para ajustar o tamanho da fonte da sessão atual.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Teste'; + + @override + String get textScaler => 'Escala de texto'; + + @override + String get textScalerTip => '1.0 => 100% (tamanho original), afeta apenas algumas fontes na página do servidor, não é recomendado alterar.'; + + @override + String get theme => 'Tema'; + + @override + String get time => 'Tempo'; + + @override + String get times => 'Vezes'; + + @override + String get total => 'Total'; + + @override + String get traffic => 'Tráfego'; + + @override + String get trySudo => 'Tentar usar sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Desconhecido'; + + @override + String get unkownConvertMode => 'Modo de conversão desconhecido'; + + @override + String get update => 'Atualizar'; + + @override + String get updateIntervalEqual0 => 'Se definido como 0, o estado do servidor não será atualizado automaticamente.\nE o uso da CPU não poderá ser calculado.'; + + @override + String get updateServerStatusInterval => 'Intervalo de atualização do estado do servidor'; + + @override + String get upload => 'Upload'; + + @override + String get upsideDown => 'Inverter verticalmente'; + + @override + String get uptime => 'Tempo de atividade'; + + @override + String get useCdn => 'Utilizando CDN'; + + @override + String get useCdnTip => 'Recomenda-se que usuários não chineses usem CDN. Gostaria de usá-lo?'; + + @override + String get useNoPwd => 'Será usado sem senha'; + + @override + String get usePodmanByDefault => 'Usar Podman por padrão'; + + @override + String get used => 'Usado'; + + @override + String get view => 'Visualização'; + + @override + String get viewErr => 'Ver erro'; + + @override + String get virtKeyHelpClipboard => 'Se houver texto selecionado no terminal, copia para a área de transferência, caso contrário, cola o conteúdo da área de transferência no terminal.'; + + @override + String get virtKeyHelpIME => 'Ligar/desligar o teclado'; + + @override + String get virtKeyHelpSFTP => 'Abre o caminho atual em SFTP.'; + + @override + String get waitConnection => 'Por favor, aguarde a conexão ser estabelecida'; + + @override + String get wakeLock => 'Manter acordado'; + + @override + String get watchNotPaired => 'Não há Apple Watch pareado'; + + @override + String get webdavSettingEmpty => 'Configurações de Webdav estão vazias'; + + @override + String get whenOpenApp => 'Ao abrir o app'; + + @override + String get wolTip => 'Após configurar o WOL (Wake-on-LAN), um pedido de WOL é enviado cada vez que o servidor é conectado.'; + + @override + String get write => 'Escrita'; + + @override + String get writeScriptFailTip => 'Falha ao escrever no script, possivelmente devido à falta de permissões ou o diretório não existe.'; + + @override + String get writeScriptTip => 'Após conectar ao servidor, um script será escrito em ~/.config/server_box para monitorar o status do sistema. Você pode revisar o conteúdo do script.'; +} diff --git a/lib/generated/l10n/l10n_ru.dart b/lib/generated/l10n/l10n_ru.dart new file mode 100644 index 000000000..d1bcee72b --- /dev/null +++ b/lib/generated/l10n/l10n_ru.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Russian (`ru`). +class AppLocalizationsRu extends AppLocalizations { + AppLocalizationsRu([String locale = 'ru']) : super(locale); + + @override + String get aboutThanks => 'Благодарности всем участникам.'; + + @override + String get acceptBeta => 'Принять обновления тестовой версии'; + + @override + String get addSystemPrivateKeyTip => 'В данный момент приватные ключи отсутствуют. Добавить системный приватный ключ (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Добавлено в список задач'; + + @override + String get addr => 'Адрес'; + + @override + String get alreadyLastDir => 'Уже в корневом каталоге'; + + @override + String get authFailTip => 'Аутентификация не удалась, пожалуйста, проверьте, правильны ли пароль/ключ/хост/пользователь и т.д.'; + + @override + String get autoBackupConflict => 'Может быть включено только одно автоматическое резервное копирование'; + + @override + String get autoConnect => 'Автоматическое подключение'; + + @override + String get autoRun => 'Автозапуск'; + + @override + String get autoUpdateHomeWidget => 'Автоматическое обновление виджета на главном экране'; + + @override + String get backupTip => 'Экспортированные данные зашифрованы простым способом \nПожалуйста, храните их в безопасности.'; + + @override + String get backupVersionNotMatch => 'Версия резервной копии не совпадает, восстановление невозможно'; + + @override + String get battery => 'Батарея'; + + @override + String get bgRun => 'Работа в фоновом режиме'; + + @override + String get bgRunTip => 'Этот переключатель означает, что программа будет пытаться работать в фоновом режиме, но фактическое выполнение зависит от того, включено ли разрешение. Для нативного Android отключите «Оптимизацию батареи» для этого приложения, для MIUI измените контроль активности на «Нет ограничений».'; + + @override + String get cmd => 'Команда'; + + @override + String get collapseUITip => 'Свернуть длинные списки в UI по умолчанию'; + + @override + String get conn => 'Подключение'; + + @override + String get container => 'Контейнер'; + + @override + String get containerTrySudoTip => 'Например: если пользователь в приложении установлен как aaa, но Docker установлен под пользователем root, тогда нужно включить эту опцию'; + + @override + String get convert => 'Конвертировать'; + + @override + String get copyPath => 'Копировать путь'; + + @override + String get cpuViewAsProgressTip => 'Отобразите уровень использования каждого процессора в виде индикатора выполнения (старый стиль)'; + + @override + String get cursorType => 'Тип курсора'; + + @override + String get customCmd => 'Пользовательские команды'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Имя команды\": \"Команда\"'; + + @override + String get decode => 'Декодировать'; + + @override + String get decompress => 'Разархивировать'; + + @override + String get deleteServers => 'Удалить серверы пакетно'; + + @override + String get dirEmpty => 'Пожалуйста, убедитесь, что папка пуста'; + + @override + String get disconnected => 'Отключено'; + + @override + String get disk => 'Диск'; + + @override + String get diskIgnorePath => 'Игнорировать путь к диску'; + + @override + String get displayCpuIndex => 'Отобразить индекс ЦП'; + + @override + String dl2Local(Object fileName) { + return 'Загрузить $fileName на локальный диск?'; + } + + @override + String get dockerEmptyRunningItems => 'Нет запущенных контейнеров.\nЭто может быть из-за:\n- пользователя Docker, отличного от пользователя, настроенного в приложении\n- переменной окружения DOCKER_HOST, которая не была правильно считана. Вы можете выполнить `echo \$DOCKER_HOST` в терминале, чтобы увидеть ее значение.'; + + @override + String dockerImagesFmt(Object count) { + return 'Всего $count образов'; + } + + @override + String get dockerNotInstalled => 'Docker не установлен'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount запущено, $stoppedCount остановлено'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count контейнеров запущено'; + } + + @override + String get doubleColumnMode => 'Режим двойной колонки'; + + @override + String get doubleColumnTip => 'Эта опция лишь включает функцию; фактическое применение зависит от ширины устройства'; + + @override + String get editVirtKeys => 'Редактировать виртуальные клавиши'; + + @override + String get editor => 'Редактор'; + + @override + String get editorHighlightTip => 'Текущая производительность подсветки кода неудовлетворительна, можно отключить для улучшения.'; + + @override + String get encode => 'Кодировать'; + + @override + String get envVars => 'Переменная окружения'; + + @override + String get experimentalFeature => 'Экспериментальная функция'; + + @override + String get extraArgs => 'Дополнительные аргументы'; + + @override + String get fallbackSshDest => 'Резервное место назначения SSH'; + + @override + String get fdroidReleaseTip => 'Если вы скачали это приложение с F-Droid, рекомендуется отключить эту опцию.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'Файл \'$file\' слишком большой \'$size\', превышает $sizeMax'; + } + + @override + String get followSystem => 'Следовать за системой'; + + @override + String get font => 'Шрифт'; + + @override + String get fontSize => 'Размер шрифта'; + + @override + String get force => 'Принудительно'; + + @override + String get fullScreen => 'Полноэкранный режим'; + + @override + String get fullScreenJitter => 'Вибрация в полноэкранном режиме'; + + @override + String get fullScreenJitterHelp => 'Предотвращение выгорания экрана'; + + @override + String get fullScreenTip => 'Следует ли включить полноэкранный режим, когда устройство поворачивается в альбомный режим? Эта опция применяется только к вкладке сервера.'; + + @override + String get goBackQ => 'Вернуться?'; + + @override + String get goto => 'Перейти к'; + + @override + String get hideTitleBar => 'Скрыть заголовок'; + + @override + String get highlight => 'Подсветка кода'; + + @override + String get homeWidgetUrlConfig => 'Конфигурация URL виджета домашнего экрана'; + + @override + String get host => 'Хост'; + + @override + String httpFailedWithCode(Object code) { + return 'ошибка запроса, код: $code'; + } + + @override + String get ignoreCert => 'Игнорировать сертификат'; + + @override + String get image => 'Образ'; + + @override + String get imagesList => 'Список образов'; + + @override + String get init => 'Инициализировать'; + + @override + String get inner => 'Встроенный'; + + @override + String get install => 'установить'; + + @override + String get installDockerWithUrl => 'Пожалуйста, сначала установите Docker по адресу https://docs.docker.com/engine/install'; + + @override + String get invalid => 'Недействительный'; + + @override + String get jumpServer => 'прыжковый сервер'; + + @override + String get keepForeground => 'Пожалуйста, держите приложение в фокусе!'; + + @override + String get keepStatusWhenErr => 'Сохранять статус сервера при ошибке'; + + @override + String get keepStatusWhenErrTip => 'Применимо только в случае ошибки выполнения скрипта'; + + @override + String get keyAuth => 'Аутентификация по ключу'; + + @override + String get letterCache => 'Кэширование букв'; + + @override + String get letterCacheTip => 'Рекомендуется отключить, но после отключения будет невозможно вводить символы CJK.'; + + @override + String get license => 'Лицензия'; + + @override + String get location => 'Местоположение'; + + @override + String get loss => 'Потери пакетов'; + + @override + String madeWithLove(Object myGithub) { + return 'Создано с ❤️ by $myGithub'; + } + + @override + String get manual => 'Вручную'; + + @override + String get max => 'максимум'; + + @override + String get maxRetryCount => 'Максимальное количество попыток переподключения к серверу'; + + @override + String get maxRetryCountEqual0 => 'Будет бесконечно пытаться переподключиться'; + + @override + String get min => 'минимум'; + + @override + String get mission => 'Задача'; + + @override + String get more => 'Больше'; + + @override + String get moveOutServerFuncBtnsHelp => 'Включено: кнопки функций сервера отображаются под каждой карточкой на вкладке сервера. Выключено: отображается в верхней части страницы деталей сервера.'; + + @override + String get ms => 'мс'; + + @override + String get needHomeDir => 'Если вы пользователь Synology, [смотрите здесь](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Пользователям других систем нужно искать, как создать домашний каталог.'; + + @override + String get needRestart => 'Требуется перезапуск приложения'; + + @override + String get net => 'Сеть'; + + @override + String get netViewType => 'Тип визуализации сети'; + + @override + String get newContainer => 'Создать контейнер'; + + @override + String get noLineChart => 'Не использовать линейные графики'; + + @override + String get noLineChartForCpu => 'Не используйте линейные графики для ЦП'; + + @override + String get noPrivateKeyTip => 'Приватный ключ не существует, возможно, он был удален или есть ошибка в настройках.'; + + @override + String get noPromptAgain => 'Больше не спрашивать'; + + @override + String get node => 'Узел'; + + @override + String get notAvailable => 'Недоступно'; + + @override + String get onServerDetailPage => 'На странице деталей сервера'; + + @override + String get onlyOneLine => 'Отображать только в одной строке (прокручивается)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Действует только при количестве ядер больше 8'; + + @override + String get openLastPath => 'Открыть последний путь'; + + @override + String get openLastPathTip => 'Для разных серверов будут сохранены разные записи, записывается путь при выходе'; + + @override + String get parseContainerStatsTip => 'Анализ статуса использования Docker может быть медленным'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% от $size'; + } + + @override + String get permission => 'Разрешения'; + + @override + String get pingAvg => 'В среднем:'; + + @override + String get pingInputIP => 'Пожалуйста, введите целевой IP или домен'; + + @override + String get pingNoServer => 'Нет доступных серверов для Ping\nПожалуйста, добавьте их на вкладке «Сервер» и попробуйте снова'; + + @override + String get pkg => 'Менеджер пакетов'; + + @override + String get plugInType => 'Тип вставки'; + + @override + String get port => 'Порт'; + + @override + String get preview => 'Предпросмотр'; + + @override + String get privateKey => 'Приватный ключ'; + + @override + String get process => 'Процесс'; + + @override + String get pushToken => 'Токен уведомлений'; + + @override + String get pveIgnoreCertTip => 'Не рекомендуется включать, обратите внимание на риски безопасности! Если вы используете стандартный сертификат от PVE, вам нужно включить эту опцию.'; + + @override + String get pveLoginFailed => 'Ошибка входа. Невозможно аутентифицироваться с помощью имени пользователя/пароля из конфигурации сервера для входа в Linux PAM.'; + + @override + String get pveVersionLow => 'Эта функция в настоящее время находится на стадии тестирования и была протестирована только на PVE 8+. Используйте ее с осторожностью.'; + + @override + String get pwd => 'Пароль'; + + @override + String get read => 'Чтение'; + + @override + String get reboot => 'Перезагрузка'; + + @override + String get rememberPwdInMem => 'Запомнить пароль в памяти'; + + @override + String get rememberPwdInMemTip => 'Используется для контейнеров, приостановки и т. д.'; + + @override + String get rememberWindowSize => 'Запомнить размер окна'; + + @override + String get remotePath => 'Удаленный путь'; + + @override + String get restart => 'Перезапустить'; + + @override + String get result => 'Результат'; + + @override + String get rotateAngel => 'Угол поворота'; + + @override + String get route => 'Маршрутизация'; + + @override + String get run => 'Запустить'; + + @override + String get running => 'Запущено'; + + @override + String get sameIdServerExist => 'Сервер с таким ID уже существует'; + + @override + String get save => 'Сохранить'; + + @override + String get saved => 'Сохранено'; + + @override + String get second => 'с'; + + @override + String get sensors => 'Датчики'; + + @override + String get sequence => 'Последовательность'; + + @override + String get server => 'Сервер'; + + @override + String get serverDetailOrder => 'Порядок элементов на странице деталей сервера'; + + @override + String get serverFuncBtns => 'Кнопки функций сервера'; + + @override + String get serverOrder => 'Порядок серверов'; + + @override + String get sftpDlPrepare => 'Подготовка подключения...'; + + @override + String get sftpEditorTip => 'Если пусто, используйте встроенный редактор файлов приложения. Если значение указано, используйте редактор удаленного сервера, например, `vim` (рекомендуется автоматически определять согласно `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Использовать `rm -r` в SFTP для удаления папок'; + + @override + String get sftpSSHConnected => 'SFTP подключен...'; + + @override + String get sftpShowFoldersFirst => 'Показывать папки в начале'; + + @override + String get showDistLogo => 'Показать лого дистрибутива'; + + @override + String get shutdown => 'Выключение'; + + @override + String get size => 'Размер'; + + @override + String get snippet => 'Фрагмент'; + + @override + String get softWrap => 'Мягкий перенос'; + + @override + String get specifyDev => 'Указать устройство'; + + @override + String get specifyDevTip => 'Например, статистика сетевого трафика по умолчанию относится ко всем устройствам. Здесь вы можете указать конкретное устройство.'; + + @override + String get speed => 'Скорость'; + + @override + String spentTime(Object time) { + return 'Затрачено времени: $time'; + } + + @override + String get sshTermHelp => 'Когда терминал можно прокручивать, горизонтальное перетаскивание позволяет выделить текст. Нажатие на кнопку клавиатуры включает/выключает клавиатуру. Иконка файла открывает текущий путь SFTP. Кнопка буфера обмена копирует содержимое, когда текст выделен, и вставляет содержимое из буфера обмена в терминал, когда текст не выделен, а в буфере есть содержимое. Иконка кода вставляет фрагменты кода в терминал и выполняет их.'; + + @override + String sshTip(Object url) { + return 'Эта функция находится в стадии тестирования.\n\nПожалуйста, отправляйте отчеты о проблемах на $url или присоединяйтесь к нашей разработке.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Автоматическое переключение виртуальных клавиш'; + + @override + String get start => 'Старт'; + + @override + String get stat => 'Статистика'; + + @override + String get stats => 'Статистика'; + + @override + String get stop => 'Остановить'; + + @override + String get stopped => 'Остановлено'; + + @override + String get storage => 'Хранение'; + + @override + String get supportFmtArgs => 'Поддерживаются следующие форматы аргументов:'; + + @override + String get suspend => 'Приостановить'; + + @override + String get suspendTip => 'Функция приостановки требует прав root и поддержки systemd.'; + + @override + String switchTo(Object val) { + return 'Переключиться на $val'; + } + + @override + String get sync => 'Синхронизировать'; + + @override + String get syncTip => 'Возможно, потребуется перезагрузка, чтобы некоторые изменения вступили в силу.'; + + @override + String get system => 'Система'; + + @override + String get tag => 'Теги'; + + @override + String get temperature => 'Температура'; + + @override + String get termFontSizeTip => 'Эта настройка повлияет на размер терминала (ширина и высота). Вы можете масштабировать страницу терминала, чтобы调整 размер шрифта текущей сессии.'; + + @override + String get terminal => 'Терминал'; + + @override + String get test => 'Тест'; + + @override + String get textScaler => 'Масштабирование текста'; + + @override + String get textScalerTip => '1.0 => 100% (исходный размер), применяется только к части шрифтов на странице сервера, изменение не рекомендуется.'; + + @override + String get theme => 'Тема'; + + @override + String get time => 'Время'; + + @override + String get times => 'Раз'; + + @override + String get total => 'Всего'; + + @override + String get traffic => 'Трафик'; + + @override + String get trySudo => 'Попробовать использовать sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Неизвестно'; + + @override + String get unkownConvertMode => 'Неизвестный режим конвертации'; + + @override + String get update => 'Обновление'; + + @override + String get updateIntervalEqual0 => 'Если установлено 0, статус сервера не будет автоматически обновляться.\nТакже не будет рассчитано использование ЦП.'; + + @override + String get updateServerStatusInterval => 'Интервал обновления статуса сервера'; + + @override + String get upload => 'Загрузить'; + + @override + String get upsideDown => 'Перевернуть'; + + @override + String get uptime => 'Время работы'; + + @override + String get useCdn => 'Использование CDN'; + + @override + String get useCdnTip => 'Не китайским пользователям рекомендуется использовать CDN. Хотели бы вы его использовать?'; + + @override + String get useNoPwd => 'Будет использоваться без пароля'; + + @override + String get usePodmanByDefault => 'Использовать Podman по умолчанию'; + + @override + String get used => 'Использовано'; + + @override + String get view => 'Вид'; + + @override + String get viewErr => 'Просмотр ошибок'; + + @override + String get virtKeyHelpClipboard => 'Если в терминале выделен текст, то он копируется в буфер обмена, в противном случае содержимое буфера вставляется в терминал.'; + + @override + String get virtKeyHelpIME => 'Включить/выключить клавиатуру'; + + @override + String get virtKeyHelpSFTP => 'Открыть текущий путь в SFTP.'; + + @override + String get waitConnection => 'Пожалуйста, дождитесь установки соединения'; + + @override + String get wakeLock => 'Держать включенным'; + + @override + String get watchNotPaired => 'Apple Watch не сопряжены'; + + @override + String get webdavSettingEmpty => 'Настройки Webdav пусты'; + + @override + String get whenOpenApp => 'При открытии приложения'; + + @override + String get wolTip => 'После настройки WOL (Wake-on-LAN) при каждом подключении к серверу отправляется запрос WOL.'; + + @override + String get write => 'Запись'; + + @override + String get writeScriptFailTip => 'Запись скрипта не удалась, возможно, из-за отсутствия прав или потому что, директории не существует.'; + + @override + String get writeScriptTip => 'После подключения к серверу скрипт будет записан в ~/.config/server_box для мониторинга состояния системы. Вы можете проверить содержимое скрипта.'; +} diff --git a/lib/generated/l10n/l10n_tr.dart b/lib/generated/l10n/l10n_tr.dart new file mode 100644 index 000000000..7ac689d2d --- /dev/null +++ b/lib/generated/l10n/l10n_tr.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Turkish (`tr`). +class AppLocalizationsTr extends AppLocalizations { + AppLocalizationsTr([String locale = 'tr']) : super(locale); + + @override + String get aboutThanks => 'Katılım gösteren aşağıdaki kişilere teşekkür ederiz.'; + + @override + String get acceptBeta => 'Beta sürüm güncellemelerini kabul et'; + + @override + String get addSystemPrivateKeyTip => 'Şu anda özel anahtar yok, sistemle geleni (~/.ssh/id_rsa) eklemek ister misiniz?'; + + @override + String get added2List => 'Görev listesine eklendi'; + + @override + String get addr => 'Adres'; + + @override + String get alreadyLastDir => 'Zaten son klasörde.'; + + @override + String get authFailTip => 'Kimlik doğrulama başarısız, kimlik bilgilerinin doğru olup olmadığını kontrol edin'; + + @override + String get autoBackupConflict => 'Aynı anda yalnızca bir otomatik yedekleme etkinleştirilebilir.'; + + @override + String get autoConnect => 'Otomatik bağlan'; + + @override + String get autoRun => 'Otomatik çalıştır'; + + @override + String get autoUpdateHomeWidget => 'Ana widget\'ı otomatik güncelle'; + + @override + String get backupTip => 'Dışa aktarılan veriler zayıf bir şekilde şifrelenmiştir. \nLütfen güvenli bir yerde saklayın.'; + + @override + String get backupVersionNotMatch => 'Yedekleme sürümü uyumlu değil.'; + + @override + String get battery => 'Pil'; + + @override + String get bgRun => 'Arka planda çalıştır'; + + @override + String get bgRunTip => 'Bu anahtar yalnızca programın arka planda çalışmayı deneyeceğini ifade eder. Arka planda çalışıp çalışamayacağı, iznin etkinleştirilip etkinleştirilmediğine bağlıdır. AOSP tabanlı Android ROM\'larda, bu uygulamada \"Pil Optimizasyonunu\" devre dışı bırakın. MIUI / HyperOS için, güç tasarrufu politikasını \"Sınırsız\" olarak değiştirin.'; + + @override + String get cmd => 'Komut'; + + @override + String get collapseUITip => 'UI\'daki uzun listeleri varsayılan olarak gizleyip gizlememeyi belirler'; + + @override + String get conn => 'Bağlantı'; + + @override + String get container => 'Konteyner'; + + @override + String get containerTrySudoTip => 'Örneğin: Uygulamada kullanıcı aaa olarak ayarlanmış, ancak Docker root kullanıcısı altında kurulmuş. Bu durumda, bu seçeneği etkinleştirmeniz gerekir.'; + + @override + String get convert => 'Dönüştür'; + + @override + String get copyPath => 'Yolu kopyala'; + + @override + String get cpuViewAsProgressTip => 'Her CPU\'nun kullanımını bir ilerleme çubuğu tarzında görüntüle (eski tarz)'; + + @override + String get cursorType => 'İmleç türü'; + + @override + String get customCmd => 'Özel komutlar'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Komut Adı\": \"Komut\"'; + + @override + String get decode => 'Çöz'; + + @override + String get decompress => 'Sıkıştırmayı aç'; + + @override + String get deleteServers => 'Toplu sunucu silme'; + + @override + String get dirEmpty => 'Klasörün boş olduğundan emin olun.'; + + @override + String get disconnected => 'Bağlantı kesildi'; + + @override + String get disk => 'Disk'; + + @override + String get diskIgnorePath => 'Disk için göz ardı edilen yol'; + + @override + String get displayCpuIndex => 'CPU dizinini görüntüle'; + + @override + String dl2Local(Object fileName) { + return '$fileName dosyasını yerel olarak indirmek istiyor musunuz?'; + } + + @override + String get dockerEmptyRunningItems => 'Çalışan konteyner yok.\nBu şu sebeplerden kaynaklanabilir:\n- Docker kurulumu kullanıcı adı, uygulamada yapılandırılan kullanıcı adıyla aynı değil.\n- DOCKER_HOST ortam değişkeni doğru okunmadı. Terminalde `echo \$DOCKER_HOST` komutunu çalıştırarak elde edebilirsiniz.'; + + @override + String dockerImagesFmt(Object count) { + return '$count görüntü'; + } + + @override + String get dockerNotInstalled => 'Docker kurulu değil'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount çalışıyor, $stoppedCount konteyner durduruldu.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count konteyner çalışıyor.'; + } + + @override + String get doubleColumnMode => 'Çift sütun modu'; + + @override + String get doubleColumnTip => 'Bu seçenek yalnızca özelliği etkinleştirir, gerçekten etkinleştirilebilir olup olmadığını cihazın genişliği belirler'; + + @override + String get editVirtKeys => 'Sanal tuşları düzenle'; + + @override + String get editor => 'Editör'; + + @override + String get editorHighlightTip => 'Mevcut kod vurgulama performansı ideal değil ve isteğe bağlı olarak kapatılabilir.'; + + @override + String get encode => 'Kodla'; + + @override + String get envVars => 'Ortam değişkeni'; + + @override + String get experimentalFeature => 'Deneysel özellik'; + + @override + String get extraArgs => 'Ek argümanlar'; + + @override + String get fallbackSshDest => 'Yedek SSH hedefi'; + + @override + String get fdroidReleaseTip => 'Bu uygulamayı F-Droid\'den indirdiyseniz, bu seçeneği kapatmanız önerilir.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return '\'$file\' dosyası çok büyük $size, maksimum $sizeMax'; + } + + @override + String get followSystem => 'Sistemi takip et'; + + @override + String get font => 'Yazı tipi'; + + @override + String get fontSize => 'Yazı tipi boyutu'; + + @override + String get force => 'Zorla'; + + @override + String get fullScreen => 'Tam ekran modu'; + + @override + String get fullScreenJitter => 'Tam ekran titremesi'; + + @override + String get fullScreenJitterHelp => 'Ekran yanıklarını önlemek için'; + + @override + String get fullScreenTip => 'Cihaz yatay moda döndürüldüğünde tam ekran modu etkinleştirilsin mi? Bu seçenek yalnızca sunucu sekmesi için geçerlidir.'; + + @override + String get goBackQ => 'Geri dön?'; + + @override + String get goto => 'Git'; + + @override + String get hideTitleBar => 'Başlık çubuğunu gizle'; + + @override + String get highlight => 'Kod vurgulama'; + + @override + String get homeWidgetUrlConfig => 'Ana sayfa widget URL\'sini yapılandır'; + + @override + String get host => 'Sunucu'; + + @override + String httpFailedWithCode(Object code) { + return 'İstek başarısız oldu, durum kodu: $code'; + } + + @override + String get ignoreCert => 'Sertifikayı yoksay'; + + @override + String get image => 'Resim'; + + @override + String get imagesList => 'Resim listesi'; + + @override + String get init => 'Başlat'; + + @override + String get inner => 'İç'; + + @override + String get install => 'Kur'; + + @override + String get installDockerWithUrl => 'Lütfen önce Docker\'ı https://docs.docker.com/engine/install adresinden kurun.'; + + @override + String get invalid => 'Geçersiz'; + + @override + String get jumpServer => 'Atlama sunucusu'; + + @override + String get keepForeground => 'Uygulama ön planda kalsın!'; + + @override + String get keepStatusWhenErr => 'Son sunucu durumunu koru'; + + @override + String get keepStatusWhenErrTip => 'Yalnızca betik yürütme sırasında bir hata oluştuğunda'; + + @override + String get keyAuth => 'Anahtar Doğrulama'; + + @override + String get letterCache => 'Harf önbelleği'; + + @override + String get letterCacheTip => 'Devre dışı bırakılması önerilir, ancak devre dışı bırakıldıktan sonra CJK karakterleri girilemez.'; + + @override + String get license => 'Lisans'; + + @override + String get location => 'Konum'; + + @override + String get loss => 'kayıp'; + + @override + String madeWithLove(Object myGithub) { + return '$myGithub tarafından ❤️ ile yapıldı'; + } + + @override + String get manual => 'Kılavuz'; + + @override + String get max => 'maks'; + + @override + String get maxRetryCount => 'Sunucu yeniden bağlanma sayısı'; + + @override + String get maxRetryCountEqual0 => 'Sürekli olarak tekrar denenecek.'; + + @override + String get min => 'min'; + + @override + String get mission => 'Görev'; + + @override + String get more => 'Daha fazla'; + + @override + String get moveOutServerFuncBtnsHelp => 'Açık: Sunucu sekmesi sayfasındaki her kartın altında görüntülenebilir. Kapalı: Sunucu Detayları sayfasının üst kısmında görüntülenebilir.'; + + @override + String get ms => 'ms'; + + @override + String get needHomeDir => 'Synology kullanıcısıysanız, [buraya bakın](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Diğer sistem kullanıcılarının bir ana dizin oluşturmayı öğrenmeleri gerekir.'; + + @override + String get needRestart => 'Uygulamanın yeniden başlatılması gerekiyor'; + + @override + String get net => 'Ağ'; + + @override + String get netViewType => 'Ağ görünümü türü'; + + @override + String get newContainer => 'Yeni konteyner'; + + @override + String get noLineChart => 'Çizgi grafik kullanma'; + + @override + String get noLineChartForCpu => 'CPU için çizgi grafik kullanma'; + + @override + String get noPrivateKeyTip => 'Özel anahtar mevcut değil, silinmiş olabilir veya bir yapılandırma hatası vardır.'; + + @override + String get noPromptAgain => 'Tekrar hatırlatma'; + + @override + String get node => 'Düğüm'; + + @override + String get notAvailable => 'Kullanılamaz'; + + @override + String get onServerDetailPage => 'Sunucu detay sayfasında'; + + @override + String get onlyOneLine => 'Yalnızca bir satır olarak göster (kaydırılabilir)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Yalnızca çekirdek sayısı 8\'den fazla olduğunda çalışır'; + + @override + String get openLastPath => 'Son yolu aç'; + + @override + String get openLastPathTip => 'Farklı sunucuların farklı günlükleri olacaktır ve çıkış yolu log dosyasıdır'; + + @override + String get parseContainerStatsTip => 'Docker\'ın işgal durumunu analiz etmek nispeten yavaştır.'; + + @override + String percentOfSize(Object percent, Object size) { + return '$size\'nin %$percent\'i'; + } + + @override + String get permission => 'İzinler'; + + @override + String get pingAvg => 'Ortalama:'; + + @override + String get pingInputIP => 'Lütfen bir hedef IP / etki alanı girin.'; + + @override + String get pingNoServer => 'Ping yapılacak sunucu yok.\nLütfen sunucu sekmesine bir sunucu ekleyin.'; + + @override + String get pkg => 'Paket'; + + @override + String get plugInType => 'Takma Türü'; + + @override + String get port => 'Port'; + + @override + String get preview => 'Önizleme'; + + @override + String get privateKey => 'Özel Anahtar'; + + @override + String get process => 'Süreç'; + + @override + String get pushToken => 'Push token'; + + @override + String get pveIgnoreCertTip => 'Etkinleştirilmesi önerilmez, güvenlik risklerine dikkat edin! PVE\'nin varsayılan sertifikasını kullanıyorsanız, bu seçeneği etkinleştirmeniz gerekir.'; + + @override + String get pveLoginFailed => 'Giriş başarısız. Linux PAM girişi için sunucu yapılandırmasındaki kullanıcı adı/şifre ile kimlik doğrulaması yapılamadı.'; + + @override + String get pveVersionLow => 'Bu özellik şu anda test aşamasında ve sadece PVE 8+ üzerinde test edilmiştir. Lütfen dikkatli kullanın.'; + + @override + String get pwd => 'Şifre'; + + @override + String get read => 'Oku'; + + @override + String get reboot => 'Yeniden başlat'; + + @override + String get rememberPwdInMem => 'Şifreyi bellekte sakla'; + + @override + String get rememberPwdInMemTip => 'Konteynerler, askıya alma vb. için kullanılır.'; + + @override + String get rememberWindowSize => 'Pencere boyutunu hatırla'; + + @override + String get remotePath => 'Uzak yol'; + + @override + String get restart => 'Yeniden başlat'; + + @override + String get result => 'Sonuç'; + + @override + String get rotateAngel => 'Dönme açısı'; + + @override + String get route => 'Yönlendirme'; + + @override + String get run => 'Çalıştır'; + + @override + String get running => 'Çalışıyor'; + + @override + String get sameIdServerExist => 'Aynı kimliğe sahip bir sunucu zaten var'; + + @override + String get save => 'Kaydet'; + + @override + String get saved => 'Kaydedildi'; + + @override + String get second => 's'; + + @override + String get sensors => 'Sensör'; + + @override + String get sequence => 'Dizi'; + + @override + String get server => 'Sunucu'; + + @override + String get serverDetailOrder => 'Ayrıntı sayfası widget sırası'; + + @override + String get serverFuncBtns => 'Sunucu işlev düğmeleri'; + + @override + String get serverOrder => 'Sunucu sırası'; + + @override + String get sftpDlPrepare => 'Bağlantı hazırlığı yapılıyor...'; + + @override + String get sftpEditorTip => 'Boşsa, uygulamanın yerleşik dosya düzenleyicisini kullanın. Bir değer varsa, uzak sunucunun düzenleyicisini kullanın, örneğin, `vim` (otomatik olarak `EDITOR`\'a göre algılamanız önerilir).'; + + @override + String get sftpRmrDirSummary => 'SFTP\'de bir klasörü silmek için `rm -r` kullanın.'; + + @override + String get sftpSSHConnected => 'SFTP Bağlantısı'; + + @override + String get sftpShowFoldersFirst => 'Önce klasörleri göster'; + + @override + String get showDistLogo => 'Dağıtım logosunu göster'; + + @override + String get shutdown => 'Kapat'; + + @override + String get size => 'Boyut'; + + @override + String get snippet => 'Parça'; + + @override + String get softWrap => 'Yumuşak kaydırma'; + + @override + String get specifyDev => 'Cihazı belirle'; + + @override + String get specifyDevTip => 'Örneğin, ağ trafiği istatistikleri varsayılan olarak tüm cihazlar içindir. Burada belirli bir cihazı belirtebilirsiniz.'; + + @override + String get speed => 'Hız'; + + @override + String spentTime(Object time) { + return 'Harcanan zaman: $time'; + } + + @override + String get sshTermHelp => 'Terminal kaydırılabilir olduğunda, yatay sürükleme metni seçebilir. Klavye düğmesine tıklamak klavyeyi açar/kapatır. Dosya simgesi mevcut yolu SFTP\'de açar. Pano düğmesi metin seçildiğinde içeriği kopyalar ve metin seçilmediğinde ve panoda içerik olduğunda panodaki içeriği terminale yapıştırır. Kod simgesi kod parçacıklarını terminale yapıştırır ve çalıştırır.'; + + @override + String sshTip(Object url) { + return 'Bu işlev şu anda deneme aşamasındadır.\n\nLütfen hataları $url adresine bildirin veya geliştirmemize katılın.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Sanal tuşların otomatik geçişi'; + + @override + String get start => 'Başlat'; + + @override + String get stat => 'İstatistik'; + + @override + String get stats => 'İstatistikler'; + + @override + String get stop => 'Durdur'; + + @override + String get stopped => 'Durduruldu'; + + @override + String get storage => 'Depolama'; + + @override + String get supportFmtArgs => 'Aşağıdaki biçimlendirme parametreleri desteklenir:'; + + @override + String get suspend => 'Askıya al'; + + @override + String get suspendTip => 'Askıya alma işlevi kök izinleri ve systemd desteği gerektirir.'; + + @override + String switchTo(Object val) { + return '$val öğesine geç'; + } + + @override + String get sync => 'Senkronize et'; + + @override + String get syncTip => 'Bazı değişikliklerin etkili olması için yeniden başlatma gerekebilir.'; + + @override + String get system => 'Sistem'; + + @override + String get tag => 'Etiketler'; + + @override + String get temperature => 'Sıcaklık'; + + @override + String get termFontSizeTip => 'Bu ayar terminal boyutunu (genişlik ve yükseklik) etkileyecektir. Terminal sayfasında yakınlaştırarak mevcut oturumun yazı tipi boyutunu ayarlayabilirsiniz.'; + + @override + String get terminal => 'Terminal'; + + @override + String get test => 'Test'; + + @override + String get textScaler => 'Metin ölçekleyici'; + + @override + String get textScalerTip => '1.0 => %100 (orijinal boyut), yalnızca sunucu sayfası kısmındaki yazı tipine çalışır, değiştirilmesi önerilmez.'; + + @override + String get theme => 'Tema'; + + @override + String get time => 'Zaman'; + + @override + String get times => 'Zamanlar'; + + @override + String get total => 'Toplam'; + + @override + String get traffic => 'Trafik'; + + @override + String get trySudo => 'Sudo kullanmayı deneyin'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Bilinmeyen'; + + @override + String get unkownConvertMode => 'Bilinmeyen dönüştürme modu'; + + @override + String get update => 'Güncelle'; + + @override + String get updateIntervalEqual0 => '0 olarak ayarladınız, otomatik olarak güncellenmeyecek.\nCPU durumunu hesaplayamıyor.'; + + @override + String get updateServerStatusInterval => 'Sunucu durumu güncelleme aralığı'; + + @override + String get upload => 'Yükle'; + + @override + String get upsideDown => 'Ters'; + + @override + String get uptime => 'Çalışma süresi'; + + @override + String get useCdn => 'CDN kullanılıyor'; + + @override + String get useCdnTip => 'Çin dışındaki kullanıcıların CDN kullanması önerilir. Kullanmak ister misiniz?'; + + @override + String get useNoPwd => 'Şifre kullanılmayacak'; + + @override + String get usePodmanByDefault => 'Varsayılan olarak Podman kullan'; + + @override + String get used => 'Kullanıldı'; + + @override + String get view => 'Görünüm'; + + @override + String get viewErr => 'Hataya bakın'; + + @override + String get virtKeyHelpClipboard => 'Seçilen terminal boş değilse panoya kopyalayın, aksi takdirde panodaki içeriği terminale yapıştırın.'; + + @override + String get virtKeyHelpIME => 'Klavye aç/kapat'; + + @override + String get virtKeyHelpSFTP => 'Geçerli dizini SFTP\'de açın.'; + + @override + String get waitConnection => 'Lütfen bağlantının kurulmasını bekleyin.'; + + @override + String get wakeLock => 'Uyanık tut'; + + @override + String get watchNotPaired => 'Eşlenmiş Apple Watch yok'; + + @override + String get webdavSettingEmpty => 'WebDav ayarı boş'; + + @override + String get whenOpenApp => 'Uygulamayı açarken'; + + @override + String get wolTip => 'WOL (Wake-on-LAN) yapılandırıldıktan sonra, her sunucuya bağlandığınızda bir WOL isteği gönderilir.'; + + @override + String get write => 'Yaz'; + + @override + String get writeScriptFailTip => 'Komut dosyasına yazma başarısız oldu, muhtemelen izin eksikliğinden veya dizin mevcut olmadığından kaynaklanıyor olabilir.'; + + @override + String get writeScriptTip => 'Sunucuya bağlandıktan sonra, sistem durumunu izlemek için ~/.config/server_box\'a bir komut dosyası yazılacaktır. Komut dosyası içeriğini inceleyebilirsiniz.'; +} diff --git a/lib/generated/l10n/l10n_uk.dart b/lib/generated/l10n/l10n_uk.dart new file mode 100644 index 000000000..5a71b1b3d --- /dev/null +++ b/lib/generated/l10n/l10n_uk.dart @@ -0,0 +1,699 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Ukrainian (`uk`). +class AppLocalizationsUk extends AppLocalizations { + AppLocalizationsUk([String locale = 'uk']) : super(locale); + + @override + String get aboutThanks => 'Дякуємо наступним особам, які взяли участь.'; + + @override + String get acceptBeta => 'Прийняти оновлення бета-версії'; + + @override + String get addSystemPrivateKeyTip => 'Наразі приватних ключів нема, хочете додати той, що йде з системою (~/.ssh/id_rsa)?'; + + @override + String get added2List => 'Додано до списку завдань'; + + @override + String get addr => 'Адреса'; + + @override + String get alreadyLastDir => 'Вже в останньому каталозі.'; + + @override + String get authFailTip => 'Авторизація не вдалася, будь ласка, перевірте правильність облікових даних'; + + @override + String get autoBackupConflict => 'Тільки одне автоматичне резервне копіювання може бути активне одночасно.'; + + @override + String get autoConnect => 'Авто підключення'; + + @override + String get autoRun => 'Авто запуск'; + + @override + String get autoUpdateHomeWidget => 'Автоматичне оновлення віджетів на головному екрані'; + + @override + String get backupTip => 'Експортовані дані слабо зашифровані. \nБудь ласка, зберігайте їх у безпеці.'; + + @override + String get backupVersionNotMatch => 'Версія резервного копіювання не збіглася.'; + + @override + String get battery => 'Акумулятор'; + + @override + String get bgRun => 'Запуск у фоновому режимі'; + + @override + String get bgRunTip => 'Цей перемикач лише вказує на те, що програма намагатиметься працювати у фоновому режимі. Чи може вона працювати у фоновому режимі, залежить від прав доступу. Для AOSP-орієнтованих Android ROM, будь ласка, вимкніть \"Оптимізацію акумулятора\" в цьому додатку. Для MIUI / HyperOS, будь ласка, змініть політику економії енергії на \"Нескінченна\".'; + + @override + String get cmd => 'Команда'; + + @override + String get collapseUITip => 'Сховати довгі списки, що є у UI за замовчуванням'; + + @override + String get conn => 'З\'єднання'; + + @override + String get container => 'Контейнер'; + + @override + String get containerTrySudoTip => 'Наприклад: У застосунку користувач це aaa, але Docker встановлений під користувачем root. У цьому випадку вам потрібно активувати цю опцію.'; + + @override + String get convert => 'Конвертувати'; + + @override + String get copyPath => 'Скопіювати шлях'; + + @override + String get cpuViewAsProgressTip => 'Відобразити використання кожного процесора у вигляді стовпчикової діаграми (старий стиль)'; + + @override + String get cursorType => 'Тип курсора'; + + @override + String get customCmd => 'Користувацькі команди'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki#custom-commands'; + + @override + String get customCmdHint => '\"Ім\'я Команди\": \"Команда\"'; + + @override + String get decode => 'Декодувати'; + + @override + String get decompress => 'Розпакувати'; + + @override + String get deleteServers => 'Масове видалення серверів'; + + @override + String get dirEmpty => 'Переконайтеся, що директорія пуста.'; + + @override + String get disconnected => 'Відключено'; + + @override + String get disk => 'Диск'; + + @override + String get diskIgnorePath => 'Ігнорувати шлях для диска'; + + @override + String get displayCpuIndex => 'Відобразити індекс ЦП'; + + @override + String dl2Local(Object fileName) { + return 'Завантажити $fileName на локальний комп\'ютер?'; + } + + @override + String get dockerEmptyRunningItems => 'Немає запущених контейнерів.\nЦе може бути через:\n- Користувача Docker, відмінного від користувача, налаштованого в додатку\n- змінну оточення DOCKER_HOST, яка не була правильно зчитана. Ви можете виконати `echo \$DOCKER_HOST` у терміналі, щоб побачити її значення.'; + + @override + String dockerImagesFmt(Object count) { + return 'Всього $count образів'; + } + + @override + String get dockerNotInstalled => 'Docker не встановлено'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount запущено, $stoppedCount контейнерів зупинено.'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count контейнер(и) запущено.'; + } + + @override + String get doubleColumnMode => 'Режим подвійної колонки'; + + @override + String get doubleColumnTip => 'Ця опція лише активує функцію, чи можна її насправді включити, залежить від ширини пристрою'; + + @override + String get editVirtKeys => 'Редагувати віртуальні клавіші'; + + @override + String get editor => 'Редактор'; + + @override + String get editorHighlightTip => 'Поточна підсвітка коду не ідеальна і може бути вимкнена для покращення.'; + + @override + String get encode => 'Кодувати'; + + @override + String get envVars => 'Змінні середовища'; + + @override + String get experimentalFeature => 'Експериментальна функція'; + + @override + String get extraArgs => 'Додаткові аргументи'; + + @override + String get fallbackSshDest => 'Резервна SSH адреса'; + + @override + String get fdroidReleaseTip => 'Якщо ви завантажили цей застосунок з F-Droid, рекомендується відключити цю опцію.'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'Файл \'$file\' занадто великий ($size), макс $sizeMax'; + } + + @override + String get followSystem => 'Слідувати системі'; + + @override + String get font => 'Шрифт'; + + @override + String get fontSize => 'Розмір шрифту'; + + @override + String get force => 'Примусово'; + + @override + String get fullScreen => 'Повноекранний режим'; + + @override + String get fullScreenJitter => 'Тремтіння в повноекранному режимі'; + + @override + String get fullScreenJitterHelp => 'Щоб уникнути вигоряння екрану'; + + @override + String get fullScreenTip => 'Чи слід увімкнути повноекранний режим під час повороту пристрою в горизонтальне положення? Ця опція стосується лише вкладки сервера.'; + + @override + String get goBackQ => 'Повернутися назад?'; + + @override + String get goto => 'Перейти до'; + + @override + String get hideTitleBar => 'Сховати заголовок'; + + @override + String get highlight => 'Підсвітка коду'; + + @override + String get homeWidgetUrlConfig => 'Налаштувати URL віджета на головному екрані'; + + @override + String get host => 'Хост'; + + @override + String httpFailedWithCode(Object code) { + return 'Запит не вдався, код статусу: $code'; + } + + @override + String get ignoreCert => 'Ігнорувати сертифікат'; + + @override + String get image => 'Зображення'; + + @override + String get imagesList => 'Список зображень'; + + @override + String get init => 'Ініціалізувати'; + + @override + String get inner => 'Внутрішній'; + + @override + String get install => 'Встановити'; + + @override + String get installDockerWithUrl => 'Будь ласка, спочатку встановіть Docker. (https://docs.docker.com/engine/install)'; + + @override + String get invalid => 'Недійсний'; + + @override + String get jumpServer => 'Стрибковий Сервер'; + + @override + String get keepForeground => 'Тримати застосунок на передньому плані!'; + + @override + String get keepStatusWhenErr => 'Зберегати останній стан сервера'; + + @override + String get keepStatusWhenErrTip => 'Тільки в разі виникнення помилки під час виконання скрипту'; + + @override + String get keyAuth => 'Аутентифікація ключем'; + + @override + String get letterCache => 'Кешування букв'; + + @override + String get letterCacheTip => 'Рекомендується відключити, але після вимкнення стане неможливим введення CJK (китайських, японських, корейських) символів.'; + + @override + String get license => 'Ліцензія'; + + @override + String get location => 'Місцезнаходження'; + + @override + String get loss => 'втрата пакетів'; + + @override + String madeWithLove(Object myGithub) { + return 'Зроблено з ❤️ від $myGithub'; + } + + @override + String get manual => 'Посібник'; + + @override + String get max => 'макс.'; + + @override + String get maxRetryCount => 'Кількість повторних спроб підключення до сервера'; + + @override + String get maxRetryCountEqual0 => 'Знову і знову буде намагатися повторно підключитися.'; + + @override + String get min => 'мін.'; + + @override + String get mission => 'Місія'; + + @override + String get more => 'Більше'; + + @override + String get moveOutServerFuncBtnsHelp => 'Включено: може відображатися під кожною карткою на вкладці Сервер. Вимкнено: може відображатися вгорі на сторінці деталей сервера.'; + + @override + String get ms => 'мс.'; + + @override + String get needHomeDir => 'Якщо ви користувач Synology, [дивіться тут](https://kb.synology.com/DSM/tutorial/user_enable_home_service). Користувачі інших систем повинні знайти інформацію про те, як створити домашній каталог.'; + + @override + String get needRestart => 'Необхідно перезапустити застосунок'; + + @override + String get net => 'Мережа'; + + @override + String get netViewType => 'Тип перегляду мережі'; + + @override + String get newContainer => 'Новий контейнер'; + + @override + String get noLineChart => 'Не використовувати лінійні діаграми'; + + @override + String get noLineChartForCpu => 'Не використовувати лінійні діаграми для ЦП'; + + @override + String get noPrivateKeyTip => 'Приватного ключа немає, можливо, він був видалений або сталася помилка конфігурації.'; + + @override + String get noPromptAgain => 'Більше не запитувати'; + + @override + String get node => 'Вузол'; + + @override + String get notAvailable => 'Недоступний'; + + @override + String get onServerDetailPage => 'На сторінці деталі сервера'; + + @override + String get onlyOneLine => 'Відображати лише в один рядок (прокрутка)'; + + @override + String get onlyWhenCoreBiggerThan8 => 'Працює лише тоді, коли кількість ядер перевищує 8'; + + @override + String get openLastPath => 'Відкрити останній шлях'; + + @override + String get openLastPathTip => 'Для різних серверів будуть збережені різні логи. Записується шлях при виході'; + + @override + String get parseContainerStatsTip => 'Парсинг статусу зайнятості Docker є відносно повільним.'; + + @override + String percentOfSize(Object percent, Object size) { + return '$percent% з $size'; + } + + @override + String get permission => 'Дозволи'; + + @override + String get pingAvg => 'Середнє:'; + + @override + String get pingInputIP => 'Будь ласка, введіть цільовий IP / Домен.'; + + @override + String get pingNoServer => 'Немає сервера для пінгування.\nБудь ласка, додайте сервер у вкладці `Сервер`.'; + + @override + String get pkg => 'Пакет'; + + @override + String get plugInType => 'Тип вставки'; + + @override + String get port => 'Порт'; + + @override + String get preview => 'Попередній перегляд'; + + @override + String get privateKey => 'Приватний ключ'; + + @override + String get process => 'Процес'; + + @override + String get pushToken => 'Надіслати токен'; + + @override + String get pveIgnoreCertTip => 'Не рекомендується включати, будьте обережні з ризиками безпеки! Якщо ви використовуєте стандартний сертифікат від PVE, вам потрібно увімкнути цю опцію.'; + + @override + String get pveLoginFailed => 'Не вдалося увійти. Неможливо пройти аутентифікацію за допомогою імені користувача/пароля з конфігурації сервера для входу Linux PAM.'; + + @override + String get pveVersionLow => 'Ця функція наразі перебуває на стадії тестування та випробувалася лише на PVE 8+. Будь ласка, використовуйте її з обережністю.'; + + @override + String get pwd => 'Пароль'; + + @override + String get read => 'Читати'; + + @override + String get reboot => 'Перезавантажити'; + + @override + String get rememberPwdInMem => 'Запам\'ятати пароль у пам\'яті'; + + @override + String get rememberPwdInMemTip => 'Використовується для контейнерів, призупинення тощо.'; + + @override + String get rememberWindowSize => 'Запам\'ятати розмір вікна'; + + @override + String get remotePath => 'Віддалений шлях'; + + @override + String get restart => 'Перезапустити'; + + @override + String get result => 'Результат'; + + @override + String get rotateAngel => 'Кут повороту'; + + @override + String get route => 'Маршрут'; + + @override + String get run => 'Запустити'; + + @override + String get running => 'Виконання'; + + @override + String get sameIdServerExist => 'Сервер з таким ID вже існує'; + + @override + String get save => 'Зберегти'; + + @override + String get saved => 'Збережено'; + + @override + String get second => 'сек.'; + + @override + String get sensors => 'Датчики'; + + @override + String get sequence => 'Послідовність'; + + @override + String get server => 'Сервер'; + + @override + String get serverDetailOrder => 'Порядок віджетів на сторінці деталі'; + + @override + String get serverFuncBtns => 'Кнопки функцій сервера'; + + @override + String get serverOrder => 'Порядок сервера'; + + @override + String get sftpDlPrepare => 'Підготовка до підключення...'; + + @override + String get sftpEditorTip => 'Якщо порожньо, використовуйте вбудований редактор файлів програми. Якщо є значення, використовуйте редактор віддаленого сервера, наприклад, `vim` (рекомендується автоматично визначити відповідно до `EDITOR`).'; + + @override + String get sftpRmrDirSummary => 'Використовуйте `rm -r`, щоб видалити папку в SFTP.'; + + @override + String get sftpSSHConnected => 'SFTP підключено'; + + @override + String get sftpShowFoldersFirst => 'Спочатку відображати директорії'; + + @override + String get showDistLogo => 'Показати логотип дистрибутива'; + + @override + String get shutdown => 'Вимкнення'; + + @override + String get size => 'Розмір'; + + @override + String get snippet => 'Фрагмент'; + + @override + String get softWrap => 'М\'ягкий перенос'; + + @override + String get specifyDev => 'Вказати пристрій'; + + @override + String get specifyDevTip => 'Наприклад, статистика мережевого трафіку за замовчуванням є для всіх пристроїв. Ви можете вказати певний пристрій тут.'; + + @override + String get speed => 'Швидкість'; + + @override + String spentTime(Object time) { + return 'Витрачений час: $time'; + } + + @override + String get sshTermHelp => 'Коли термінал прокрутний, горизонтальне проведення вибирає текст. Натискання кнопки клавіатури вмикає/вимикає клавіатуру. Іконка файлу відкриває поточний шлях SFTP. Кнопка буфера обміну копіює вміст, коли текст вибрано, і вставляє вміст з буфера обміну в термінал, коли текст не вибрано і є вміст у буфері обміну. Іконка коду вставляє фрагменти коду в термінал і виконує їх.'; + + @override + String sshTip(Object url) { + return 'Ця функція наразі в експериментальній стадії. Будь ласка, повідомте про помилки за адресою $url або приєднуйтеся до нашої розробки.'; + } + + @override + String get sshVirtualKeyAutoOff => 'Автоматичне переключення віртуальних клавіш'; + + @override + String get start => 'Старт'; + + @override + String get stat => 'Статистика'; + + @override + String get stats => 'Статистики'; + + @override + String get stop => 'Зупинити'; + + @override + String get stopped => 'Зупинено'; + + @override + String get storage => 'Сховище'; + + @override + String get supportFmtArgs => 'Підтримуються такі параметри форматування:'; + + @override + String get suspend => 'Призупинити'; + + @override + String get suspendTip => 'Функція призупинення потребує адміністративних прав та підтримки systemd.'; + + @override + String switchTo(Object val) { + return 'Переключитися на $val'; + } + + @override + String get sync => 'Синхронізація'; + + @override + String get syncTip => 'Може знадобитися перезапуск, щоб деякі зміни набрали чинності.'; + + @override + String get system => 'Система'; + + @override + String get tag => 'Теги'; + + @override + String get temperature => 'Температура'; + + @override + String get termFontSizeTip => 'Це налаштування вплине на розмір терміналу (ширину та висоту). Ви можете масштабувати на сторінці терміналу, щоб налаштувати розмір шрифту поточної сесії.'; + + @override + String get terminal => 'Термінал'; + + @override + String get test => 'Тест'; + + @override + String get textScaler => 'Масштабування тексту'; + + @override + String get textScalerTip => '1.0 => 100% (оригінальний розмір), працює лише на частині шрифта сторінки сервера, не рекомендується змінювати.'; + + @override + String get theme => 'Тема'; + + @override + String get time => 'Час'; + + @override + String get times => 'Рази'; + + @override + String get total => 'Всього'; + + @override + String get traffic => 'Трафік'; + + @override + String get trySudo => 'Спробуйте використовувати sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => 'Невідомо'; + + @override + String get unkownConvertMode => 'Невідомий режим конвертації'; + + @override + String get update => 'Оновити'; + + @override + String get updateIntervalEqual0 => 'Ви встановили 0, автоматичне оновлення не відбудеться.\nНе можна розрахувати статус ЦП.'; + + @override + String get updateServerStatusInterval => 'Інтервал оновлення статусу сервера'; + + @override + String get upload => 'Завантаження'; + + @override + String get upsideDown => 'Доверху дном'; + + @override + String get uptime => 'Час роботи'; + + @override + String get useCdn => 'Використання CDN'; + + @override + String get useCdnTip => 'Нереспонсивним користувачам рекомендується використовувати CDN. Чи хочете ви його використовувати?'; + + @override + String get useNoPwd => 'Пароль не буде використовуватися'; + + @override + String get usePodmanByDefault => 'Використовувати Podman за замовчуванням'; + + @override + String get used => 'Використано'; + + @override + String get view => 'Переглянути'; + + @override + String get viewErr => 'Переглянути помилку'; + + @override + String get virtKeyHelpClipboard => 'Копіювати в буфер обміну, якщо вибраний термінал не порожній, в іншому випадку вставити вміст буфера обміну в термінал.'; + + @override + String get virtKeyHelpIME => 'Увімкнути/вимкнути клавіатуру'; + + @override + String get virtKeyHelpSFTP => 'Відкрити поточний каталог у SFTP.'; + + @override + String get waitConnection => 'Будь ласка, зачекайте, доки з\'єднання буде встановлено.'; + + @override + String get wakeLock => 'Залишити активним'; + + @override + String get watchNotPaired => 'Немає спарованого Apple Watch'; + + @override + String get webdavSettingEmpty => 'Налаштування WebDav порожнє'; + + @override + String get whenOpenApp => 'При відкритті програми'; + + @override + String get wolTip => 'Після налаштування WOL (Wake-on-LAN), при кожному підключенні до сервера відправляється запит WOL.'; + + @override + String get write => 'Записати'; + + @override + String get writeScriptFailTip => 'Запис у скрипт не вдався, можливо, через брак дозволів або каталог не існує.'; + + @override + String get writeScriptTip => 'Після підключення до сервера скрипт буде записано у ~/.config/server_box для моніторингу стану системи. Ви можете переглянути вміст скрипта.'; +} diff --git a/lib/generated/l10n/l10n_zh.dart b/lib/generated/l10n/l10n_zh.dart new file mode 100644 index 000000000..f99de8f59 --- /dev/null +++ b/lib/generated/l10n/l10n_zh.dart @@ -0,0 +1,1395 @@ +import 'l10n.dart'; + +// ignore_for_file: type=lint + +/// The translations for Chinese (`zh`). +class AppLocalizationsZh extends AppLocalizations { + AppLocalizationsZh([String locale = 'zh']) : super(locale); + + @override + String get aboutThanks => '感谢以下参与的各位。'; + + @override + String get acceptBeta => '接受测试版更新推送'; + + @override + String get addSystemPrivateKeyTip => '当前没有任何私钥,是否添加系统自带的(~/.ssh/id_rsa)?'; + + @override + String get added2List => '已添加至任务列表'; + + @override + String get addr => '地址'; + + @override + String get alreadyLastDir => '已经是最上层目录了'; + + @override + String get authFailTip => '认证失败,请检查密码/密钥/主机/用户等是否错误'; + + @override + String get autoBackupConflict => '只能同时开启一个自动备份'; + + @override + String get autoConnect => '自动连接'; + + @override + String get autoRun => '自动运行'; + + @override + String get autoUpdateHomeWidget => '自动更新桌面小部件'; + + @override + String get backupTip => '导出的数据仅进行了简单加密,请妥善保管。'; + + @override + String get backupVersionNotMatch => '备份版本不匹配,无法恢复'; + + @override + String get battery => '电池'; + + @override + String get bgRun => '后台运行'; + + @override + String get bgRunTip => '此开关只代表程序会尝试在后台运行,具体能否后台运行取决于是否开启了权限。原生 Android 请关闭本 App 的“电池优化”,MIUI / HyperOS 请修改省电策略为“无限制”。'; + + @override + String get cmd => '命令'; + + @override + String get collapseUITip => '是否默认折叠 UI 中的长列表'; + + @override + String get conn => '连接'; + + @override + String get container => '容器'; + + @override + String get containerTrySudoTip => '例如:在应用内将用户设置为 aaa,但是 Docker 安装在root用户下,这时就需要启用此选项'; + + @override + String get convert => '转换'; + + @override + String get copyPath => '复制路径'; + + @override + String get cpuViewAsProgressTip => '以进度条样式显示每个 CPU 的使用率(旧版样式)'; + + @override + String get cursorType => '光标类型'; + + @override + String get customCmd => '自定义命令'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki/主页#自定义命令'; + + @override + String get customCmdHint => '\"命令名称\": \"命令\"'; + + @override + String get decode => '解码'; + + @override + String get decompress => '解压缩'; + + @override + String get deleteServers => '批量删除服务器'; + + @override + String get dirEmpty => '请确保文件夹为空'; + + @override + String get disconnected => '连接断开'; + + @override + String get disk => '磁盘'; + + @override + String get diskIgnorePath => '忽略的磁盘路径'; + + @override + String get displayCpuIndex => '显示 CPU 索引'; + + @override + String dl2Local(Object fileName) { + return '下载 $fileName 到本地?'; + } + + @override + String get dockerEmptyRunningItems => '没有正在运行的容器。\n这可能是因为:\n- Docker 安装用户与 App 内配置的用户名不同\n- 环境变量 DOCKER_HOST 没有被正确读取。可以通过在终端内运行 `echo \$DOCKER_HOST` 来获取。'; + + @override + String dockerImagesFmt(Object count) { + return '共 $count 个镜像'; + } + + @override + String get dockerNotInstalled => 'Docker 未安装'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount 个正在运行, $stoppedCount 个已停止'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count 个容器正在运行'; + } + + @override + String get doubleColumnMode => '双列模式'; + + @override + String get doubleColumnTip => '此选项仅开启功能,实际是否能开启还取决于设备的宽度'; + + @override + String get editVirtKeys => '编辑虚拟按键'; + + @override + String get editor => '编辑器'; + + @override + String get editorHighlightTip => '目前的代码高亮性能较为糟糕,可以选择关闭以改善。'; + + @override + String get encode => '编码'; + + @override + String get envVars => '环境变量'; + + @override + String get experimentalFeature => '实验性功能'; + + @override + String get extraArgs => '额外参数'; + + @override + String get fallbackSshDest => '备选 SSH 目标'; + + @override + String get fdroidReleaseTip => '如果你是从 F-Droid 下载的本应用,推荐关闭此选项'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return '文件 \'$file\' 过大 \'$size\',超过了 $sizeMax'; + } + + @override + String get followSystem => '跟随系统'; + + @override + String get font => '字体'; + + @override + String get fontSize => '字体大小'; + + @override + String get force => '强制'; + + @override + String get fullScreen => '全屏模式'; + + @override + String get fullScreenJitter => '全屏模式抖动'; + + @override + String get fullScreenJitterHelp => '防止烧屏'; + + @override + String get fullScreenTip => '当设备旋转为横屏时,是否开启全屏模式。此选项仅作用于服务器 Tab 页。'; + + @override + String get goBackQ => '返回?'; + + @override + String get goto => '前往'; + + @override + String get hideTitleBar => '隐藏标题栏'; + + @override + String get highlight => '代码高亮'; + + @override + String get homeWidgetUrlConfig => '桌面部件链接配置'; + + @override + String get host => '主机'; + + @override + String httpFailedWithCode(Object code) { + return '请求失败, 状态码: $code'; + } + + @override + String get ignoreCert => '忽略证书'; + + @override + String get image => '镜像'; + + @override + String get imagesList => '镜像列表'; + + @override + String get init => '初始化'; + + @override + String get inner => '内置'; + + @override + String get install => '安装'; + + @override + String get installDockerWithUrl => '请先 https://docs.docker.com/engine/install docker'; + + @override + String get invalid => '无效'; + + @override + String get jumpServer => '跳板服务器'; + + @override + String get keepForeground => '请保持应用处于前台!'; + + @override + String get keepStatusWhenErr => '保留上次的服务器状态'; + + @override + String get keepStatusWhenErrTip => '仅限于执行脚本出错'; + + @override + String get keyAuth => '密钥认证'; + + @override + String get letterCache => '输入法字符缓存'; + + @override + String get letterCacheTip => '推荐关闭,但是关闭后无法输入 CJK 等文字'; + + @override + String get license => '证书'; + + @override + String get location => '位置'; + + @override + String get loss => '丢包率'; + + @override + String madeWithLove(Object myGithub) { + return '用❤️制作 by $myGithub'; + } + + @override + String get manual => '手动'; + + @override + String get max => '最大'; + + @override + String get maxRetryCount => '服务器尝试重连次数'; + + @override + String get maxRetryCountEqual0 => '会无限重试'; + + @override + String get min => '最小'; + + @override + String get mission => '任务'; + + @override + String get more => '更多'; + + @override + String get moveOutServerFuncBtnsHelp => '开启:可以在服务器 Tab 页的每个卡片下方显示。关闭:在服务器详情页顶部显示。'; + + @override + String get ms => '毫秒'; + + @override + String get needHomeDir => '如果你是群晖用户,[看这里](https://kb.synology.cn/zh-cn/DSM/tutorial/ssh_could_not_chdir_to_home_directory)。其他系统用户,需搜索如何创建家目录(home directory).'; + + @override + String get needRestart => '需要重启 App'; + + @override + String get net => '网络'; + + @override + String get netViewType => '网络视图类型'; + + @override + String get newContainer => '新建容器'; + + @override + String get noLineChart => '不使用折线图'; + + @override + String get noLineChartForCpu => 'CPU 不使用折线图'; + + @override + String get noPrivateKeyTip => '私钥不存在,可能已被删除/配置错误'; + + @override + String get noPromptAgain => '不再提示'; + + @override + String get node => '节点'; + + @override + String get notAvailable => '不可用'; + + @override + String get onServerDetailPage => '在服务器详情页'; + + @override + String get onlyOneLine => '仅显示为一行(可滚动)'; + + @override + String get onlyWhenCoreBiggerThan8 => '仅当核心数大于 8 时生效'; + + @override + String get openLastPath => '打开上次的路径'; + + @override + String get openLastPathTip => '不同的服务器会有不同的记录,且记录的是退出时的路径'; + + @override + String get parseContainerStatsTip => 'Docker 解析占用状态较为缓慢'; + + @override + String percentOfSize(Object percent, Object size) { + return '$size 的 $percent%'; + } + + @override + String get permission => '权限'; + + @override + String get pingAvg => '平均:'; + + @override + String get pingInputIP => '请输入目标IP或域名'; + + @override + String get pingNoServer => '没有服务器可用于 Ping\n请在服务器 tab 添加服务器后再试'; + + @override + String get pkg => '包管理'; + + @override + String get plugInType => '插入类型'; + + @override + String get port => '端口'; + + @override + String get preview => '预览'; + + @override + String get privateKey => '私钥'; + + @override + String get process => '进程'; + + @override + String get pushToken => '消息推送 Token'; + + @override + String get pveIgnoreCertTip => '不推荐开启,注意安全隐患!如果你使用的 PVE 默认证书,需要开启该选项'; + + @override + String get pveLoginFailed => '登录失败。无法使用服务器配置内的用户/密码,以 Linux PAM 方式登录。'; + + @override + String get pveVersionLow => '当前该功能处于测试阶段,仅在 PVE 8+ 上测试过,请谨慎使用'; + + @override + String get pwd => '密码'; + + @override + String get read => '读'; + + @override + String get reboot => '重启'; + + @override + String get rememberPwdInMem => '在内存中记住密码'; + + @override + String get rememberPwdInMemTip => '用于容器、挂起等'; + + @override + String get rememberWindowSize => '记住窗口大小'; + + @override + String get remotePath => '远端路径'; + + @override + String get restart => '重启'; + + @override + String get result => '结果'; + + @override + String get rotateAngel => '旋转角度'; + + @override + String get route => '路由'; + + @override + String get run => '运行'; + + @override + String get running => '运行中'; + + @override + String get sameIdServerExist => '已存在相同 id 的服务器'; + + @override + String get save => '保存'; + + @override + String get saved => '已保存'; + + @override + String get second => '秒'; + + @override + String get sensors => '传感器'; + + @override + String get sequence => '顺序'; + + @override + String get server => '服务器'; + + @override + String get serverDetailOrder => '详情页部件顺序'; + + @override + String get serverFuncBtns => '服务器功能按钮'; + + @override + String get serverOrder => '服务器顺序'; + + @override + String get sftpDlPrepare => '准备连接至服务器...'; + + @override + String get sftpEditorTip => '如果为空, 使用App内置的文件编辑器. 如果有值, 这是用远程服务器的编辑器, 例如 `vim` (建议根据 `EDITOR` 自动获取).'; + + @override + String get sftpRmrDirSummary => '在 SFTP 中使用 `rm -r` 来删除文件夹'; + + @override + String get sftpSSHConnected => 'SFTP 已连接...'; + + @override + String get sftpShowFoldersFirst => '文件夹显示在前'; + + @override + String get showDistLogo => '显示发行版 Logo'; + + @override + String get shutdown => '关机'; + + @override + String get size => '大小'; + + @override + String get snippet => '代码片段'; + + @override + String get softWrap => '自动换行'; + + @override + String get specifyDev => '指定设备'; + + @override + String get specifyDevTip => '例如网络流量统计默认是所有设备,你可以在这里指定特定的设备'; + + @override + String get speed => '速度'; + + @override + String spentTime(Object time) { + return '耗时: $time'; + } + + @override + String get sshTermHelp => '在终端可滚动时,横向拖动可以选中文字。点击键盘按钮可以开启/关闭键盘。文件图标会打开当前路径 SFTP。剪切板按钮会在有选中文字时复制内容,在未选中并且剪切板有内容时粘贴内容到终端。代码图标会粘贴代码片段到终端并执行。'; + + @override + String sshTip(Object url) { + return '该功能目前处于测试阶段。\n\n请在 $url 反馈问题,或者加入我们开发。'; + } + + @override + String get sshVirtualKeyAutoOff => '虚拟按键自动切换'; + + @override + String get start => '开始'; + + @override + String get stat => '统计'; + + @override + String get stats => '统计'; + + @override + String get stop => '停止'; + + @override + String get stopped => '已停止'; + + @override + String get storage => '存储'; + + @override + String get supportFmtArgs => '支持以下格式化参数:'; + + @override + String get suspend => '挂起'; + + @override + String get suspendTip => 'suspend 功能需要 root 权限及 systemd 支持。'; + + @override + String switchTo(Object val) { + return '切换到 $val'; + } + + @override + String get sync => '同步'; + + @override + String get syncTip => '可能需要重新启动,某些更改才能生效。'; + + @override + String get system => '系统'; + + @override + String get tag => '标签'; + + @override + String get temperature => '温度'; + + @override + String get termFontSizeTip => '此设置会影响终端大小(宽和高)。可以在终端页面缩放来调整当前会话的字体大小'; + + @override + String get terminal => '终端'; + + @override + String get test => '测试'; + + @override + String get textScaler => '字体缩放'; + + @override + String get textScalerTip => '1.0 => 100%(原大小),仅作用于服务器页面部分字体,不建议修改。'; + + @override + String get theme => '主题'; + + @override + String get time => '时间'; + + @override + String get times => '次'; + + @override + String get total => '总共'; + + @override + String get traffic => '流量'; + + @override + String get trySudo => '尝试使用 sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => '未知'; + + @override + String get unkownConvertMode => '未知转换模式'; + + @override + String get update => '更新'; + + @override + String get updateIntervalEqual0 => '你设置为 0,服务器状态不会自动刷新。\n且不能计算 CPU 使用情况。'; + + @override + String get updateServerStatusInterval => '服务器状态刷新间隔'; + + @override + String get upload => '上传'; + + @override + String get upsideDown => '上下交换'; + + @override + String get uptime => '启动时长'; + + @override + String get useCdn => '使用 CDN'; + + @override + String get useCdnTip => '非中国大陆用户推荐使用 CDN,是否使用?'; + + @override + String get useNoPwd => '将会使用无密码'; + + @override + String get usePodmanByDefault => '默认使用 Podman'; + + @override + String get used => '已用'; + + @override + String get view => '视图'; + + @override + String get viewErr => '查看错误'; + + @override + String get virtKeyHelpClipboard => '如果终端有选中字符,则复制选中字符至剪切板,否则粘贴剪切板内容至终端。'; + + @override + String get virtKeyHelpIME => '打开/关闭键盘'; + + @override + String get virtKeyHelpSFTP => '在 SFTP 中打开当前路径。'; + + @override + String get waitConnection => '请等待连接建立'; + + @override + String get wakeLock => '保持唤醒'; + + @override + String get watchNotPaired => '没有已配对的 Apple Watch'; + + @override + String get webdavSettingEmpty => 'WebDav 设置项为空'; + + @override + String get whenOpenApp => '当打开 App 时'; + + @override + String get wolTip => '在配置 WOL 后,每次连接服务器都会先发送一次 WOL 请求'; + + @override + String get write => '写'; + + @override + String get writeScriptFailTip => '写入脚本失败,可能是没有权限/目录不存在等'; + + @override + String get writeScriptTip => '在连接服务器后,会向 ~/.config/server_box 写入脚本来监测系统状态,你可以审查脚本内容。'; +} + +/// The translations for Chinese, as used in Taiwan (`zh_TW`). +class AppLocalizationsZhTw extends AppLocalizationsZh { + AppLocalizationsZhTw(): super('zh_TW'); + + @override + String get aboutThanks => '感謝以下參與的各位。'; + + @override + String get acceptBeta => '接受測試版更新推送'; + + @override + String get addSystemPrivateKeyTip => '當前沒有任何私鑰,是否添加系統自帶的 (~/.ssh/id_rsa)?'; + + @override + String get added2List => '已添加至任務列表'; + + @override + String get addr => '位址'; + + @override + String get alreadyLastDir => '已經是最上層目錄了'; + + @override + String get authFailTip => '認證失敗,請檢查密碼/密鑰/主機/用戶等是否錯誤。'; + + @override + String get autoBackupConflict => '只能同時開啓一個自動備份'; + + @override + String get autoConnect => '自動連接'; + + @override + String get autoRun => '自動運行'; + + @override + String get autoUpdateHomeWidget => '自動更新桌面小部件'; + + @override + String get backupTip => '匯出的資料僅進行了簡單加密,請妥善保管。'; + + @override + String get backupVersionNotMatch => '備份版本不匹配,無法還原'; + + @override + String get battery => '電池'; + + @override + String get bgRun => '後台運行'; + + @override + String get bgRunTip => '此開關只代表程式會嘗試在後台運行,具體能否在後臺運行取決於是否開啟了權限。 原生 Android 請關閉本 App 的“電池優化”,MIUI / HyperOS 請修改省電策略為“無限制”。'; + + @override + String get cmd => '命令'; + + @override + String get collapseUITip => '是否預設折疊 UI 中存在的長列表'; + + @override + String get conn => '連接'; + + @override + String get container => '容器'; + + @override + String get containerTrySudoTip => '例如:App 內設置使用者為 aaa,但是 Docker 安裝在 root 使用者,這時就需要開啟此選項'; + + @override + String get convert => '轉換'; + + @override + String get copyPath => '複製路徑'; + + @override + String get cpuViewAsProgressTip => '以進度條樣式顯示每個CPU的使用率(舊版樣式)'; + + @override + String get cursorType => '游標類型'; + + @override + String get customCmd => '自訂命令'; + + @override + String get customCmdDocUrl => 'https://github.com/lollipopkit/flutter_server_box/wiki/主页#自定义命令'; + + @override + String get customCmdHint => '\"命令名稱\": \"命令\"'; + + @override + String get decode => '解碼'; + + @override + String get decompress => '解壓縮'; + + @override + String get deleteServers => '批量刪除伺服器'; + + @override + String get dirEmpty => '請確保資料夾為空'; + + @override + String get disconnected => '連接斷開'; + + @override + String get disk => '磁碟'; + + @override + String get diskIgnorePath => '忽略的磁碟路徑'; + + @override + String get displayCpuIndex => '顯示 CPU 索引'; + + @override + String dl2Local(Object fileName) { + return '下載 $fileName 到本地?'; + } + + @override + String get dockerEmptyRunningItems => '沒有正在運行的容器。\n這可能是因為:\n- Docker 安裝使用者與 App 內配置的使用者名稱不同\n- 環境變量 DOCKER_HOST 沒有被正確讀取。你可以通過在終端內運行 `echo \$DOCKER_HOST` 來獲取。'; + + @override + String dockerImagesFmt(Object count) { + return '共 $count 個鏡像'; + } + + @override + String get dockerNotInstalled => 'Docker 未安裝'; + + @override + String dockerStatusRunningAndStoppedFmt(Object runningCount, Object stoppedCount) { + return '$runningCount 個正在運行, $stoppedCount 個已停止'; + } + + @override + String dockerStatusRunningFmt(Object count) { + return '$count 個容器正在運行'; + } + + @override + String get doubleColumnMode => '雙列模式'; + + @override + String get doubleColumnTip => '此選項僅開啟功能,實際是否能開啟還取決於設備的寬度'; + + @override + String get editVirtKeys => '編輯虛擬按鍵'; + + @override + String get editor => '編輯器'; + + @override + String get editorHighlightTip => '目前的代碼高亮性能較為糟糕,可以選擇關閉以改善。'; + + @override + String get encode => '編碼'; + + @override + String get envVars => '環境變量'; + + @override + String get experimentalFeature => '實驗性功能'; + + @override + String get extraArgs => '額外參數'; + + @override + String get fallbackSshDest => '備選 SSH 目標'; + + @override + String get fdroidReleaseTip => '如果你是從 F-Droid 下載的本應用,推薦關閉此選項'; + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return '文件 \'$file\' 過大 \'$size\',超過了 $sizeMax'; + } + + @override + String get followSystem => '跟隨系統'; + + @override + String get font => '字型'; + + @override + String get fontSize => '字型大小'; + + @override + String get force => '強制'; + + @override + String get fullScreen => '全螢幕模式'; + + @override + String get fullScreenJitter => '全螢幕模式抖動'; + + @override + String get fullScreenJitterHelp => '防止燒屏'; + + @override + String get fullScreenTip => '當設備旋轉為橫屏時,是否開啟全熒幕模式?此選項僅適用於伺服器選項卡。'; + + @override + String get goBackQ => '返回?'; + + @override + String get goto => '前往'; + + @override + String get hideTitleBar => '隱藏標題欄'; + + @override + String get highlight => '代碼高亮'; + + @override + String get homeWidgetUrlConfig => '桌面部件鏈接配置'; + + @override + String get host => '主機'; + + @override + String httpFailedWithCode(Object code) { + return '請求失敗, 狀態碼: $code'; + } + + @override + String get ignoreCert => '忽略證書'; + + @override + String get image => '鏡像'; + + @override + String get imagesList => '鏡像列表'; + + @override + String get init => '初始化'; + + @override + String get inner => '內建'; + + @override + String get install => '安裝'; + + @override + String get installDockerWithUrl => '請先 https://docs.docker.com/engine/install docker'; + + @override + String get invalid => '無效'; + + @override + String get jumpServer => '跳板伺服器'; + + @override + String get keepForeground => '請保持應用處於前台!'; + + @override + String get keepStatusWhenErr => '保留上次的伺服器狀態'; + + @override + String get keepStatusWhenErrTip => '僅在執行腳本出錯時'; + + @override + String get keyAuth => '密鑰認證'; + + @override + String get letterCache => '输入法字符緩存'; + + @override + String get letterCacheTip => '建議關閉,但關閉後將無法輸入 CJK 等文字。'; + + @override + String get license => '證書'; + + @override + String get location => '位置'; + + @override + String get loss => '丟包率'; + + @override + String madeWithLove(Object myGithub) { + return '用❤️製作 by $myGithub'; + } + + @override + String get manual => '手動'; + + @override + String get max => '最大'; + + @override + String get maxRetryCount => '伺服器嘗試重連次數'; + + @override + String get maxRetryCountEqual0 => '會無限重試'; + + @override + String get min => '最小'; + + @override + String get mission => '任務'; + + @override + String get more => '更多'; + + @override + String get moveOutServerFuncBtnsHelp => '開啟:可以在伺服器 Tab 頁的每個卡片下方顯示。關閉:在伺服器詳情頁頂部顯示。'; + + @override + String get ms => '毫秒'; + + @override + String get needHomeDir => '如果你是群暉用戶,[看這裡](https://kb.synology.com/DSM/tutorial/user_enable_home_service)。其他系統用戶,需搜索如何創建家目錄(home directory)。'; + + @override + String get needRestart => '需要重啓 App'; + + @override + String get net => '網路'; + + @override + String get netViewType => '網路視圖類型'; + + @override + String get newContainer => '新建容器'; + + @override + String get noLineChart => '不使用折線圖'; + + @override + String get noLineChartForCpu => 'CPU 不使用折線圖'; + + @override + String get noPrivateKeyTip => '私鑰不存在,可能已被刪除/配置錯誤。'; + + @override + String get noPromptAgain => '不再提示'; + + @override + String get node => '節點'; + + @override + String get notAvailable => '不可用'; + + @override + String get onServerDetailPage => '在伺服器詳情頁'; + + @override + String get onlyOneLine => '僅顯示為一行(可滾動)'; + + @override + String get onlyWhenCoreBiggerThan8 => '僅當核心數大於 8 時生效'; + + @override + String get openLastPath => '打開上次的路徑'; + + @override + String get openLastPathTip => '不同的伺服器會有不同的記錄,且記錄的是退出時的路徑'; + + @override + String get parseContainerStatsTip => 'Docker 解析佔用狀態較為緩慢'; + + @override + String percentOfSize(Object percent, Object size) { + return '$size 的 $percent%'; + } + + @override + String get permission => '權限'; + + @override + String get pingAvg => '平均:'; + + @override + String get pingInputIP => '請輸入目標 IP 或域名'; + + @override + String get pingNoServer => '沒有伺服器可用於 Ping\n請在伺服器 Tab 新增伺服器後再試'; + + @override + String get pkg => '包管理'; + + @override + String get plugInType => '插入類型'; + + @override + String get port => '埠'; + + @override + String get preview => '預覽'; + + @override + String get privateKey => '私鑰'; + + @override + String get process => '行程'; + + @override + String get pushToken => '消息推送 Token'; + + @override + String get pveIgnoreCertTip => '不建議啟用,請注意安全風險!如果您使用的是 PVE 的默認證書,則需要啟用此選項。'; + + @override + String get pveLoginFailed => '登錄失敗。無法使用伺服器配置中的使用者名稱/密碼以 Linux PAM 方式登錄。'; + + @override + String get pveVersionLow => '此功能目前處於測試階段,僅在 PVE 8+ 上進行過測試。請謹慎使用。'; + + @override + String get pwd => '密碼'; + + @override + String get read => '读'; + + @override + String get reboot => '重启'; + + @override + String get rememberPwdInMem => '在記憶體中記住密碼'; + + @override + String get rememberPwdInMemTip => '用於容器、暫停等'; + + @override + String get rememberWindowSize => '記住窗口大小'; + + @override + String get remotePath => '遠端路徑'; + + @override + String get restart => '重啓'; + + @override + String get result => '結果'; + + @override + String get rotateAngel => '旋轉角度'; + + @override + String get route => '路由'; + + @override + String get run => '運行'; + + @override + String get running => '運作中'; + + @override + String get sameIdServerExist => '已存在相同 ID 的伺服器'; + + @override + String get save => '保存'; + + @override + String get saved => '已保存'; + + @override + String get second => '秒'; + + @override + String get sensors => '感測器'; + + @override + String get sequence => '順序'; + + @override + String get server => '伺服器'; + + @override + String get serverDetailOrder => '詳情頁部件順序'; + + @override + String get serverFuncBtns => '伺服器功能按鈕'; + + @override + String get serverOrder => '伺服器順序'; + + @override + String get sftpDlPrepare => '準備連接至伺服器...'; + + @override + String get sftpEditorTip => '如果為空, 使用App內置的文件編輯器。如果有值, 則使用遠程伺服器的編輯器, 例如 `vim`(建議根據 `EDITOR` 自動獲取)。'; + + @override + String get sftpRmrDirSummary => '在 SFTP 中使用 `rm -r` 來刪除文件夾'; + + @override + String get sftpSSHConnected => 'SFTP 已連接...'; + + @override + String get sftpShowFoldersFirst => '資料夾顯示在前'; + + @override + String get showDistLogo => '顯示發行版 Logo'; + + @override + String get shutdown => '關機'; + + @override + String get size => '大小'; + + @override + String get snippet => '程式片段'; + + @override + String get softWrap => '軟換行'; + + @override + String get specifyDev => '指定裝置'; + + @override + String get specifyDevTip => '例如網路流量統計預設是所有裝置,你可以在這裡指定特定的裝置。'; + + @override + String get speed => '速度'; + + @override + String spentTime(Object time) { + return '耗時: $time'; + } + + @override + String get sshTermHelp => '在終端可滾動時,橫向拖動可以選中文字。點擊鍵盤按鈕可以開啟/關閉鍵盤。文件圖標會打開當前路徑 SFTP。剪貼簿按鈕會在有選中文字時複製內容,在未選中並且剪貼簿有內容時貼上內容到終端。代碼圖標會貼上代碼片段到終端並執行。'; + + @override + String sshTip(Object url) { + return '該功能目前處於測試階段。\n\n請在 $url 反饋問題,或者加入我們開發。'; + } + + @override + String get sshVirtualKeyAutoOff => '虛擬按鍵自動切換'; + + @override + String get start => '開始'; + + @override + String get stat => '統計'; + + @override + String get stats => '統計'; + + @override + String get stop => '停止'; + + @override + String get stopped => '已停止'; + + @override + String get storage => '存儲'; + + @override + String get supportFmtArgs => '支援以下格式化參數:'; + + @override + String get suspend => '挂起'; + + @override + String get suspendTip => 'suspend 功能需要 root 權限及 systemd 支持。'; + + @override + String switchTo(Object val) { + return '切換到 $val'; + } + + @override + String get sync => '同步'; + + @override + String get syncTip => '可能需要重新啟動,某些更改才能生效。'; + + @override + String get system => '系統'; + + @override + String get tag => '标签'; + + @override + String get temperature => '溫度'; + + @override + String get termFontSizeTip => '此設置將影響終端大小(寬度和高度)。您可以在終端頁面縮放,來調整當前會話的字型大小。'; + + @override + String get terminal => '终端機'; + + @override + String get test => '測試'; + + @override + String get textScaler => '字型縮放'; + + @override + String get textScalerTip => '1.0 => 100%(原大小),僅作用於伺服器頁面部分字型,不建議修改。'; + + @override + String get theme => '主題'; + + @override + String get time => '時間'; + + @override + String get times => '次'; + + @override + String get total => '總共'; + + @override + String get traffic => '流量'; + + @override + String get trySudo => '嘗試使用 sudo'; + + @override + String get ttl => 'TTL'; + + @override + String get unknown => '未知'; + + @override + String get unkownConvertMode => '未知轉換模式'; + + @override + String get update => '更新'; + + @override + String get updateIntervalEqual0 => '你設置為 0,伺服器狀態不會自動更新。\n且不能計算CPU使用情況。'; + + @override + String get updateServerStatusInterval => '伺服器狀態更新間隔'; + + @override + String get upload => '上傳'; + + @override + String get upsideDown => '上下交換'; + + @override + String get uptime => '啟動時長'; + + @override + String get useCdn => '使用 CDN'; + + @override + String get useCdnTip => '非中國大陸用戶建議使用 CDN,是否使用?'; + + @override + String get useNoPwd => '将使用無密碼'; + + @override + String get usePodmanByDefault => '默認使用 Podman'; + + @override + String get used => '已用'; + + @override + String get view => '視圖'; + + @override + String get viewErr => '查看錯誤'; + + @override + String get virtKeyHelpClipboard => '如果終端有選中字元,則復製選中字元至剪貼簿,否則粘貼剪貼簿內容至終端。'; + + @override + String get virtKeyHelpIME => '打開/關閉鍵盤'; + + @override + String get virtKeyHelpSFTP => '在 SFTP 中打開當前路徑。'; + + @override + String get waitConnection => '請等待連接建立'; + + @override + String get wakeLock => '保持喚醒'; + + @override + String get watchNotPaired => '沒有已配對的 Apple Watch'; + + @override + String get webdavSettingEmpty => 'WebDav 設置項爲空'; + + @override + String get whenOpenApp => '當打開 App 時'; + + @override + String get wolTip => '在配置 WOL(網絡喚醒)後,每次連接伺服器都會先發送一次 WOL 請求。'; + + @override + String get write => '写'; + + @override + String get writeScriptFailTip => '寫入腳本失敗,可能是沒有權限/目錄不存在等。'; + + @override + String get writeScriptTip => '連接到伺服器後,將會在 ~/.config/server_box 中寫入一個腳本來監測系統狀態。你可以審查腳本內容。'; +} diff --git a/lib/intro.dart b/lib/intro.dart index 7b8c9778d..89adf5d18 100644 --- a/lib/intro.dart +++ b/lib/intro.dart @@ -59,8 +59,10 @@ final class _IntroPage extends StatelessWidget { ).cardx, ListTile( leading: const Icon(Icons.update), - title: Text(libL10n.autoCheckUpdate), - subtitle: Text(l10n.fdroidReleaseTip, style: UIs.textGrey), + title: Text(libL10n.checkUpdate), + subtitle: isAndroid + ? Text(l10n.fdroidReleaseTip, style: UIs.textGrey) + : null, trailing: StoreSwitch(prop: _setting.autoCheckAppUpdate), ).cardx, ListTile( diff --git a/lib/main.dart b/lib/main.dart index 815cf9238..ba143500b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -81,7 +81,7 @@ Future _initData() async { Hive.registerAdapter(ServerCustomAdapter()); // 7 Hive.registerAdapter(WakeOnLanCfgAdapter()); // 8 - await PrefStore.init(); // Call this before accessing any store + await PrefStore.shared.init(); // Call this before accessing any store await Stores.init(); // DO NOT change the order of these providers. @@ -112,7 +112,7 @@ void _doPlatformRelated() async { FlutterDisplayMode.setHighRefreshRate(); } - final serversCount = Stores.server.box.keys.length; + final serversCount = Stores.server.keys().length; // Plus 1 to avoid 0. Computer.shared.turnOn(workersCount: (serversCount / 3).round() + 1); @@ -121,14 +121,14 @@ void _doPlatformRelated() async { // It may contains some async heavy funcs. Future _doVersionRelated() async { - final curVer = Stores.setting.lastVer.fetch(); + final lastVer = Stores.setting.lastVer.fetch(); const newVer = BuildData.build; // It's only the version upgrade trigger logic. // How to upgrade the data is inside each own func. - if (curVer < newVer) { + if (lastVer < newVer) { ServerDetailCards.autoAddNewCards(newVer); ServerFuncBtn.autoAddNewFuncs(newVer); - NoBackupStore.instance.migrate(); + NoBackupStore.instance.migrate(lastVer); Stores.setting.lastVer.put(newVer); } } diff --git a/lib/view/page/backup.dart b/lib/view/page/backup.dart index feac52f20..18602db96 100644 --- a/lib/view/page/backup.dart +++ b/lib/view/page/backup.dart @@ -14,6 +14,7 @@ import 'package:server_box/data/res/misc.dart'; import 'package:server_box/data/res/store.dart'; import 'package:icons_plus/icons_plus.dart'; import 'package:server_box/data/store/no_backup.dart'; +import 'package:webdav_client/webdav_client.dart'; class BackupPage extends StatefulWidget { const BackupPage({super.key}); @@ -105,7 +106,7 @@ final class _BackupPageState extends State leading: const Icon(Icons.cloud), title: const Text('iCloud'), trailing: StoreSwitch( - prop: _noBak.icloudSync, + prop: PrefProps.icloudSync, validator: (p0) { if (p0 && _noBak.webdavSync.fetch()) { context.showSnackBar(l10n.autoBackupConflict); @@ -150,7 +151,7 @@ final class _BackupPageState extends State return false; } } - if (_noBak.icloudSync.fetch()) { + if (PrefProps.icloudSync.get()) { context.showSnackBar(l10n.autoBackupConflict); return false; } @@ -159,7 +160,7 @@ final class _BackupPageState extends State callback: (val) async { if (val) { webdavLoading.value = true; - await bakSync.sync(rs: webdav); + await bakSync.sync(rs: Webdav.shared); webdavLoading.value = false; } }, @@ -326,7 +327,7 @@ final class _BackupPageState extends State Future _onTapWebdavDl(BuildContext context) async { webdavLoading.value = true; try { - final files = await webdav.list(); + final files = await Webdav.shared.list(); if (files.isEmpty) return context.showSnackBar(l10n.dirEmpty); final fileName = await context.showPickSingleDialog( @@ -335,7 +336,7 @@ final class _BackupPageState extends State ); if (fileName == null) return; - await webdav.download(relativePath: fileName); + await Webdav.shared.download(relativePath: fileName); final dlFile = await File('${Paths.doc}/$fileName').readAsString(); final dlBak = await Computer.shared.start(Backup.fromJsonString, dlFile); await dlBak.merge(force: true); @@ -353,7 +354,7 @@ final class _BackupPageState extends State final bakName = '$date-${Miscs.bakFileName}'; try { await Backup.backup(bakName); - await webdav.upload(relativePath: bakName); + await Webdav.shared.upload(relativePath: bakName); Loggers.app.info('Upload webdav backup success'); } catch (e, s) { context.showErrDialog(e, s, l10n.upload); @@ -403,12 +404,8 @@ final class _BackupPageState extends State try { await Webdav.test(url.text, user.text, pwd.text); context.showSnackBar(libL10n.success); - webdav.init(WebdavInitArgs( - url: url.text, - user: user.text, - pwd: pwd.text, - prefix: 'serverbox/', - )); + Webdav.shared.client = + WebdavClient(url: url.text, user: user.text, pwd: pwd.text); } catch (e, s) { context.showErrDialog(e, s, 'Webdav'); } diff --git a/lib/view/page/container.dart b/lib/view/page/container.dart index 7c3920e7b..7faa81094 100644 --- a/lib/view/page/container.dart +++ b/lib/view/page/container.dart @@ -175,7 +175,7 @@ class _ContainerPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text(_container.type.name.upperFirst), + Text(_container.type.name.capitalize), Text(_container.version ?? l10n.unknown), ], ), diff --git a/lib/view/page/home/appbar.dart b/lib/view/page/home/appbar.dart index 6d51ddebd..64bcf782b 100644 --- a/lib/view/page/home/appbar.dart +++ b/lib/view/page/home/appbar.dart @@ -23,4 +23,4 @@ final class _AppBar extends StatelessWidget implements PreferredSizeWidget { }; return Size.fromHeight(height); } -} \ No newline at end of file +} diff --git a/lib/view/page/server/detail/view.dart b/lib/view/page/server/detail/view.dart index 7915aa439..4252febed 100644 --- a/lib/view/page/server/detail/view.dart +++ b/lib/view/page/server/detail/view.dart @@ -144,7 +144,7 @@ class _ServerDetailPageState extends State Widget _buildLogo(Server si) { var logoUrl = si.spi.custom?.logoUrl ?? - _settings.serverLogoUrl.fetch().selfIfNotNullEmpty; + _settings.serverLogoUrl.fetch().selfNotEmptyOrNull; if (logoUrl == null) return UIs.placeholder; final dist = si.status.more[StatusCmdType.sys]?.dist; diff --git a/lib/view/page/server/edit.dart b/lib/view/page/server/edit.dart index 820eac898..ac000c2bf 100644 --- a/lib/view/page/server/edit.dart +++ b/lib/view/page/server/edit.dart @@ -438,7 +438,7 @@ class _ServerEditPageState extends State with AfterLayoutMixin { leading: const Icon(MingCute.doc_line), title: Text(libL10n.doc), trailing: const Icon(Icons.open_in_new, size: 17), - onTap: () => l10n.customCmdDocUrl.launch(), + onTap: l10n.customCmdDocUrl.launchUrl, ).cardx, ], ); @@ -572,13 +572,13 @@ class _ServerEditPageState extends State with AfterLayoutMixin { } final customCmds = _customCmds.value; final custom = ServerCustom( - pveAddr: _pveAddrCtrl.text.selfIfNotNullEmpty, + pveAddr: _pveAddrCtrl.text.selfNotEmptyOrNull, pveIgnoreCert: _pveIgnoreCert.value, cmds: customCmds.isEmpty ? null : customCmds, - preferTempDev: _preferTempDevCtrl.text.selfIfNotNullEmpty, - logoUrl: _logoUrlCtrl.text.selfIfNotNullEmpty, - netDev: _netDevCtrl.text.selfIfNotNullEmpty, - scriptDir: _scriptDirCtrl.text.selfIfNotNullEmpty, + preferTempDev: _preferTempDevCtrl.text.selfNotEmptyOrNull, + logoUrl: _logoUrlCtrl.text.selfNotEmptyOrNull, + netDev: _netDevCtrl.text.selfNotEmptyOrNull, + scriptDir: _scriptDirCtrl.text.selfNotEmptyOrNull, ); final wolEmpty = _wolMacCtrl.text.isEmpty && @@ -589,7 +589,7 @@ class _ServerEditPageState extends State with AfterLayoutMixin { : WakeOnLanCfg( mac: _wolMacCtrl.text, ip: _wolIpCtrl.text, - pwd: _wolPwdCtrl.text.selfIfNotNullEmpty, + pwd: _wolPwdCtrl.text.selfNotEmptyOrNull, ); if (wol != null) { final wolValidation = wol.validate(); @@ -606,12 +606,12 @@ class _ServerEditPageState extends State with AfterLayoutMixin { ip: _ipController.text, port: int.parse(_portController.text), user: _usernameController.text, - pwd: _passwordController.text.selfIfNotNullEmpty, + pwd: _passwordController.text.selfNotEmptyOrNull, keyId: _keyIdx.value != null ? PrivateKeyProvider.pkis.value.elementAt(_keyIdx.value!).id : null, tags: _tags.value.isEmpty ? null : _tags.value.toList(), - alterUrl: _altUrlController.text.selfIfNotNullEmpty, + alterUrl: _altUrlController.text.selfNotEmptyOrNull, autoConnect: _autoConnect.value, jumpId: _jumpServer.value, custom: custom, diff --git a/lib/view/page/setting/entry.dart b/lib/view/page/setting/entry.dart index 29c8fc165..0ebab745c 100644 --- a/lib/view/page/setting/entry.dart +++ b/lib/view/page/setting/entry.dart @@ -4,7 +4,8 @@ import 'dart:io'; import 'package:fl_lib/fl_lib.dart'; import 'package:flutter/material.dart'; import 'package:flutter_highlight/theme_map.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; + +import 'package:server_box/generated/l10n/l10n.dart'; import 'package:icons_plus/icons_plus.dart'; import 'package:server_box/core/extension/context/locale.dart'; import 'package:server_box/data/res/github_id.dart'; @@ -140,12 +141,12 @@ final class _AppAboutPageState extends State Btn.elevated( icon: const Icon(Icons.edit_document), text: 'Wiki', - onTap: Urls.appWiki.launch, + onTap: Urls.appWiki.launchUrl, ), Btn.elevated( icon: const Icon(Icons.feedback), text: libL10n.feedback, - onTap: Urls.appHelp.launch, + onTap: Urls.appHelp.launchUrl, ), Btn.elevated( icon: const Icon(MingCute.question_fill), @@ -298,7 +299,7 @@ final class _AppSettingsPageState extends State { Widget _buildCheckUpdate() { return ListTile( leading: const Icon(Icons.update), - title: Text(libL10n.autoCheckUpdate), + title: Text(libL10n.checkUpdate), subtitle: ValBuilder( listenable: AppUpdateIface.newestBuild, builder: (val) { @@ -404,7 +405,7 @@ final class _AppSettingsPageState extends State { } void _onSaveColor(String s) { - final color = s.hexToColor; + final color = s.fromColorHex; if (color == null) { context.showSnackBar(libL10n.fail); return; @@ -837,15 +838,10 @@ final class _AppSettingsPageState extends State { leading: const Icon(Icons.delete_forever), trailing: const Icon(Icons.keyboard_arrow_right), onTap: () async { - final keys = Stores.server.box.keys.toList(); - keys.removeWhere((element) => element == BoxX.lastModifiedKey); - final strKeys = List.empty(growable: true); - for (final key in keys) { - if (key is String) strKeys.add(key); - } + final keys = Stores.server.keys(); final deleteKeys = await context.showPickDialog( clearable: true, - items: strKeys, + items: keys.toList(), ); if (deleteKeys == null) return; @@ -965,8 +961,8 @@ final class _AppSettingsPageState extends State { ); } - void _showFontSizeDialog(StorePropertyBase property) { - final ctrller = TextEditingController(text: property.fetch().toString()); + void _showFontSizeDialog(HiveProp property) { + final ctrller = TextEditingController(text: property.get().toString()); void onSave() { context.pop(); final fontSize = double.tryParse(ctrller.text); @@ -977,7 +973,7 @@ final class _AppSettingsPageState extends State { ); return; } - property.put(fontSize); + property.set(fontSize); } context.showRoundDialog( @@ -1081,7 +1077,7 @@ final class _AppSettingsPageState extends State { return ExpandTile( leading: const Icon(MingCute.more_3_fill), title: Text(l10n.more), - initiallyExpanded: isDesktop, + initiallyExpanded: false, children: [ _buildRememberPwdInMem(), _buildTextScaler(), @@ -1144,7 +1140,7 @@ final class _AppSettingsPageState extends State { return ExpandTile( leading: const Icon(MingCute.more_3_fill), title: Text(l10n.more), - initiallyExpanded: isDesktop, + initiallyExpanded: false, children: [ _buildBeta(), if (isMobile) _buildWakeLock(), @@ -1249,7 +1245,7 @@ final class _AppSettingsPageState extends State { ListTile( title: Text(libL10n.doc), trailing: const Icon(Icons.open_in_new), - onTap: () => Urls.appWiki.launch(), + onTap: Urls.appWiki.launchUrl, ), ], ), @@ -1326,7 +1322,7 @@ final class _AppSettingsPageState extends State { } Future _editRawSettings() async { - final map = Stores.setting.box.toJson(includeInternal: false); + final map = await Stores.setting.getAllMap(includeInternalKeys: true); final keys = map.keys; /// Encode [map] to String with indent `\t` diff --git a/lib/view/page/setting/platform/android.dart b/lib/view/page/setting/platform/android.dart index 6151fe04a..ea9d927ac 100644 --- a/lib/view/page/setting/platform/android.dart +++ b/lib/view/page/setting/platform/android.dart @@ -42,11 +42,11 @@ class _AndroidSettingsPageState extends State { final keysDel = old.keys.toSet().difference(map.keys.toSet()); for (final key in keysDel) { if (!key.startsWith(_homeWidgetPrefPrefix)) continue; - PrefStore.remove(key); + PrefStore.shared.remove(key); } for (final entry in map.entries) { if (!entry.key.startsWith(_homeWidgetPrefPrefix)) continue; - PrefStore.set(entry.key, entry.value); + PrefStore.shared.set(entry.key, entry.value); } context.showSnackBar(libL10n.success); } catch (e) { @@ -60,8 +60,10 @@ class _AndroidSettingsPageState extends State { trailing: const Icon(Icons.keyboard_arrow_right), onTap: () async { final data = {}; - for (final key in PrefStore.keys()) { - final val = PrefStore.get(key); + final keys = await PrefStore.shared.keys(); + + for (final key in keys) { + final val = PrefStore.shared.get(key); if (val != null) { data[key] = val; } diff --git a/lib/view/page/ssh/page.dart b/lib/view/page/ssh/page.dart index b9f43a33d..01e16bd67 100644 --- a/lib/view/page/ssh/page.dart +++ b/lib/view/page/ssh/page.dart @@ -112,7 +112,7 @@ class SSHPageState extends State 2 => true, _ => context.isDark, }; - _media = context.media; + _media = context.mediaQuery; _terminalTheme = _isDark ? TerminalThemes.dark : TerminalThemes.light; _terminalTheme = _terminalTheme.copyWith(selectionCursor: UIs.primaryColor); diff --git a/lib/view/page/ssh/tab.dart b/lib/view/page/ssh/tab.dart index 43a8f0e33..6ef12be07 100644 --- a/lib/view/page/ssh/tab.dart +++ b/lib/view/page/ssh/tab.dart @@ -268,7 +268,7 @@ class _AddPage extends StatelessWidget { @override Widget build(BuildContext context) { const viewPadding = 7.0; - final viewWidth = context.media.size.width - 2 * viewPadding; + final viewWidth = context.mediaQuery.size.width - 2 * viewPadding; final itemCount = ServerProvider.servers.length; const itemPadding = 1.0; diff --git a/lib/view/page/storage/local.dart b/lib/view/page/storage/local.dart index 3e0d32939..0fba4d90e 100644 --- a/lib/view/page/storage/local.dart +++ b/lib/view/page/storage/local.dart @@ -51,7 +51,7 @@ class _LocalFilePageState extends State @override Widget build(BuildContext context) { super.build(context); - final title = _path.path.fileName ?? libL10n.file; + final title = _path.path.fileNameGetter ?? libL10n.file; return Scaffold( appBar: CustomAppBar( title: AnimatedSwitcher( diff --git a/lib/view/page/storage/sftp.dart b/lib/view/page/storage/sftp.dart index dcaeee703..c13a38581 100644 --- a/lib/view/page/storage/sftp.dart +++ b/lib/view/page/storage/sftp.dart @@ -591,7 +591,7 @@ class _SftpPageState extends State with AfterLayoutMixin { String _getRemotePath(SftpName name) { final prePath = _status.path.path; // Only support Linux as remote now, so the seperator is '/' - return prePath.joinPath(name.filename, seperator: '/'); + return prePath.joinPath(name.filename, separator: '/'); } /// Local file dir + server id + remote path diff --git a/lib/view/page/systemd.dart b/lib/view/page/systemd.dart index 4ae289543..0dbcdb204 100644 --- a/lib/view/page/systemd.dart +++ b/lib/view/page/systemd.dart @@ -137,22 +137,22 @@ final class _SystemdPageState extends State { children: [ Icon(func.icon, size: 19), const SizedBox(width: 10), - Text(func.name.upperFirst), + Text(func.name.capitalize), ], ), ); } Widget _buildScopeTag(SystemdUnitScope scope) { - return _buildTag(scope.name.upperFirst, scope.color, true); + return _buildTag(scope.name.capitalize, scope.color, true); } Widget _buildStateTag(SystemdUnitState state) { - return _buildTag(state.name.upperFirst, state.color); + return _buildTag(state.name.capitalize, state.color); } Widget _buildTypeTag(SystemdUnitType type) { - return _buildTag(type.name.upperFirst); + return _buildTag(type.name.capitalize); } Widget _buildTag(String tag, [Color? color, bool noPad = false]) { diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 58fca6cf9..78ec0e123 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -88,4 +88,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 8cdf29216ea1ab6b9743188287968d22b4579c1d -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 302eced86..3ce870d07 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -481,7 +481,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -618,7 +618,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -649,7 +649,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 10.15; - MARKETING_VERSION = 1.0.1104; + MARKETING_VERSION = 1.0.1110; PRODUCT_BUNDLE_IDENTIFIER = com.lollipopkit.toolbox; PRODUCT_NAME = "Server Box"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/pubspec.lock b/pubspec.lock index 58ee82580..e79707f0a 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -385,6 +385,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + encrypt: + dependency: transitive + description: + name: encrypt + sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2" + url: "https://pub.dev" + source: hosted + version: "5.0.3" equatable: dependency: transitive description: @@ -470,8 +478,8 @@ packages: dependency: "direct main" description: path: "." - ref: "v1.0.187" - resolved-ref: "9c69e55fd227428935de8de938c265ab5c099451" + ref: "v1.0.217" + resolved-ref: a07b1d2a004574b3d083f87a295a428286524ef7 url: "https://github.com/lppcg/fl_lib" source: git version: "0.0.1" diff --git a/pubspec.yaml b/pubspec.yaml index 3b5985dd1..ece734179 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: server_box description: server status & toolbox app. publish_to: 'none' -version: 1.0.1104+1104 +version: 1.0.1110+1110 environment: sdk: ">=3.0.0" @@ -60,7 +60,7 @@ dependencies: fl_lib: git: url: https://github.com/lppcg/fl_lib - ref: v1.0.187 + ref: v1.0.217 dependency_overrides: # dartssh2: