mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-30 21:13:28 +01:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			v0.8.10-be
			...
			v0.8.11-be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 14ae43de92 | ||
|  | a8f0d784a2 | ||
|  | b1fb06e90b | 
| @@ -171,6 +171,15 @@ | ||||
|     "trackOnly": "Track-Only", | ||||
|     "errorWithHttpStatusCode": "Error {}", | ||||
|     "versionCorrectionDisabled": "Version correction disabled (plugin doesn't seem to work)", | ||||
|     "unknown": "Unknown", | ||||
|     "none": "None", | ||||
|     "never": "Never", | ||||
|     "latestVersionX": "Latest Version: {}", | ||||
|     "installedVersionX": "Installed Version: {}", | ||||
|     "lastUpdateCheckX": "Last Update Check: {}", | ||||
|     "remove": "Remove", | ||||
|     "removeAppQuestion": "Remove App?", | ||||
|     "yesMarkUpdated": "'Yes, Mark as Updated", | ||||
|     "tooManyRequestsTryAgainInMinutes": { | ||||
|         "one": "Too many requests (rate limited) - try again in {} minute", | ||||
|         "other": "Too many requests (rate limited) - try again in {} minutes" | ||||
|   | ||||
							
								
								
									
										227
									
								
								assets/translations/zh.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										227
									
								
								assets/translations/zh.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,227 @@ | ||||
| { | ||||
|     "invalidURLForSource": "不是一个有效的 {} URL", | ||||
|     "noReleaseFound": "找不到合适的更新", | ||||
|     "noVersionFound": "无法确定更新版本", | ||||
|     "urlMatchesNoSource": "URL 与已知来源不符", | ||||
|     "cantInstallOlderVersion": "无法安装旧版应用程序", | ||||
|     "appIdMismatch": "下载的软件包名与现有的应用程序包名不一致", | ||||
|     "functionNotImplemented": "该类没有实现此功能", | ||||
|     "placeholder": "占位符", | ||||
|     "someErrors": "出现了一些错误", | ||||
|     "unexpectedError": "意外错误", | ||||
|     "ok": "好的", | ||||
|     "and": "和", | ||||
|     "startedBgUpdateTask": "开始后台检查更新任务", | ||||
|     "bgUpdateIgnoreAfterIs": "Bg update ignoreAfter is  {}", | ||||
|     "startedActualBGUpdateCheck": "后台检查更新已开始", | ||||
|     "bgUpdateTaskFinished": "后台检查更新已完成", | ||||
|     "firstRun": "这是你第一次运行 Obtainium", | ||||
|     "settingUpdateCheckIntervalTo": "设置检查更新间隔为 {}", | ||||
|     "githubPATLabel": "GitHub 个人访问令牌 (提高 API 限制)", | ||||
|     "githubPATHint": "个人访问令牌必须为: username:token 形式", | ||||
|     "githubPATFormat": "username:token", | ||||
|     "githubPATLinkText": "'关于 GitHub 个人访问令牌", | ||||
|     "includePrereleases": "包含预发布版", | ||||
|     "fallbackToOlderReleases": "回落到旧版", | ||||
|     "filterReleaseTitlesByRegEx": "通过正则表达式过滤发布标题", | ||||
|     "invalidRegEx": "无效的正则表达式", | ||||
|     "noDescription": "无描述", | ||||
|     "cancel": "取消", | ||||
|     "continue": "继续", | ||||
|     "requiredInBrackets": "(必须)", | ||||
|     "dropdownNoOptsError": "错误:下拉菜单必须至少有一个选项", | ||||
|     "colour": "颜色", | ||||
|     "githubStarredRepos": "GitHub 已星标仓库", | ||||
|     "uname": "用户名", | ||||
|     "wrongArgNum": "提供了错误的参数数量", | ||||
|     "xIsTrackOnly": "{} 仅追踪", | ||||
|     "source": "源码", | ||||
|     "app": "应用程序", | ||||
|     "appsFromSourceAreTrackOnly": "来自此来源的应用为仅追踪", | ||||
|     "youPickedTrackOnly": "你已选择仅追踪选项", | ||||
|     "trackOnlyAppDescription": "The App will be tracked for updates, but Obtainium will not be able to download or install it.", | ||||
|     "cancelled": "已取消", | ||||
|     "appAlreadyAdded": "此应用程序已被添加", | ||||
|     "alreadyUpToDateQuestion": "App Already up to Date?", | ||||
|     "addApp": "添加应用", | ||||
|     "appSourceURL": "应用来源 URL", | ||||
|     "error": "错误", | ||||
|     "add": "添加", | ||||
|     "searchSomeSourcesLabel": "搜索 (仅部分来源)", | ||||
|     "search": "搜索", | ||||
|     "additionalOptsFor": "{} 的更多选项", | ||||
|     "supportedSourcesBelow": "受支持的来源:", | ||||
|     "trackOnlyInBrackets": "(仅追踪)", | ||||
|     "searchableInBrackets": "(可被搜索)", | ||||
|     "appsString": "应用程序", | ||||
|     "noApps": "无应用程序", | ||||
|     "noAppsForFilter": "没有应用可被过滤", | ||||
|     "byX": "来自 {}", | ||||
|     "percentProgress": "进度: {}%", | ||||
|     "pleaseWait": "请等待...", | ||||
|     "updateAvailable": "更新可用", | ||||
|     "estimateInBracketsShort": "(预计.)", | ||||
|     "notInstalled": "未安装", | ||||
|     "estimateInBrackets": "(预计)", | ||||
|     "selectAll": "全选", | ||||
|     "deselectN": "取消选择 {}", | ||||
|     "xWillBeRemovedButRemainInstalled": "{} 将被从 Obtainium 中删除,但仍安装在设备上。", | ||||
|     "removeSelectedAppsQuestion": "删除已选择的应用程序吗?", | ||||
|     "removeSelectedApps": "删除已选择的应用程序", | ||||
|     "updateX": "更新 {}", | ||||
|     "installX": "安装 {}", | ||||
|     "markXTrackOnlyAsUpdated": "将仅追踪编辑为已更新", | ||||
|     "changeX": "更改 {}", | ||||
|     "installUpdateApps": "安装/更新应用程序", | ||||
|     "installUpdateSelectedApps": "安装/更新已选择的应用程序", | ||||
|     "onlyAppliesToInstalledAndOutdatedApps": "'只适用于已安装但已过时的应用程序", | ||||
|     "markXSelectedAppsAsUpdated": "将已选择的 {} 个应用程序标记为已更新?", | ||||
|     "no": "不要", | ||||
|     "yes": "好的", | ||||
|     "markSelectedAppsUpdated": "标记已选择的应用程序为已更新", | ||||
|     "pinToTop": "置顶", | ||||
|     "unpinFromTop": "取消置顶", | ||||
|     "resetInstallStatusForSelectedAppsQuestion": "为已选择的应用程序重置安装状态吗?", | ||||
|     "installStatusOfXWillBeResetExplanation": "当 Obtainium 中显示的应用程序版本由于更新失败或其他问题而不正确时,这将有助于重置任何选定应用程序的安装状态。", | ||||
|     "shareSelectedAppURLs": "分享已选择的应用程序 URL", | ||||
|     "resetInstallStatus": "重置安装状态", | ||||
|     "more": "更多", | ||||
|     "removeOutdatedFilter": "删除过时的应用程序过滤器", | ||||
|     "showOutdatedOnly": "只显示过时的应用程序", | ||||
|     "filter": "过滤器", | ||||
|     "filterActive": "过滤器 *", | ||||
|     "filterApps": "过滤应用", | ||||
|     "appName": "应用名称", | ||||
|     "author": "作者", | ||||
|     "upToDateApps": "已更新的应用程序", | ||||
|     "nonInstalledApps": "未安装的应用程序", | ||||
|     "importExport": "导入/导出", | ||||
|     "settings": "设置", | ||||
|     "exportedTo": "导出到 {}", | ||||
|     "obtainiumExport": "Obtainium 导出", | ||||
|     "invalidInput": "无效输入", | ||||
|     "importedX": "已导出到 {}", | ||||
|     "obtainiumImport": "Obtainium 导入", | ||||
|     "importFromURLList": "从 URL 列表导入", | ||||
|     "searchQuery": "搜索查询", | ||||
|     "appURLList": "应用 URL 列表", | ||||
|     "line": "行", | ||||
|     "searchX": "搜索 {}", | ||||
|     "noResults": "无结果", | ||||
|     "importX": "导入 {}", | ||||
|     "importedAppsIdDisclaimer": "导入的应用程序可能不正确地显示为未安装。要解决这个问题,请通过 Obtainium 重新安装它们。", | ||||
|     "importErrors": "导入错误", | ||||
|     "importedXOfYApps": "{} 中的 {} 个应用已导入", | ||||
|     "followingURLsHadErrors": "以下 URL 有错误:", | ||||
|     "okay": "好的", | ||||
|     "selectURL": "已选择的 URL", | ||||
|     "selectURLs": "已选择的 URL", | ||||
|     "pick": "选择", | ||||
|     "theme": "主题", | ||||
|     "dark": "深色", | ||||
|     "light": "浅色", | ||||
|     "followSystem": "跟随系统", | ||||
|     "obtainium": "Obtainium", | ||||
|     "materialYou": "Material You", | ||||
|     "appSortBy": "应用排列方式", | ||||
|     "authorName": "作者/名字", | ||||
|     "nameAuthor": "名字/作者", | ||||
|     "asAdded": "以添加顺序", | ||||
|     "appSortOrder": "以排列顺序", | ||||
|     "ascending": "升序", | ||||
|     "descending": "降序", | ||||
|     "bgUpdateCheckInterval": "后台更新检查间隔", | ||||
|     "neverManualOnly": "从不 - 仅手动", | ||||
|     "appearance": "外观", | ||||
|     "showWebInAppView": "在应用来源页显示网页", | ||||
|     "pinUpdates": "将需要更新的应用固定到顶部", | ||||
|     "updates": "已更新", | ||||
|     "sourceSpecific": "指定源", | ||||
|     "appSource": "应用源", | ||||
|     "noLogs": "无日志", | ||||
|     "appLogs": "应用日志", | ||||
|     "close": "关闭", | ||||
|     "share": "分享", | ||||
|     "appNotFound": "未找到应用", | ||||
|     "obtainiumExportHyphenatedLowercase": "obtainium-导出", | ||||
|     "pickAnAPK": "选择一个安装包", | ||||
|     "appHasMoreThanOnePackage": "{} 有多于一个安装包:", | ||||
|     "deviceSupportsXArch": "你的设备支持 {} CPU 架构", | ||||
|     "deviceSupportsFollowingArchs": "你的设备支持以下 CPU 架构:", | ||||
|     "warning": "警告", | ||||
|     "sourceIsXButPackageFromYPrompt": "此应用来源是 '{}' 但更新包来自 '{}'。 继续吗?", | ||||
|     "updatesAvailable": "更新可用", | ||||
|     "updatesAvailableNotifDescription": "通知 Obtainium 所跟踪应用程序的更新", | ||||
|     "noNewUpdates": "你的应用已是最新。", | ||||
|     "xHasAnUpdate": "{} 有更新啦", | ||||
|     "appsUpdated": "应用已更新", | ||||
|     "appsUpdatedNotifDescription": "通知在后台安装应用程序的更新", | ||||
|     "xWasUpdatedToY": "{} 已更新到 {}.", | ||||
|     "errorCheckingUpdates": "检查更新出错", | ||||
|     "errorCheckingUpdatesNotifDescription": "当后台更新检查失败时显示的通知", | ||||
|     "appsRemoved": "应用已删除", | ||||
|     "appsRemovedNotifDescription": "通知由于加载应用程序时出错而被删除", | ||||
|     "xWasRemovedDueToErrorY": "{} 已因以下错误被删除: {}", | ||||
|     "completeAppInstallation": "完成应用安装", | ||||
|     "obtainiumMustBeOpenToInstallApps": "Obtainium 需要被启动以安装更新", | ||||
|     "completeAppInstallationNotifDescription": "需要返回 Obtainium,以完成应用程序的安装。", | ||||
|     "checkingForUpdates": "检查更新中", | ||||
|     "checkingForUpdatesNotifDescription": "检查更新时出现的瞬时通知", | ||||
|     "pleaseAllowInstallPerm": "请允许 Obtainium 安装应用程序", | ||||
|     "trackOnly": "仅追踪", | ||||
|     "errorWithHttpStatusCode": "错误 {}", | ||||
|     "versionCorrectionDisabled": "Version correction disabled (plugin doesn't seem to work)", | ||||
|     "unknown": "Unknown", | ||||
|     "none": "None", | ||||
|     "never": "Never", | ||||
|     "latestVersionX": "Latest Version: {}", | ||||
|     "installedVersionX": "Installed Version: {}", | ||||
|     "lastUpdateCheckX": "Last Update Check: {}", | ||||
|     "remove": "Remove", | ||||
|     "removeAppQuestion": "Remove App?", | ||||
|     "yesMarkUpdated": "'Yes, Mark as Updated", | ||||
|     "tooManyRequestsTryAgainInMinutes": { | ||||
|         "one": "请求过多 (API 限制) - 在 {} 分钟后重试", | ||||
|         "other": "请求过多 (API 限制) - 在 {} 分钟后重试" | ||||
|     }, | ||||
|     "bgUpdateGotErrorRetryInMinutes": { | ||||
|         "one": "后台更新检查遇到了 {} 问题, 将在 {} 分钟后重试", | ||||
|         "other": "后台更新检查遇到了 {} 问题, 将在 {} 分钟后重试" | ||||
|     }, | ||||
|     "bgCheckFoundUpdatesWillNotifyIfNeeded": { | ||||
|         "one": "后台更新检查找到了 {} 个更新 - 将通知用户", | ||||
|         "other": "后台更新检查找到了 {} 个更新 - 将通知用户" | ||||
|     }, | ||||
|     "apps": { | ||||
|         "one": "{} 个应用", | ||||
|         "other": "{} 个应用" | ||||
|     }, | ||||
|     "url": { | ||||
|         "one": "{} 个 URL", | ||||
|         "other": "{} 个 URL" | ||||
|     }, | ||||
|     "minute": { | ||||
|         "one": "{} 分钟", | ||||
|         "other": "{} 分钟" | ||||
|     }, | ||||
|     "hour": { | ||||
|         "one": "{} 小时", | ||||
|         "other": "{} 小时" | ||||
|     }, | ||||
|     "day": { | ||||
|         "one": "{} 天", | ||||
|         "other": "{} 天" | ||||
|     }, | ||||
|     "clearedNLogsBeforeXAfterY": { | ||||
|         "one": "清除了 {n} 个日志 (清除前 = {before}, 清除后 = {after})", | ||||
|         "other": "清除了 {n} 个日志 (清除前 = {before}, 清除后 = {after})" | ||||
|     }, | ||||
|     "xAndNMoreUpdatesAvailable": { | ||||
|         "one": "{} 和 {} 更多应用已被更新", | ||||
|         "other": "{} 和 {} 更多应用已被更新" | ||||
|     }, | ||||
|     "xAndNMoreUpdatesInstalled": { | ||||
|         "one": "{} 和 {} 更多应用已被安装", | ||||
|         "other": "{} 和 {} 更多应用已被安装" | ||||
|     } | ||||
| } | ||||
| @@ -21,13 +21,13 @@ import 'package:easy_localization/src/easy_localization_controller.dart'; | ||||
| // ignore: implementation_imports | ||||
| import 'package:easy_localization/src/localization.dart'; | ||||
|  | ||||
| const String currentVersion = '0.8.10'; | ||||
| const String currentVersion = '0.8.11'; | ||||
| const String currentReleaseTag = | ||||
|     'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES | ||||
|  | ||||
| const int bgUpdateCheckAlarmId = 666; | ||||
|  | ||||
| const supportedLocales = [Locale('en')]; | ||||
| const supportedLocales = [Locale('en'), Locale('zh')]; | ||||
| const fallbackLocale = Locale('en'); | ||||
| const localeDir = 'assets/translations'; | ||||
|  | ||||
|   | ||||
| @@ -76,7 +76,7 @@ class _AppPageState extends State<AppPage> { | ||||
|                           style: Theme.of(context).textTheme.displayLarge, | ||||
|                         ), | ||||
|                         Text( | ||||
|                           'By ${app?.app.author ?? 'Unknown'}', | ||||
|                           tr('byX', args: [app?.app.author ?? tr('unknown')]), | ||||
|                           textAlign: TextAlign.center, | ||||
|                           style: Theme.of(context).textTheme.headlineMedium, | ||||
|                         ), | ||||
| @@ -102,12 +102,17 @@ class _AppPageState extends State<AppPage> { | ||||
|                           height: 32, | ||||
|                         ), | ||||
|                         Text( | ||||
|                           'Latest Version: ${app?.app.latestVersion ?? 'Unknown'}', | ||||
|                           tr('latestVersionX', | ||||
|                               args: [app?.app.latestVersion ?? tr('unknown')]), | ||||
|                           textAlign: TextAlign.center, | ||||
|                           style: Theme.of(context).textTheme.bodyLarge, | ||||
|                         ), | ||||
|                         Text( | ||||
|                           'Installed Version: ${app?.app.installedVersion ?? 'None'}${app?.app.trackOnly == true ? ' (Estimate)\n\nApp is Track-Only' : ''}', | ||||
|                           '${tr('installedVersionX', args: [ | ||||
|                                 app?.app.installedVersion ?? tr('none') | ||||
|                               ])}${app?.app.trackOnly == true ? ' ${tr('estimateInBrackets')}\n\n${tr('xIsTrackOnly', args: [ | ||||
|                                   tr('app') | ||||
|                                 ])}' : ''}', | ||||
|                           textAlign: TextAlign.center, | ||||
|                           style: Theme.of(context).textTheme.bodyLarge, | ||||
|                         ), | ||||
| @@ -115,7 +120,11 @@ class _AppPageState extends State<AppPage> { | ||||
|                           height: 32, | ||||
|                         ), | ||||
|                         Text( | ||||
|                           'Last Update Check: ${app?.app.lastUpdateCheck == null ? 'Never' : '\n${app?.app.lastUpdateCheck?.toLocal()}'}', | ||||
|                           tr('lastUpdateCheckX', args: [ | ||||
|                             app?.app.lastUpdateCheck == null | ||||
|                                 ? tr('never') | ||||
|                                 : '\n${app?.app.lastUpdateCheck?.toLocal()}' | ||||
|                           ]), | ||||
|                           textAlign: TextAlign.center, | ||||
|                           style: const TextStyle( | ||||
|                               fontStyle: FontStyle.italic, fontSize: 12), | ||||
| @@ -166,7 +175,7 @@ class _AppPageState extends State<AppPage> { | ||||
|                                                       Navigator.of(context) | ||||
|                                                           .pop(); | ||||
|                                                     }, | ||||
|                                                     child: const Text('No')), | ||||
|                                                     child: Text(tr('no'))), | ||||
|                                                 TextButton( | ||||
|                                                     onPressed: () { | ||||
|                                                       HapticFeedback | ||||
| @@ -183,8 +192,8 @@ class _AppPageState extends State<AppPage> { | ||||
|                                                       Navigator.of(context) | ||||
|                                                           .pop(); | ||||
|                                                     }, | ||||
|                                                     child: const Text( | ||||
|                                                         'Yes, Mark as Updated')) | ||||
|                                                     child: Text( | ||||
|                                                         tr('yesMarkUpdated'))) | ||||
|                                               ], | ||||
|                                             ); | ||||
|                                           }); | ||||
| @@ -267,9 +276,14 @@ class _AppPageState extends State<AppPage> { | ||||
|                                       context: context, | ||||
|                                       builder: (BuildContext ctx) { | ||||
|                                         return AlertDialog( | ||||
|                                           title: const Text('Remove App?'), | ||||
|                                           content: Text( | ||||
|                                               'This will remove \'${app?.installedInfo?.name ?? app?.app.name}\' from Obtainium.${app?.app.installedVersion != null ? '\n\nNote that while Obtainium will no longer track its updates, the App will remain installed.' : ''}'), | ||||
|                                           title: Text(tr('removeAppQuestion')), | ||||
|                                           content: Text(tr( | ||||
|                                               'xWillBeRemovedButRemainInstalled', | ||||
|                                               args: [ | ||||
|                                                 app?.installedInfo?.name ?? | ||||
|                                                     app?.app.name ?? | ||||
|                                                     tr('app') | ||||
|                                               ])), | ||||
|                                           actions: [ | ||||
|                                             TextButton( | ||||
|                                                 onPressed: () { | ||||
| @@ -283,12 +297,12 @@ class _AppPageState extends State<AppPage> { | ||||
|                                                             count++ >= 2); | ||||
|                                                   }); | ||||
|                                                 }, | ||||
|                                                 child: const Text('Remove')), | ||||
|                                                 child: Text(tr('remove'))), | ||||
|                                             TextButton( | ||||
|                                                 onPressed: () { | ||||
|                                                   Navigator.of(context).pop(); | ||||
|                                                 }, | ||||
|                                                 child: const Text('Cancel')) | ||||
|                                                 child: Text(tr('cancel'))) | ||||
|                                           ], | ||||
|                                         ); | ||||
|                                       }); | ||||
| @@ -298,7 +312,7 @@ class _AppPageState extends State<AppPage> { | ||||
|                                   Theme.of(context).colorScheme.error, | ||||
|                               surfaceTintColor: | ||||
|                                   Theme.of(context).colorScheme.error), | ||||
|                           child: const Text('Remove'), | ||||
|                           child: Text(tr('remove')), | ||||
|                         ), | ||||
|                       ])), | ||||
|               if (app?.downloadProgress != null) | ||||
|   | ||||
| @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev | ||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||
| # In Windows, build-name is used as the major, minor, and patch parts | ||||
| # of the product and file versions while build-number is used as the build suffix. | ||||
| version: 0.8.10+74 # When changing this, update the tag in main() accordingly | ||||
| version: 0.8.11+75 # When changing this, update the tag in main() accordingly | ||||
|  | ||||
| environment: | ||||
|   sdk: '>=2.18.2 <3.0.0' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user