From 35b5d1ccb519db4f94d470b8bc40129228c81b8b Mon Sep 17 00:00:00 2001 From: lollipopkit Date: Sat, 11 Mar 2023 19:02:40 +0800 Subject: [PATCH] Add `l10n` files --- .dart_tool/flutter_gen/gen_l10n/l10n.dart | 1105 ++++++++++++++++++ .dart_tool/flutter_gen/gen_l10n/l10n_en.dart | 539 +++++++++ .dart_tool/flutter_gen/gen_l10n/l10n_zh.dart | 539 +++++++++ .dart_tool/flutter_gen/pubspec.yaml | 3 + .gitignore | 8 +- README.md | 11 +- 6 files changed, 2198 insertions(+), 7 deletions(-) create mode 100644 .dart_tool/flutter_gen/gen_l10n/l10n.dart create mode 100644 .dart_tool/flutter_gen/gen_l10n/l10n_en.dart create mode 100644 .dart_tool/flutter_gen/gen_l10n/l10n_zh.dart create mode 100644 .dart_tool/flutter_gen/pubspec.yaml diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n.dart b/.dart_tool/flutter_gen/gen_l10n/l10n.dart new file mode 100644 index 00000000..ccbfd4fe --- /dev/null +++ b/.dart_tool/flutter_gen/gen_l10n/l10n.dart @@ -0,0 +1,1105 @@ +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_en.dart'; +import 'l10n_zh.dart'; + +/// Callers can lookup localized strings with an instance of S +/// returned by `S.of(context)`. +/// +/// Applications need to include `S.delegate()` in their app's +/// `localizationDelegates` list, and the locales they support in the app's +/// `supportedLocales` list. For example: +/// +/// ```dart +/// import 'gen_l10n/l10n.dart'; +/// +/// return MaterialApp( +/// localizationsDelegates: S.localizationsDelegates, +/// supportedLocales: S.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 S.supportedLocales +/// property. +abstract class S { + S(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); + + final String localeName; + + static S? of(BuildContext context) { + return Localizations.of(context, S); + } + + static const LocalizationsDelegate delegate = _SDelegate(); + + /// 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('en'), + Locale('zh') + ]; + + /// No description provided for @about. + /// + /// In en, this message translates to: + /// **'About'** + String get about; + + /// No description provided for @aboutThanks. + /// + /// In en, this message translates to: + /// **'\n\nThanks to the following people who participated in the test.'** + String get aboutThanks; + + /// No description provided for @addAServer. + /// + /// In en, this message translates to: + /// **'add a server'** + String get addAServer; + + /// No description provided for @addOne. + /// + /// In en, this message translates to: + /// **'Add one'** + String get addOne; + + /// No description provided for @addPrivateKey. + /// + /// In en, this message translates to: + /// **'Add private key'** + String get addPrivateKey; + + /// No description provided for @alreadyLastDir. + /// + /// In en, this message translates to: + /// **'Already in last directory.'** + String get alreadyLastDir; + + /// No description provided for @appPrimaryColor. + /// + /// In en, this message translates to: + /// **'App primary color'** + String get appPrimaryColor; + + /// No description provided for @attention. + /// + /// In en, this message translates to: + /// **'Attention'** + String get attention; + + /// No description provided for @auto. + /// + /// In en, this message translates to: + /// **'Auto'** + String get auto; + + /// No description provided for @backDir. + /// + /// In en, this message translates to: + /// **'Back'** + String get backDir; + + /// No description provided for @backup. + /// + /// In en, this message translates to: + /// **'Backup'** + String get backup; + + /// No description provided for @backupTip. + /// + /// In en, this message translates to: + /// **'The exported data is simply encrypted. \nPlease keep it safe.\nRestoring will not overwrite existing data (except setting).'** + 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 @cancel. + /// + /// In en, this message translates to: + /// **'Cancel'** + String get cancel; + + /// No description provided for @choose. + /// + /// In en, this message translates to: + /// **'Choose'** + String get choose; + + /// No description provided for @chooseDestination. + /// + /// In en, this message translates to: + /// **'Choose destination'** + String get chooseDestination; + + /// No description provided for @choosePrivateKey. + /// + /// In en, this message translates to: + /// **'Choose private key'** + String get choosePrivateKey; + + /// No description provided for @clear. + /// + /// In en, this message translates to: + /// **'Clear'** + String get clear; + + /// No description provided for @clickSee. + /// + /// In en, this message translates to: + /// **'Click here'** + String get clickSee; + + /// No description provided for @close. + /// + /// In en, this message translates to: + /// **'Close'** + String get close; + + /// No description provided for @cmd. + /// + /// In en, this message translates to: + /// **'Command'** + String get cmd; + + /// No description provided for @containerStatus. + /// + /// In en, this message translates to: + /// **'Container status'** + String get containerStatus; + + /// No description provided for @convert. + /// + /// In en, this message translates to: + /// **'Convert'** + String get convert; + + /// No description provided for @copy. + /// + /// In en, this message translates to: + /// **'Copy'** + String get copy; + + /// No description provided for @copyPath. + /// + /// In en, this message translates to: + /// **'Copy path'** + String get copyPath; + + /// No description provided for @createFile. + /// + /// In en, this message translates to: + /// **'Create file'** + String get createFile; + + /// No description provided for @createFolder. + /// + /// In en, this message translates to: + /// **'Create folder'** + String get createFolder; + + /// No description provided for @currentMode. + /// + /// In en, this message translates to: + /// **'Current Mode'** + String get currentMode; + + /// No description provided for @dark. + /// + /// In en, this message translates to: + /// **'Dark'** + String get dark; + + /// No description provided for @debug. + /// + /// In en, this message translates to: + /// **'Debug'** + String get debug; + + /// No description provided for @decode. + /// + /// In en, this message translates to: + /// **'Decode'** + String get decode; + + /// No description provided for @delete. + /// + /// In en, this message translates to: + /// **'Delete'** + String get delete; + + /// No description provided for @disconnected. + /// + /// In en, this message translates to: + /// **'Disconnected'** + String get disconnected; + + /// No description provided for @dl2Local. + /// + /// In en, this message translates to: + /// **'Download [{fileName}] to local?'** + String dl2Local(Object fileName); + + /// No description provided for @dockerContainerName. + /// + /// In en, this message translates to: + /// **'Container name'** + String get dockerContainerName; + + /// No description provided for @dockerEditHost. + /// + /// In en, this message translates to: + /// **'Edit DOCKER_HOST'** + String get dockerEditHost; + + /// No description provided for @dockerEmptyRunningItems. + /// + /// In en, this message translates to: + /// **'No running container. \nIt may be that the env DOCKER_HOST is not read correctly. You can found it by running `echo \$DOCKER_HOST` in terminal.'** + String get dockerEmptyRunningItems; + + /// No description provided for @dockerImage. + /// + /// In en, this message translates to: + /// **'Image'** + String get dockerImage; + + /// 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 @download. + /// + /// In en, this message translates to: + /// **'Download'** + String get download; + + /// No description provided for @downloadFinished. + /// + /// In en, this message translates to: + /// **'Download finished'** + String get downloadFinished; + + /// No description provided for @downloadStatus. + /// + /// In en, this message translates to: + /// **'{percent}% of {size}'** + String downloadStatus(Object percent, Object size); + + /// No description provided for @edit. + /// + /// In en, this message translates to: + /// **'Edit'** + String get edit; + + /// No description provided for @encode. + /// + /// In en, this message translates to: + /// **'Encode'** + String get encode; + + /// No description provided for @error. + /// + /// In en, this message translates to: + /// **'Error'** + String get error; + + /// No description provided for @exampleName. + /// + /// In en, this message translates to: + /// **'Example name'** + String get exampleName; + + /// No description provided for @experimentalFeature. + /// + /// In en, this message translates to: + /// **'Experimental feature'** + String get experimentalFeature; + + /// No description provided for @export. + /// + /// In en, this message translates to: + /// **'Export'** + String get export; + + /// No description provided for @extraArgs. + /// + /// In en, this message translates to: + /// **'Extra args'** + String get extraArgs; + + /// No description provided for @feedback. + /// + /// In en, this message translates to: + /// **'Feedback'** + String get feedback; + + /// No description provided for @feedbackOnGithub. + /// + /// In en, this message translates to: + /// **'If you have any questions, please feedback on Github.'** + String get feedbackOnGithub; + + /// No description provided for @fieldMustNotEmpty. + /// + /// In en, this message translates to: + /// **'These fields must not be empty.'** + String get fieldMustNotEmpty; + + /// No description provided for @fileNotExist. + /// + /// In en, this message translates to: + /// **'{file} not exist'** + String fileNotExist(Object file); + + /// 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 @files. + /// + /// In en, this message translates to: + /// **'Files'** + String get files; + + /// No description provided for @foundNUpdate. + /// + /// In en, this message translates to: + /// **'Found {count} update'** + String foundNUpdate(Object count); + + /// No description provided for @go. + /// + /// In en, this message translates to: + /// **'Go'** + String get go; + + /// No description provided for @goto. + /// + /// In en, this message translates to: + /// **'Go to'** + String get goto; + + /// 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 @imagesList. + /// + /// In en, this message translates to: + /// **'Images list'** + String get imagesList; + + /// No description provided for @import. + /// + /// In en, this message translates to: + /// **'Import'** + String get import; + + /// No description provided for @importAndExport. + /// + /// In en, this message translates to: + /// **'Import and Export'** + String get importAndExport; + + /// No description provided for @inputDomainHere. + /// + /// In en, this message translates to: + /// **'Input Domain here'** + String get inputDomainHere; + + /// 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 @invalidJson. + /// + /// In en, this message translates to: + /// **'Invalid JSON'** + String get invalidJson; + + /// No description provided for @invalidVersion. + /// + /// In en, this message translates to: + /// **'Invalid version'** + String get invalidVersion; + + /// No description provided for @invalidVersionHelp. + /// + /// In en, this message translates to: + /// **'Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don\'t have the above issues, please submit an issue on {url}.'** + String invalidVersionHelp(Object url); + + /// No description provided for @isBusy. + /// + /// In en, this message translates to: + /// **'Is busy now'** + String get isBusy; + + /// No description provided for @keepForeground. + /// + /// In en, this message translates to: + /// **'Keep app foreground!'** + String get keepForeground; + + /// No description provided for @keyAuth. + /// + /// In en, this message translates to: + /// **'Key Auth'** + String get keyAuth; + + /// No description provided for @lastTry. + /// + /// In en, this message translates to: + /// **'Last try!'** + String get lastTry; + + /// No description provided for @launchPage. + /// + /// In en, this message translates to: + /// **'Launch page'** + String get launchPage; + + /// No description provided for @license. + /// + /// In en, this message translates to: + /// **'License'** + String get license; + + /// No description provided for @light. + /// + /// In en, this message translates to: + /// **'Light'** + String get light; + + /// No description provided for @loadingFiles. + /// + /// In en, this message translates to: + /// **'Loading files...'** + String get loadingFiles; + + /// 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: + /// **'\nMade with ❤️ by {myGithub}'** + String madeWithLove(Object myGithub); + + /// 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 reconnection'** + 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 @ms. + /// + /// In en, this message translates to: + /// **'ms'** + String get ms; + + /// No description provided for @name. + /// + /// In en, this message translates to: + /// **'Name'** + String get name; + + /// No description provided for @newContainer. + /// + /// In en, this message translates to: + /// **'New container'** + String get newContainer; + + /// No description provided for @noClient. + /// + /// In en, this message translates to: + /// **'No client'** + String get noClient; + + /// No description provided for @noInterface. + /// + /// In en, this message translates to: + /// **'No interface'** + String get noInterface; + + /// No description provided for @noResult. + /// + /// In en, this message translates to: + /// **'No result'** + String get noResult; + + /// No description provided for @noSavedPrivateKey. + /// + /// In en, this message translates to: + /// **'No saved private keys.'** + String get noSavedPrivateKey; + + /// No description provided for @noSavedSnippet. + /// + /// In en, this message translates to: + /// **'No saved snippets.'** + String get noSavedSnippet; + + /// No description provided for @noServerAvailable. + /// + /// In en, this message translates to: + /// **'No server available.'** + String get noServerAvailable; + + /// No description provided for @noUpdateAvailable. + /// + /// In en, this message translates to: + /// **'No update available'** + String get noUpdateAvailable; + + /// No description provided for @ok. + /// + /// In en, this message translates to: + /// **'OK'** + String get ok; + + /// No description provided for @onServerDetailPage. + /// + /// In en, this message translates to: + /// **'On server detail page'** + String get onServerDetailPage; + + /// No description provided for @open. + /// + /// In en, this message translates to: + /// **'Open'** + String get open; + + /// No description provided for @path. + /// + /// In en, this message translates to: + /// **'Path'** + String get path; + + /// No description provided for @pickFile. + /// + /// In en, this message translates to: + /// **'Pick file'** + String get pickFile; + + /// No description provided for @ping. + /// + /// In en, this message translates to: + /// **'Ping'** + String get ping; + + /// 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 @platformNotSupportUpdate. + /// + /// In en, this message translates to: + /// **'Current platform does not support in app update.\nPlease build from source and install it.'** + String get platformNotSupportUpdate; + + /// No description provided for @plzEnterHost. + /// + /// In en, this message translates to: + /// **'Please enter host.'** + String get plzEnterHost; + + /// No description provided for @plzSelectKey. + /// + /// In en, this message translates to: + /// **'Please select a key.'** + String get plzSelectKey; + + /// 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 @pwd. + /// + /// In en, this message translates to: + /// **'Password'** + String get pwd; + + /// No description provided for @rename. + /// + /// In en, this message translates to: + /// **'Rename'** + String get rename; + + /// No description provided for @reportBugsOnGithubIssue. + /// + /// In en, this message translates to: + /// **'Please report bugs on {url}'** + String reportBugsOnGithubIssue(Object url); + + /// No description provided for @restore. + /// + /// In en, this message translates to: + /// **'Restore'** + String get restore; + + /// No description provided for @restoreSuccess. + /// + /// In en, this message translates to: + /// **'Restore success. Restart app to apply.'** + String get restoreSuccess; + + /// No description provided for @restoreSureWithDate. + /// + /// In en, this message translates to: + /// **'Are you sure to restore from {date} ?'** + String restoreSureWithDate(Object date); + + /// No description provided for @result. + /// + /// In en, this message translates to: + /// **'Result'** + String get result; + + /// No description provided for @run. + /// + /// In en, this message translates to: + /// **'Run'** + String get run; + + /// No description provided for @save. + /// + /// In en, this message translates to: + /// **'Save'** + String get save; + + /// No description provided for @second. + /// + /// In en, this message translates to: + /// **'s'** + String get second; + + /// No description provided for @server. + /// + /// In en, this message translates to: + /// **'Server'** + String get server; + + /// No description provided for @serverTabConnecting. + /// + /// In en, this message translates to: + /// **'Connecting...'** + String get serverTabConnecting; + + /// No description provided for @serverTabEmpty. + /// + /// In en, this message translates to: + /// **'There is no server.\nClick the fab to add one.'** + String get serverTabEmpty; + + /// No description provided for @serverTabFailed. + /// + /// In en, this message translates to: + /// **'Failed'** + String get serverTabFailed; + + /// No description provided for @serverTabLoading. + /// + /// In en, this message translates to: + /// **'Loading...'** + String get serverTabLoading; + + /// No description provided for @serverTabPlzSave. + /// + /// In en, this message translates to: + /// **'Please \'save\' this private key again.'** + String get serverTabPlzSave; + + /// No description provided for @serverTabUnkown. + /// + /// In en, this message translates to: + /// **'Unknown state'** + String get serverTabUnkown; + + /// No description provided for @setting. + /// + /// In en, this message translates to: + /// **'Setting'** + String get setting; + + /// No description provided for @sftpDlPrepare. + /// + /// In en, this message translates to: + /// **'Preparing to connect...'** + String get sftpDlPrepare; + + /// No description provided for @sftpNoDownloadTask. + /// + /// In en, this message translates to: + /// **'No download task.'** + String get sftpNoDownloadTask; + + /// No description provided for @sftpSSHConnected. + /// + /// In en, this message translates to: + /// **'SFTP Connected'** + String get sftpSSHConnected; + + /// No description provided for @showDistLogo. + /// + /// In en, this message translates to: + /// **'Show distribution logo'** + String get showDistLogo; + + /// No description provided for @snippet. + /// + /// In en, this message translates to: + /// **'Snippet'** + String get snippet; + + /// No description provided for @spentTime. + /// + /// In en, this message translates to: + /// **'Spent time: {time}'** + String spentTime(Object time); + + /// 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 @start. + /// + /// In en, this message translates to: + /// **'Start'** + String get start; + + /// No description provided for @stop. + /// + /// In en, this message translates to: + /// **'Stop'** + String get stop; + + /// No description provided for @sureDelete. + /// + /// In en, this message translates to: + /// **'Are you sure to delete [{name}]?'** + String sureDelete(Object name); + + /// No description provided for @sureNoPwd. + /// + /// In en, this message translates to: + /// **'Are you sure to use no password?'** + String get sureNoPwd; + + /// No description provided for @sureToDeleteServer. + /// + /// In en, this message translates to: + /// **'Are you sure to delete server [{server}]?'** + String sureToDeleteServer(Object server); + + /// No description provided for @termTheme. + /// + /// In en, this message translates to: + /// **'Terminal theme'** + String get termTheme; + + /// No description provided for @themeMode. + /// + /// In en, this message translates to: + /// **'Theme mode'** + String get themeMode; + + /// No description provided for @times. + /// + /// In en, this message translates to: + /// **'Times'** + String get times; + + /// 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 @unknownError. + /// + /// In en, this message translates to: + /// **'Unknown error'** + String get unknownError; + + /// No description provided for @unkownConvertMode. + /// + /// In en, this message translates to: + /// **'Unknown convert mode'** + String get unkownConvertMode; + + /// No description provided for @update. + /// + /// In en, this message translates to: + /// **'Update'** + String get update; + + /// No description provided for @updateAll. + /// + /// In en, this message translates to: + /// **'Update all'** + String get updateAll; + + /// 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 @updateTip. + /// + /// In en, this message translates to: + /// **'Update: v1.0.{newest}'** + String updateTip(Object newest); + + /// No description provided for @updateTipTooLow. + /// + /// In en, this message translates to: + /// **'Current version is too low, please update to v1.0.{newest}'** + String updateTipTooLow(Object newest); + + /// No description provided for @upsideDown. + /// + /// In en, this message translates to: + /// **'Upside Down'** + String get upsideDown; + + /// No description provided for @urlOrJson. + /// + /// In en, this message translates to: + /// **'URL or JSON'** + String get urlOrJson; + + /// No description provided for @user. + /// + /// In en, this message translates to: + /// **'User'** + String get user; + + /// No description provided for @versionHaveUpdate. + /// + /// In en, this message translates to: + /// **'Found: v1.0.{build}, click to update'** + String versionHaveUpdate(Object build); + + /// No description provided for @versionUnknownUpdate. + /// + /// In en, this message translates to: + /// **'Current: v1.0.{build}'** + String versionUnknownUpdate(Object build); + + /// No description provided for @versionUpdated. + /// + /// In en, this message translates to: + /// **'Current: v1.0.{build}, is up to date'** + String versionUpdated(Object build); + + /// 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 @willTakEeffectImmediately. + /// + /// In en, this message translates to: + /// **'Will take effect immediately'** + String get willTakEeffectImmediately; +} + +class _SDelegate extends LocalizationsDelegate { + const _SDelegate(); + + @override + Future load(Locale locale) { + return SynchronousFuture(lookupS(locale)); + } + + @override + bool isSupported(Locale locale) => ['en', 'zh'].contains(locale.languageCode); + + @override + bool shouldReload(_SDelegate old) => false; +} + +S lookupS(Locale locale) { + + + // Lookup logic when only language code is specified. + switch (locale.languageCode) { + case 'en': return SEn(); + case 'zh': return SZh(); + } + + throw FlutterError( + 'S.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/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart new file mode 100644 index 00000000..379bec4c --- /dev/null +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_en.dart @@ -0,0 +1,539 @@ +import 'l10n.dart'; + +/// The translations for English (`en`). +class SEn extends S { + SEn([String locale = 'en']) : super(locale); + + @override + String get about => 'About'; + + @override + String get aboutThanks => '\n\nThanks to the following people who participated in the test.'; + + @override + String get addAServer => 'add a server'; + + @override + String get addOne => 'Add one'; + + @override + String get addPrivateKey => 'Add private key'; + + @override + String get alreadyLastDir => 'Already in last directory.'; + + @override + String get appPrimaryColor => 'App primary color'; + + @override + String get attention => 'Attention'; + + @override + String get auto => 'Auto'; + + @override + String get backDir => 'Back'; + + @override + String get backup => 'Backup'; + + @override + String get backupTip => 'The exported data is simply encrypted. \nPlease keep it safe.\nRestoring will not overwrite existing data (except setting).'; + + @override + String get backupVersionNotMatch => 'Backup version is not match.'; + + @override + String get cancel => 'Cancel'; + + @override + String get choose => 'Choose'; + + @override + String get chooseDestination => 'Choose destination'; + + @override + String get choosePrivateKey => 'Choose private key'; + + @override + String get clear => 'Clear'; + + @override + String get clickSee => 'Click here'; + + @override + String get close => 'Close'; + + @override + String get cmd => 'Command'; + + @override + String get containerStatus => 'Container status'; + + @override + String get convert => 'Convert'; + + @override + String get copy => 'Copy'; + + @override + String get copyPath => 'Copy path'; + + @override + String get createFile => 'Create file'; + + @override + String get createFolder => 'Create folder'; + + @override + String get currentMode => 'Current Mode'; + + @override + String get dark => 'Dark'; + + @override + String get debug => 'Debug'; + + @override + String get decode => 'Decode'; + + @override + String get delete => 'Delete'; + + @override + String get disconnected => 'Disconnected'; + + @override + String dl2Local(Object fileName) { + return 'Download [$fileName] to local?'; + } + + @override + String get dockerContainerName => 'Container name'; + + @override + String get dockerEditHost => 'Edit DOCKER_HOST'; + + @override + String get dockerEmptyRunningItems => 'No running container. \nIt may be that the env DOCKER_HOST is not read correctly. You can found it by running `echo \$DOCKER_HOST` in terminal.'; + + @override + String get dockerImage => 'Image'; + + @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 download => 'Download'; + + @override + String get downloadFinished => 'Download finished'; + + @override + String downloadStatus(Object percent, Object size) { + return '$percent% of $size'; + } + + @override + String get edit => 'Edit'; + + @override + String get encode => 'Encode'; + + @override + String get error => 'Error'; + + @override + String get exampleName => 'Example name'; + + @override + String get experimentalFeature => 'Experimental feature'; + + @override + String get export => 'Export'; + + @override + String get extraArgs => 'Extra args'; + + @override + String get feedback => 'Feedback'; + + @override + String get feedbackOnGithub => 'If you have any questions, please feedback on Github.'; + + @override + String get fieldMustNotEmpty => 'These fields must not be empty.'; + + @override + String fileNotExist(Object file) { + return '$file not exist'; + } + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return 'File \'$file\' too large $size, max $sizeMax'; + } + + @override + String get files => 'Files'; + + @override + String foundNUpdate(Object count) { + return 'Found $count update'; + } + + @override + String get go => 'Go'; + + @override + String get goto => 'Go to'; + + @override + String get host => 'Host'; + + @override + String httpFailedWithCode(Object code) { + return 'request failed, status code: $code'; + } + + @override + String get imagesList => 'Images list'; + + @override + String get import => 'Import'; + + @override + String get importAndExport => 'Import and Export'; + + @override + String get inputDomainHere => 'Input Domain here'; + + @override + String get install => 'install'; + + @override + String get installDockerWithUrl => 'Please https://docs.docker.com/engine/install docker first.'; + + @override + String get invalidJson => 'Invalid JSON'; + + @override + String get invalidVersion => 'Invalid version'; + + @override + String invalidVersionHelp(Object url) { + return 'Please make sure that docker is installed correctly, or that you are using a non-self-compiled version. If you don\'t have the above issues, please submit an issue on $url.'; + } + + @override + String get isBusy => 'Is busy now'; + + @override + String get keepForeground => 'Keep app foreground!'; + + @override + String get keyAuth => 'Key Auth'; + + @override + String get lastTry => 'Last try!'; + + @override + String get launchPage => 'Launch page'; + + @override + String get license => 'License'; + + @override + String get light => 'Light'; + + @override + String get loadingFiles => 'Loading files...'; + + @override + String get loss => 'loss'; + + @override + String madeWithLove(Object myGithub) { + return '\nMade with ❤️ by $myGithub'; + } + + @override + String get max => 'max'; + + @override + String get maxRetryCount => 'Number of server reconnection'; + + @override + String get maxRetryCountEqual0 => 'Will retry again and again.'; + + @override + String get min => 'min'; + + @override + String get ms => 'ms'; + + @override + String get name => 'Name'; + + @override + String get newContainer => 'New container'; + + @override + String get noClient => 'No client'; + + @override + String get noInterface => 'No interface'; + + @override + String get noResult => 'No result'; + + @override + String get noSavedPrivateKey => 'No saved private keys.'; + + @override + String get noSavedSnippet => 'No saved snippets.'; + + @override + String get noServerAvailable => 'No server available.'; + + @override + String get noUpdateAvailable => 'No update available'; + + @override + String get ok => 'OK'; + + @override + String get onServerDetailPage => 'On server detail page'; + + @override + String get open => 'Open'; + + @override + String get path => 'Path'; + + @override + String get pickFile => 'Pick file'; + + @override + String get ping => 'Ping'; + + @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 platformNotSupportUpdate => 'Current platform does not support in app update.\nPlease build from source and install it.'; + + @override + String get plzEnterHost => 'Please enter host.'; + + @override + String get plzSelectKey => 'Please select a key.'; + + @override + String get port => 'Port'; + + @override + String get preview => 'Preview'; + + @override + String get privateKey => 'Private Key'; + + @override + String get pwd => 'Password'; + + @override + String get rename => 'Rename'; + + @override + String reportBugsOnGithubIssue(Object url) { + return 'Please report bugs on $url'; + } + + @override + String get restore => 'Restore'; + + @override + String get restoreSuccess => 'Restore success. Restart app to apply.'; + + @override + String restoreSureWithDate(Object date) { + return 'Are you sure to restore from $date ?'; + } + + @override + String get result => 'Result'; + + @override + String get run => 'Run'; + + @override + String get save => 'Save'; + + @override + String get second => 's'; + + @override + String get server => 'Server'; + + @override + String get serverTabConnecting => 'Connecting...'; + + @override + String get serverTabEmpty => 'There is no server.\nClick the fab to add one.'; + + @override + String get serverTabFailed => 'Failed'; + + @override + String get serverTabLoading => 'Loading...'; + + @override + String get serverTabPlzSave => 'Please \'save\' this private key again.'; + + @override + String get serverTabUnkown => 'Unknown state'; + + @override + String get setting => 'Setting'; + + @override + String get sftpDlPrepare => 'Preparing to connect...'; + + @override + String get sftpNoDownloadTask => 'No download task.'; + + @override + String get sftpSSHConnected => 'SFTP Connected'; + + @override + String get showDistLogo => 'Show distribution logo'; + + @override + String get snippet => 'Snippet'; + + @override + String spentTime(Object time) { + return 'Spent time: $time'; + } + + @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 start => 'Start'; + + @override + String get stop => 'Stop'; + + @override + String sureDelete(Object name) { + return 'Are you sure to delete [$name]?'; + } + + @override + String get sureNoPwd => 'Are you sure to use no password?'; + + @override + String sureToDeleteServer(Object server) { + return 'Are you sure to delete server [$server]?'; + } + + @override + String get termTheme => 'Terminal theme'; + + @override + String get themeMode => 'Theme mode'; + + @override + String get times => 'Times'; + + @override + String get ttl => 'ttl'; + + @override + String get unknown => 'unknown'; + + @override + String get unknownError => 'Unknown error'; + + @override + String get unkownConvertMode => 'Unknown convert mode'; + + @override + String get update => 'Update'; + + @override + String get updateAll => 'Update all'; + + @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 updateTip(Object newest) { + return 'Update: v1.0.$newest'; + } + + @override + String updateTipTooLow(Object newest) { + return 'Current version is too low, please update to v1.0.$newest'; + } + + @override + String get upsideDown => 'Upside Down'; + + @override + String get urlOrJson => 'URL or JSON'; + + @override + String get user => 'User'; + + @override + String versionHaveUpdate(Object build) { + return 'Found: v1.0.$build, click to update'; + } + + @override + String versionUnknownUpdate(Object build) { + return 'Current: v1.0.$build'; + } + + @override + String versionUpdated(Object build) { + return 'Current: v1.0.$build, is up to date'; + } + + @override + String get waitConnection => 'Please wait for the connection to be established.'; + + @override + String get willTakEeffectImmediately => 'Will take effect immediately'; +} diff --git a/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart new file mode 100644 index 00000000..e9ef0997 --- /dev/null +++ b/.dart_tool/flutter_gen/gen_l10n/l10n_zh.dart @@ -0,0 +1,539 @@ +import 'l10n.dart'; + +/// The translations for Chinese (`zh`). +class SZh extends S { + SZh([String locale = 'zh']) : super(locale); + + @override + String get about => '关于'; + + @override + String get aboutThanks => '\n\n感谢以下参与软件测试的各位。'; + + @override + String get addAServer => '添加服务器'; + + @override + String get addOne => '前去新增'; + + @override + String get addPrivateKey => '添加一个私钥'; + + @override + String get alreadyLastDir => '已经是最上层目录了'; + + @override + String get appPrimaryColor => 'App主要色'; + + @override + String get attention => '注意'; + + @override + String get auto => '自动'; + + @override + String get backDir => '返回上一级'; + + @override + String get backup => '备份'; + + @override + String get backupTip => '导出的数据仅进行了简单加密,请妥善保管。\n除了设置项,恢复的数据不会覆盖现有数据。'; + + @override + String get backupVersionNotMatch => '备份版本不匹配,无法恢复'; + + @override + String get cancel => '取消'; + + @override + String get choose => '选择'; + + @override + String get chooseDestination => '选择目标'; + + @override + String get choosePrivateKey => '选择私钥'; + + @override + String get clear => '清除'; + + @override + String get clickSee => '点击查看'; + + @override + String get close => '关闭'; + + @override + String get cmd => '命令'; + + @override + String get containerStatus => '容器状态'; + + @override + String get convert => '转换'; + + @override + String get copy => '复制'; + + @override + String get copyPath => '复制路径'; + + @override + String get createFile => '创建文件'; + + @override + String get createFolder => '创建文件夹'; + + @override + String get currentMode => '当前模式'; + + @override + String get dark => '暗'; + + @override + String get debug => '调试'; + + @override + String get decode => '解码'; + + @override + String get delete => '删除'; + + @override + String get disconnected => '连接断开'; + + @override + String dl2Local(Object fileName) { + return '下载 [$fileName] 到本地?'; + } + + @override + String get dockerContainerName => '容器名'; + + @override + String get dockerEditHost => '编辑 DOCKER_HOST'; + + @override + String get dockerEmptyRunningItems => '没有正在运行的容器。\n这可能是因为环境变量 DOCKER_HOST 没有被正确读取。你可以通过在终端内运行 `echo \$DOCKER_HOST` 来获取。'; + + @override + String get dockerImage => '镜像'; + + @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 download => '下载'; + + @override + String get downloadFinished => '下载完成!'; + + @override + String downloadStatus(Object percent, Object size) { + return '$size 的 $percent%'; + } + + @override + String get edit => '编辑'; + + @override + String get encode => '编码'; + + @override + String get error => '出错了'; + + @override + String get exampleName => '名称示例'; + + @override + String get experimentalFeature => '实验性功能'; + + @override + String get export => '导出'; + + @override + String get extraArgs => '额外参数'; + + @override + String get feedback => '反馈'; + + @override + String get feedbackOnGithub => '如果你有任何问题,请在GitHub反馈'; + + @override + String get fieldMustNotEmpty => '这些输入框不能为空。'; + + @override + String fileNotExist(Object file) { + return '$file 不存在'; + } + + @override + String fileTooLarge(Object file, Object size, Object sizeMax) { + return '文件 \'$file\' 过大 \'$size\',超过了 $sizeMax'; + } + + @override + String get files => '文件'; + + @override + String foundNUpdate(Object count) { + return '找到 $count 个更新'; + } + + @override + String get go => '开始'; + + @override + String get goto => '前往'; + + @override + String get host => '主机'; + + @override + String httpFailedWithCode(Object code) { + return '请求失败, 状态码: $code'; + } + + @override + String get imagesList => '镜像列表'; + + @override + String get import => '导入'; + + @override + String get importAndExport => '导入或导出'; + + @override + String get inputDomainHere => '在这里输入域名'; + + @override + String get install => '安装'; + + @override + String get installDockerWithUrl => '请先 https://docs.docker.com/engine/install docker'; + + @override + String get invalidJson => '无效的json,存在格式问题'; + + @override + String get invalidVersion => '不支持的版本'; + + @override + String invalidVersionHelp(Object url) { + return '请确保正确安装了docker,或者使用的非自编译版本。如果没有以上问题,请在 $url 提交问题。'; + } + + @override + String get isBusy => '当前正忙'; + + @override + String get keepForeground => '请保持应用处于前台!'; + + @override + String get keyAuth => '公钥认证'; + + @override + String get lastTry => '最后尝试'; + + @override + String get launchPage => '启动页'; + + @override + String get license => '开源证书'; + + @override + String get light => '亮'; + + @override + String get loadingFiles => '正在加载目录。。。'; + + @override + String get loss => '丢包率'; + + @override + String madeWithLove(Object myGithub) { + return '\n用❤️制作 by $myGithub'; + } + + @override + String get max => '最大'; + + @override + String get maxRetryCount => '服务器尝试重连次数'; + + @override + String get maxRetryCountEqual0 => '会无限重试'; + + @override + String get min => '最小'; + + @override + String get ms => '毫秒'; + + @override + String get name => '名称'; + + @override + String get newContainer => '新建容器'; + + @override + String get noClient => '没有SSH连接'; + + @override + String get noInterface => '没有可用的接口'; + + @override + String get noResult => '无结果'; + + @override + String get noSavedPrivateKey => '没有已保存的私钥。'; + + @override + String get noSavedSnippet => '没有已保存的代码片段。'; + + @override + String get noServerAvailable => '没有可用的服务器。'; + + @override + String get noUpdateAvailable => '没有可用更新'; + + @override + String get ok => '好'; + + @override + String get onServerDetailPage => '在服务器详情页'; + + @override + String get open => '打开'; + + @override + String get path => '路径'; + + @override + String get pickFile => '选择文件'; + + @override + String get ping => 'Ping'; + + @override + String get pingAvg => '平均:'; + + @override + String get pingInputIP => '请输入目标IP或域名'; + + @override + String get pingNoServer => '没有服务器可用于Ping\n请在服务器tab添加服务器后再试'; + + @override + String get pkg => '包管理'; + + @override + String get platformNotSupportUpdate => '当前平台不支持更新,请编译最新源码后手动安装'; + + @override + String get plzEnterHost => '请输入主机'; + + @override + String get plzSelectKey => '请选择私钥'; + + @override + String get port => '端口'; + + @override + String get preview => '预览'; + + @override + String get privateKey => '私钥'; + + @override + String get pwd => '密码'; + + @override + String get rename => '重命名'; + + @override + String reportBugsOnGithubIssue(Object url) { + return '请到 $url 提交问题'; + } + + @override + String get restore => '恢复'; + + @override + String get restoreSuccess => '恢复成功,需要重启App来应用更改'; + + @override + String restoreSureWithDate(Object date) { + return '确定恢复 $date 的备份吗?'; + } + + @override + String get result => '结果'; + + @override + String get run => '运行'; + + @override + String get save => '保存'; + + @override + String get second => '秒'; + + @override + String get server => '服务器'; + + @override + String get serverTabConnecting => '连接中...'; + + @override + String get serverTabEmpty => '现在没有服务器。\n点击右下方按钮来添加。'; + + @override + String get serverTabFailed => '失败'; + + @override + String get serverTabLoading => '加载中...'; + + @override + String get serverTabPlzSave => '请再次保存该私钥'; + + @override + String get serverTabUnkown => '未知状态'; + + @override + String get setting => '设置'; + + @override + String get sftpDlPrepare => '准备连接至服务器...'; + + @override + String get sftpNoDownloadTask => '没有下载任务'; + + @override + String get sftpSSHConnected => 'SFTP 已连接,即将开始下载...'; + + @override + String get showDistLogo => '显示发行版 Logo'; + + @override + String get snippet => '代码片段'; + + @override + String spentTime(Object time) { + return '耗时: $time'; + } + + @override + String sshTip(Object url) { + return '该功能目前处于测试阶段。\n\n请在 $url 反馈问题,或者加入我们开发。'; + } + + @override + String get start => '开始'; + + @override + String get stop => '停止'; + + @override + String sureDelete(Object name) { + return '确定删除[$name]?'; + } + + @override + String get sureNoPwd => '确认使用无密码?'; + + @override + String sureToDeleteServer(Object server) { + return '你确定要删除服务器 [$server] 吗?'; + } + + @override + String get termTheme => '终端主题'; + + @override + String get themeMode => '主题模式'; + + @override + String get times => '次'; + + @override + String get ttl => '缓存时间'; + + @override + String get unknown => '未知'; + + @override + String get unknownError => '未知错误'; + + @override + String get unkownConvertMode => '未知转换模式'; + + @override + String get update => '更新'; + + @override + String get updateAll => '更新全部'; + + @override + String get updateIntervalEqual0 => '你设置为0,服务器状态不会自动刷新。\n且不能计算CPU使用情况。'; + + @override + String get updateServerStatusInterval => '服务器状态刷新间隔'; + + @override + String updateTip(Object newest) { + return '新版本: v1.0.$newest'; + } + + @override + String updateTipTooLow(Object newest) { + return '当前版本过低,请升级至 v1.0.$newest'; + } + + @override + String get upsideDown => '上下交换'; + + @override + String get urlOrJson => '链接或JSON'; + + @override + String get user => '用户'; + + @override + String versionHaveUpdate(Object build) { + return '找到新版本:v1.0.$build, 点击更新'; + } + + @override + String versionUnknownUpdate(Object build) { + return '当前:v1.0.$build'; + } + + @override + String versionUpdated(Object build) { + return '当前:v1.0.$build, 已是最新版本'; + } + + @override + String get waitConnection => '请等待连接建立'; + + @override + String get willTakEeffectImmediately => '更改将会立即生效'; +} diff --git a/.dart_tool/flutter_gen/pubspec.yaml b/.dart_tool/flutter_gen/pubspec.yaml new file mode 100644 index 00000000..3b5dc894 --- /dev/null +++ b/.dart_tool/flutter_gen/pubspec.yaml @@ -0,0 +1,3 @@ +# Generated by the flutter tool +name: synthetic_package +description: The Flutter application's synthetic package. diff --git a/.gitignore b/.gitignore index c38fdf8d..b4f839af 100644 --- a/.gitignore +++ b/.gitignore @@ -23,7 +23,7 @@ # Flutter/Dart/Pub related **/doc/api/ **/ios/Flutter/.last_build_id -.dart_tool/ +# .dart_tool/ .flutter-plugins .flutter-plugins-dependencies .packages @@ -48,4 +48,8 @@ app.*.map.json /android/app/fjy.androidstudio.key /release test.dart -.fvm \ No newline at end of file +.fvm + +# Keep generated l10n files +/.dart_tool/* +!/.dart_tool/flutter_gen \ No newline at end of file diff --git a/README.md b/README.md index 112d2e14..99aa6371 100644 --- a/README.md +++ b/README.md @@ -31,10 +31,10 @@ Especially thanks to dartss - [x] `SSH` Terminal, `SFTP` - [x] `Docker & Pkg` Manager - [x] Status charts - - [x] etc. + - [x] `Ping` and etc. - [x] i18n (English, Chinese) - **Welcome contribution** :) - - [How to contribute?](#i18n-guide) + - [How to contribute?](#l10n-guide) - [x] Desktop support ## 📱 ScreenShots @@ -77,13 +77,14 @@ Status|Platform Full Support|Android/iOS Support, but not tested|macOS/Windows/Linux -## i18n guide +## l10n guide 1. Fork this repo and clone it to your local machine. 2. Create `arb` file in `lib/l10n/` directory - File name should be `intl_XX.arb`, where `XX` is the language code. Such as `intl_en.arb` for English and `intl_zh.arb` for Chinese. 3. Add content to the file. You can refer to `intl_en.arb` and `intl_zh.arb` for the format. -4. Pull commit to your forked repo. -5. Request a pull request on my repo. +4. Run `flutter gen-l10n` to generate files. +5. Pull commit to your forked repo. +6. Request a pull request on my repo. ## 📝 License `GPL v3. lollipopkit 2023`