Repository: DaiYu-233/YMCL.Avalonia
Branch: main
Commit: 81624f63d1f6
Files: 340
Total size: 2.1 MB
Directory structure:
gitextract_vk4v6nm4/
├── .editorconfig
├── .gitattributes
├── .github/
│ └── workflows/
│ └── publish.yml
├── .gitignore
├── .vscode/
│ └── settings.json
├── Assets/
│ ├── Default.isl
│ ├── Icon.Border.icns
│ ├── Icon.Shadow.Margin.psd
│ ├── Icon.Shadow.icns
│ ├── Icon.ai
│ ├── Icon.psd
│ ├── MiSans-Regular.otf
│ └── bak/
│ ├── YMCL-App-Icon.psd
│ └── YMCL-Icon.icns
├── Directory.Packages.props
├── LICENSE
├── README.en.md
├── README.md
├── YMCL.Main/
│ ├── YMCL/
│ │ ├── App.axaml
│ │ ├── App.axaml.cs
│ │ ├── FodyWeavers.xml
│ │ ├── FodyWeavers.xsd
│ │ ├── GlobalUsings.cs
│ │ ├── Public/
│ │ │ ├── Assets/
│ │ │ │ └── MiSans-Regular.otf
│ │ │ ├── Classes/
│ │ │ │ ├── Data/
│ │ │ │ │ ├── AggregateSearchEntry.cs
│ │ │ │ │ ├── FavouriteResourceEntry.cs
│ │ │ │ │ ├── JavaEntry.cs
│ │ │ │ │ ├── Language.cs
│ │ │ │ │ ├── LocalModEntry.cs
│ │ │ │ │ ├── LocalResourcePackEntry.cs
│ │ │ │ │ ├── LocalSaveEntry.cs
│ │ │ │ │ ├── LogItemEntry.cs
│ │ │ │ │ ├── MinecraftFolder.cs
│ │ │ │ │ ├── ModrinthFile.cs
│ │ │ │ │ ├── NewsDataListEntry.cs
│ │ │ │ │ ├── NotificationEntry.cs
│ │ │ │ │ ├── ResourceFetcher/
│ │ │ │ │ │ ├── CurseForgeResourceEntry.cs
│ │ │ │ │ │ ├── CurseForgeResourceFileEntry.cs
│ │ │ │ │ │ ├── IResourceEntry.cs
│ │ │ │ │ │ ├── IResourceFileEntry.cs
│ │ │ │ │ │ ├── ModFileUiEntry.cs
│ │ │ │ │ │ └── ModrinthResourceEntry.cs
│ │ │ │ │ ├── SearchTabViewItemEntry.cs
│ │ │ │ │ └── Update.cs
│ │ │ │ ├── Json/
│ │ │ │ │ ├── AfdianSponsor.cs
│ │ │ │ │ ├── ModrinchVersionEntry.cs
│ │ │ │ │ └── MojangJavaNews.cs
│ │ │ │ ├── Netease/
│ │ │ │ │ ├── Availability.cs
│ │ │ │ │ ├── DefaultKeyword.cs
│ │ │ │ │ ├── Lyric.cs
│ │ │ │ │ ├── PlayList.cs
│ │ │ │ │ ├── RecordSongEntry.cs
│ │ │ │ │ ├── SingleSong.cs
│ │ │ │ │ └── SongUrl.cs
│ │ │ │ ├── Operate/
│ │ │ │ │ ├── FavouriteMinecraftEntry.cs
│ │ │ │ │ ├── MinecraftDataEntry.cs
│ │ │ │ │ ├── PluginInfoEntry.cs
│ │ │ │ │ ├── RegisteredPage.cs
│ │ │ │ │ ├── SubTask.cs
│ │ │ │ │ └── TaskEntryOperateButtonEntry.cs
│ │ │ │ └── Setting/
│ │ │ │ ├── Account.cs
│ │ │ │ ├── ExchangeSettingEntry.cs
│ │ │ │ ├── GameSettingEntry.cs
│ │ │ │ ├── SettingEntry.cs
│ │ │ │ └── UiProperty.cs
│ │ │ ├── Const/
│ │ │ │ ├── Data.cs
│ │ │ │ ├── Path.cs
│ │ │ │ └── String.cs
│ │ │ ├── Controls/
│ │ │ │ ├── CourseForgeFileExpander.axaml
│ │ │ │ ├── CourseForgeFileExpander.axaml.cs
│ │ │ │ ├── Drawers/
│ │ │ │ │ ├── MsgHistory.axaml
│ │ │ │ │ └── MsgHistory.axaml.cs
│ │ │ │ ├── LogViewer.axaml
│ │ │ │ ├── LogViewer.axaml.cs
│ │ │ │ ├── ModrinthFileExpander.axaml
│ │ │ │ ├── ModrinthFileExpander.axaml.cs
│ │ │ │ ├── ScreenshotEntry.axaml
│ │ │ │ ├── ScreenshotEntry.axaml.cs
│ │ │ │ ├── TaskEntry.axaml
│ │ │ │ ├── TaskEntry.axaml.cs
│ │ │ │ ├── TextWithIcon.axaml
│ │ │ │ ├── TextWithIcon.axaml.cs
│ │ │ │ ├── TitleBar.axaml
│ │ │ │ └── TitleBar.axaml.cs
│ │ │ ├── Enum/
│ │ │ │ ├── GameSpecialFolder.cs
│ │ │ │ ├── LogType.cs
│ │ │ │ ├── ModLoaderType.cs
│ │ │ │ ├── ResourceSource.cs
│ │ │ │ ├── ResourceType.cs
│ │ │ │ ├── RuntimeInfo.cs
│ │ │ │ ├── Setting.cs
│ │ │ │ ├── SongType.cs
│ │ │ │ └── TaskState.cs
│ │ │ ├── Langs/
│ │ │ │ ├── LangHelper.cs
│ │ │ │ ├── MainLang.Designer.cs
│ │ │ │ ├── MainLang.en-US.resx
│ │ │ │ ├── MainLang.ja-JP.resx
│ │ │ │ ├── MainLang.resx
│ │ │ │ ├── MainLang.ru-RU.resx
│ │ │ │ └── MainLang.zh-Hant.resx
│ │ │ ├── Module/
│ │ │ │ ├── App/
│ │ │ │ │ ├── AppMethod.cs
│ │ │ │ │ ├── Init/
│ │ │ │ │ │ ├── Dispatcher.cs
│ │ │ │ │ │ ├── Op/
│ │ │ │ │ │ │ ├── Parser.cs
│ │ │ │ │ │ │ └── SubModule/
│ │ │ │ │ │ │ ├── ImportSetting.cs
│ │ │ │ │ │ │ └── InstallModPack.cs
│ │ │ │ │ │ └── SubModule/
│ │ │ │ │ │ ├── Decision.cs
│ │ │ │ │ │ ├── DetectPlatform.cs
│ │ │ │ │ │ ├── GetDataFromNetwork/
│ │ │ │ │ │ │ ├── Dispatcher.cs
│ │ │ │ │ │ │ ├── InstallPreviewModLoaders.cs
│ │ │ │ │ │ │ └── InstallableGames.cs
│ │ │ │ │ │ ├── InitConfig.cs
│ │ │ │ │ │ ├── InitData.cs
│ │ │ │ │ │ ├── InitLang.cs
│ │ │ │ │ │ ├── InitPlugin.cs
│ │ │ │ │ │ ├── InitUi.cs
│ │ │ │ │ │ ├── SettingChanged.cs
│ │ │ │ │ │ └── TranslateToken.cs
│ │ │ │ │ └── Setting.cs
│ │ │ │ ├── Debouncer.cs
│ │ │ │ ├── IO/
│ │ │ │ │ ├── Disk/
│ │ │ │ │ │ ├── Getter.cs
│ │ │ │ │ │ ├── Opener.cs
│ │ │ │ │ │ └── Setter.cs
│ │ │ │ │ └── Network/
│ │ │ │ │ ├── CurseForge.cs
│ │ │ │ │ ├── DownloadFileWithProgress.cs
│ │ │ │ │ ├── Http/
│ │ │ │ │ │ └── Get.cs
│ │ │ │ │ ├── Modrinch.cs
│ │ │ │ │ ├── NeteaseMusic.cs
│ │ │ │ │ └── Update.cs
│ │ │ │ ├── Mc/
│ │ │ │ │ ├── Icon.cs
│ │ │ │ │ ├── Importer/
│ │ │ │ │ │ ├── jar/
│ │ │ │ │ │ │ └── Main.cs
│ │ │ │ │ │ ├── mrpack/
│ │ │ │ │ │ │ ├── Main.cs
│ │ │ │ │ │ │ └── ModPack.cs
│ │ │ │ │ │ └── zip/
│ │ │ │ │ │ ├── Main.cs
│ │ │ │ │ │ ├── ModPack.cs
│ │ │ │ │ │ └── Resource.cs
│ │ │ │ │ ├── Installer/
│ │ │ │ │ │ ├── Minecraft/
│ │ │ │ │ │ │ ├── CompositeForgeAndOptiFine.cs
│ │ │ │ │ │ │ ├── Dispatcher.cs
│ │ │ │ │ │ │ ├── Fabric.cs
│ │ │ │ │ │ │ ├── Forge.cs
│ │ │ │ │ │ │ ├── OptiFine.cs
│ │ │ │ │ │ │ ├── Quilt.cs
│ │ │ │ │ │ │ └── Vanilla.cs
│ │ │ │ │ │ └── ModPack/
│ │ │ │ │ │ ├── CurseForge.cs
│ │ │ │ │ │ └── Modrinth.cs
│ │ │ │ │ ├── Launcher/
│ │ │ │ │ │ ├── BedRock.cs
│ │ │ │ │ │ └── JavaClient.cs
│ │ │ │ │ ├── MinecraftSetting.cs
│ │ │ │ │ └── Utils.cs
│ │ │ │ ├── Op/
│ │ │ │ │ ├── Account.cs
│ │ │ │ │ ├── DownloadResource.cs
│ │ │ │ │ ├── JavaRuntime.cs
│ │ │ │ │ └── MinecraftFolder.cs
│ │ │ │ ├── Player.cs
│ │ │ │ ├── Ui/
│ │ │ │ │ ├── Animator.cs
│ │ │ │ │ ├── Converter/
│ │ │ │ │ │ ├── AccountTypeIsMicrosoftConverter.cs
│ │ │ │ │ │ ├── BoolReversalConverter.cs
│ │ │ │ │ │ ├── BoolToDoubleConverter.cs
│ │ │ │ │ │ ├── BoolToIntConverter.cs
│ │ │ │ │ │ ├── BoolToStringConverter.cs
│ │ │ │ │ │ ├── CountToUnitConverter.cs
│ │ │ │ │ │ ├── DateTimeToStringConverter.cs
│ │ │ │ │ │ ├── DoubleToIntByRoundConverter.cs
│ │ │ │ │ │ ├── DoubleToPercentageConverter.cs
│ │ │ │ │ │ ├── EnumIndexToBoolConverter.cs
│ │ │ │ │ │ ├── GameSettingMaxMemConverter.cs
│ │ │ │ │ │ ├── ListCountToBoolConverter.cs
│ │ │ │ │ │ ├── ListDistinctConverter.cs
│ │ │ │ │ │ ├── LogTypeToColorConverter.cs
│ │ │ │ │ │ ├── MaxThreadOverSafeConverter.cs
│ │ │ │ │ │ ├── MsToTimeConverter.cs
│ │ │ │ │ │ ├── NoTaskIsVisibleConverter.cs
│ │ │ │ │ │ ├── ReversalBoolConverter.cs
│ │ │ │ │ │ ├── SelectedGameIsNotBedrock.cs
│ │ │ │ │ │ ├── SpecialControlEnableListConverter.cs
│ │ │ │ │ │ ├── TaskStateToColorConverter.cs
│ │ │ │ │ │ └── TaskStateToTipConverter.cs
│ │ │ │ │ ├── Getter.cs
│ │ │ │ │ ├── Setter.cs
│ │ │ │ │ ├── Shower.cs
│ │ │ │ │ └── Special/
│ │ │ │ │ ├── AggregateSearchUi.cs
│ │ │ │ │ ├── AutoInstallUi.cs
│ │ │ │ │ ├── DropHandler.cs
│ │ │ │ │ └── LaunchUi.cs
│ │ │ │ ├── Util/
│ │ │ │ │ ├── Extension/
│ │ │ │ │ │ ├── Extensions.cs
│ │ │ │ │ │ └── Number.cs
│ │ │ │ │ ├── Permission.cs
│ │ │ │ │ ├── Platform/
│ │ │ │ │ │ └── MacOs/
│ │ │ │ │ │ └── WindowHandler.cs
│ │ │ │ │ └── VersionComparer.cs
│ │ │ │ └── Value/
│ │ │ │ ├── Calculator.cs
│ │ │ │ └── Converter.cs
│ │ │ ├── Plugin/
│ │ │ │ ├── Helper/
│ │ │ │ │ ├── BuildNavItemContent.cs
│ │ │ │ │ └── RegisterPage.cs
│ │ │ │ ├── Loader.cs
│ │ │ │ └── PluginLoadContext.cs
│ │ │ ├── Styles/
│ │ │ │ ├── Dynamic/
│ │ │ │ │ ├── ContentDialog.axaml
│ │ │ │ │ ├── NotificationBubble.axaml
│ │ │ │ │ ├── NotificationCard.axaml
│ │ │ │ │ └── Popup.axaml
│ │ │ │ ├── IconPath.axaml
│ │ │ │ ├── Style.axaml
│ │ │ │ └── Theme.axaml
│ │ │ └── Texts/
│ │ │ ├── CustomHomePageDefault.axaml
│ │ │ ├── DateTime.txt
│ │ │ └── IsAloneProgram.txt
│ │ ├── ViewModels/
│ │ │ ├── GameSettingModel.cs
│ │ │ ├── InstallPreviewModel.cs
│ │ │ ├── LogViewerModel.cs
│ │ │ ├── MainViewModel.cs
│ │ │ ├── NotifyPropertyModelBase.cs
│ │ │ ├── TaskEntryModel.cs
│ │ │ └── ViewModelBase.cs
│ │ ├── Views/
│ │ │ ├── CrashWindow.axaml
│ │ │ ├── CrashWindow.axaml.cs
│ │ │ ├── Initialize/
│ │ │ │ ├── InitializeView.axaml
│ │ │ │ ├── InitializeView.axaml.cs
│ │ │ │ ├── InitializeWindow.axaml
│ │ │ │ ├── InitializeWindow.axaml.cs
│ │ │ │ └── Pages/
│ │ │ │ ├── Account.axaml
│ │ │ │ ├── Account.axaml.cs
│ │ │ │ ├── JavaRuntime.axaml
│ │ │ │ ├── JavaRuntime.axaml.cs
│ │ │ │ ├── Language.axaml
│ │ │ │ ├── Language.axaml.cs
│ │ │ │ ├── MinecraftFolder.axaml
│ │ │ │ └── MinecraftFolder.axaml.cs
│ │ │ ├── LogWindow.axaml
│ │ │ ├── LogWindow.axaml.cs
│ │ │ ├── Main/
│ │ │ │ ├── MainView.axaml
│ │ │ │ ├── MainView.axaml.cs
│ │ │ │ ├── MainWindow.axaml
│ │ │ │ ├── MainWindow.axaml.cs
│ │ │ │ └── Pages/
│ │ │ │ ├── About.axaml
│ │ │ │ ├── About.axaml.cs
│ │ │ │ ├── Download.axaml
│ │ │ │ ├── Download.axaml.cs
│ │ │ │ ├── DownloadPages/
│ │ │ │ │ ├── AutoInstall.axaml
│ │ │ │ │ ├── AutoInstall.axaml.cs
│ │ │ │ │ ├── AutoInstallPages/
│ │ │ │ │ │ ├── InstallPreview.axaml
│ │ │ │ │ │ ├── InstallPreview.axaml.cs
│ │ │ │ │ │ ├── InstallableGames.axaml
│ │ │ │ │ │ └── InstallableGames.axaml.cs
│ │ │ │ │ ├── CurseForge.axaml
│ │ │ │ │ ├── CurseForge.axaml.cs
│ │ │ │ │ ├── CurseForgePages/
│ │ │ │ │ │ ├── Fetcher.axaml
│ │ │ │ │ │ ├── Fetcher.axaml.cs
│ │ │ │ │ │ ├── ModFileResult.axaml
│ │ │ │ │ │ ├── ModFileResult.axaml.cs
│ │ │ │ │ │ ├── SearchResult.axaml
│ │ │ │ │ │ └── SearchResult.axaml.cs
│ │ │ │ │ ├── Favourites.axaml
│ │ │ │ │ ├── Favourites.axaml.cs
│ │ │ │ │ ├── Modrinth.axaml
│ │ │ │ │ ├── Modrinth.axaml.cs
│ │ │ │ │ └── ModrinthPages/
│ │ │ │ │ ├── Fetcher.axaml
│ │ │ │ │ ├── Fetcher.axaml.cs
│ │ │ │ │ ├── ModFileResult.axaml
│ │ │ │ │ ├── ModFileResult.axaml.cs
│ │ │ │ │ ├── SearchResult.axaml
│ │ │ │ │ └── SearchResult.axaml.cs
│ │ │ │ ├── Launch.axaml
│ │ │ │ ├── Launch.axaml.cs
│ │ │ │ ├── LaunchPages/
│ │ │ │ │ ├── GameList.axaml
│ │ │ │ │ ├── GameList.axaml.cs
│ │ │ │ │ ├── GameSetting.axaml
│ │ │ │ │ ├── GameSetting.axaml.cs
│ │ │ │ │ └── SubPages/
│ │ │ │ │ ├── Mod.axaml
│ │ │ │ │ ├── Mod.axaml.cs
│ │ │ │ │ ├── OverView.axaml
│ │ │ │ │ ├── OverView.axaml.cs
│ │ │ │ │ ├── ResourcePack.axaml
│ │ │ │ │ ├── ResourcePack.axaml.cs
│ │ │ │ │ ├── Save.axaml
│ │ │ │ │ ├── Save.axaml.cs
│ │ │ │ │ ├── Screenshot.axaml
│ │ │ │ │ ├── Screenshot.axaml.cs
│ │ │ │ │ ├── Setting.axaml
│ │ │ │ │ ├── Setting.axaml.cs
│ │ │ │ │ ├── ShaderPack.axaml
│ │ │ │ │ └── ShaderPack.axaml.cs
│ │ │ │ ├── More.axaml
│ │ │ │ ├── More.axaml.cs
│ │ │ │ ├── MorePages/
│ │ │ │ │ ├── GameUpdateLog.axaml
│ │ │ │ │ ├── GameUpdateLog.axaml.cs
│ │ │ │ │ ├── TreasureBox.axaml
│ │ │ │ │ └── TreasureBox.axaml.cs
│ │ │ │ ├── Music.axaml
│ │ │ │ ├── Music.axaml.cs
│ │ │ │ ├── MusicPages/
│ │ │ │ │ ├── Lyric.axaml
│ │ │ │ │ ├── Lyric.axaml.cs
│ │ │ │ │ ├── PlayList.axaml
│ │ │ │ │ ├── PlayList.axaml.cs
│ │ │ │ │ ├── Search.axaml
│ │ │ │ │ └── Search.axaml.cs
│ │ │ │ ├── Search.axaml
│ │ │ │ ├── Search.axaml.cs
│ │ │ │ ├── Setting.axaml
│ │ │ │ ├── Setting.axaml.cs
│ │ │ │ ├── SettingPages/
│ │ │ │ │ ├── Account.axaml
│ │ │ │ │ ├── Account.axaml.cs
│ │ │ │ │ ├── Download.axaml
│ │ │ │ │ ├── Download.axaml.cs
│ │ │ │ │ ├── Launch.axaml
│ │ │ │ │ ├── Launch.axaml.cs
│ │ │ │ │ ├── Launcher.axaml
│ │ │ │ │ ├── Launcher.axaml.cs
│ │ │ │ │ ├── Personalize.axaml
│ │ │ │ │ ├── Personalize.axaml.cs
│ │ │ │ │ ├── Plugin.axaml
│ │ │ │ │ └── Plugin.axaml.cs
│ │ │ │ ├── Task.axaml
│ │ │ │ └── Task.axaml.cs
│ │ │ ├── NotificationWindow.axaml
│ │ │ └── NotificationWindow.axaml.cs
│ │ └── YMCL.csproj
│ └── YMCL.Desktop/
│ ├── Icon-Border.icns
│ ├── Program.cs
│ ├── Properties/
│ │ └── PublishProfiles/
│ │ └── FolderProfile.pubxml
│ ├── YMCL.Desktop.csproj
│ ├── YMCL.Desktop.desktop
│ ├── YMCL.Desktop.metainfo.xml
│ ├── YMCL.Desktop.pupnet.conf
│ └── app.manifest
├── YMCL.Plugin/
│ ├── YMCL.Plugin.Base/
│ │ ├── IPlugin.cs
│ │ └── YMCL.Plugin.Base.csproj
│ ├── YMCL.Plugin.Page/
│ │ ├── ExamplePage.axaml
│ │ ├── ExamplePage.axaml.cs
│ │ ├── Main.cs
│ │ └── YMCL.Plugin.Page.csproj
│ └── YMCL.Plugin.Simple/
│ ├── Main.cs
│ └── YMCL.Plugin.Simple.csproj
├── YMCL.Web/
│ ├── css/
│ │ ├── components.css
│ │ ├── google.css
│ │ ├── main.css
│ │ └── responsive.css
│ ├── index.html
│ └── js/
│ ├── downloads.js
│ └── main.js
├── YMCL.sln
├── YMCL.sln.DotSettings
└── crowdin.yml
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
[*.cs]
dotnet_diagnostic.CS8600.severity = none
dotnet_diagnostic.CA1416.severity = none
dotnet_diagnostic.CS8602.severity = none
dotnet_diagnostic.CS8851.severity = none
dotnet_diagnostic.CA1822.severity = none
dotnet_diagnostic.CA1839.severity = none
dotnet_diagnostic.IDE0090.severity = none
dotnet_diagnostic.IDE0220.severity = none
dotnet_diagnostic.IDE0044.severity = none
# CS8601: 引用类型赋值可能为 null。
dotnet_diagnostic.CS8601.severity = none
# CS8603: 可能返回 null 引用。
dotnet_diagnostic.CS8603.severity = none
# CS8625: 无法将 null 字面量转换为非 null 的引用类型。
dotnet_diagnostic.CS8625.severity = none
# CS8618: 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。
dotnet_diagnostic.CS8618.severity = none
# IDE1006: 命名样式
dotnet_diagnostic.IDE1006.severity = none
# CS8612: 类型中引用类型的为 Null 性与隐式实现的成员不匹配。
dotnet_diagnostic.CS8612.severity = none
# CS8767: 参数类型中引用类型的为 Null 性与隐式实现的成员不匹配(可能是由于为 Null 性特性)。
dotnet_diagnostic.CS8767.severity = none
# CS0642: 空语句可能有错误
dotnet_diagnostic.CS0642.severity = none
# IDE0063: 使用简单的 "using" 语句
dotnet_diagnostic.IDE0063.severity = none
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf charset=utf-8
*.axaml text charset=utf-8
*.cs text charset=utf-8
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish
on:
workflow_dispatch:
push:
branches: ["main"]
env:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
jobs:
time:
runs-on: ubuntu-latest
outputs:
v: ${{ steps.date.outputs.time }}
y: ${{ steps.date.outputs.y }}
md: ${{ steps.date.outputs.md }}
hm: ${{ steps.date.outputs.hm }}
sv: ${{ steps.date.outputs.sv }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Generate Version
id: date
run: |
echo "time=$(TZ='Asia/Shanghai' date +'%Y.%m.%d.%H.%M')" >> $GITHUB_OUTPUT
echo "y=$(TZ='Asia/Shanghai' date +'%Y')" >> $GITHUB_OUTPUT
echo "md=$(TZ='Asia/Shanghai' date +'%m%d')" >> $GITHUB_OUTPUT
echo "hm=$(TZ='Asia/Shanghai' date +'%H%M')" >> $GITHUB_OUTPUT
echo "sv=$(TZ='Asia/Shanghai' date +'%Y.%m.%d.%H%M')" >> $GITHUB_OUTPUT
- name: Display Version
run: |
echo "Version: ${{ steps.date.outputs.time }}"
linux-appimage:
runs-on: ubuntu-22.04
needs: time
strategy:
matrix:
arch: [x64, arm, arm64]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Write Version
run: echo "${{ needs.time.outputs.v }}" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt
- name: Install Dependencies
run: |
dotnet tool install -g KuiperZone.PupNet --version 1.8.0
sudo apt-get update -qq
sudo apt-get install -y fuse
- name: Build AppImage (${{ matrix.arch }})
run: |
cd ./YMCL.Main/YMCL.Desktop
~/.dotnet/tools/pupnet --runtime linux-${{ matrix.arch }} --kind appimage -o YMCL.Desktop.linux.${{ matrix.arch }}.AppImage -y --app-version ${{ needs.time.outputs.y }}.${{ needs.time.outputs.md }}.${{ needs.time.outputs.hm }}
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: linux-appimage-${{ matrix.arch }}
path: YMCL.Main/YMCL.Desktop/Deploy/OUT/*
retention-days: 1
linux-macos:
runs-on: ubuntu-22.04
needs: time
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Write Version
run: echo "${{ needs.time.outputs.v }}" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt
- name: Build macOS App (x64)
run: |
cd ./YMCL.Main/YMCL.Desktop
dotnet restore -r osx-x64
dotnet msbuild -t:BundleApp -p:RuntimeIdentifier=osx-x64 -property:Configuration=Release -p:SelfContained=true -p:Version=${{ needs.time.outputs.sv }}
cp ./Icon-Border.icns "./bin/Release/net8.0/osx-x64/publish/YMCL.app/Contents/Resources/Icon-Border.icns"
cd ./bin/Release/net8.0/osx-x64/publish/
zip -9 -r ../../YMCL.Desktop.osx.mac.x64.app.zip "./YMCL.app"
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: linux-macos-artifacts
path: YMCL.Main/YMCL.Desktop/bin/Release/net8.0/YMCL.Desktop.osx.mac.x64.app.zip
retention-days: 1
linux-windows:
runs-on: ubuntu-22.04
needs: time
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Write Version
run: echo "${{ needs.time.outputs.v }}" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt
- name: Build Windows Executables
run: |
cd ./YMCL.Main/YMCL.Desktop
for arch in win-x86 win-x64 win-arm64; do
dotnet publish -c Release -r $arch /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true /p:SelfContained=false /p:Version=${{ needs.time.outputs.sv }}
mv ./bin/Release/net8.0/$arch/publish/YMCL.Desktop.exe ./bin/Release/net8.0/YMCL.win.${arch#win-}.portable.exe
done
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: linux-windows-artifacts
path: YMCL.Main/YMCL.Desktop/bin/Release/net8.0/*.exe
retention-days: 1
win:
runs-on: windows-latest
needs: time
strategy:
matrix:
arch: [x64, x86, arm64]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Install Inno Setup
uses: ConorMacBride/install-package@v1
with:
choco: innosetup --version 6.7.0
- name: Apply Chinese Localization
run: Copy-Item "./Assets/Default.isl" "C:\Program Files (x86)\Inno Setup 6\Default.isl" -Force
- name: Install PupNet
run: dotnet tool install -g KuiperZone.PupNet --version 1.8.0
- name: Write Version
run: echo "${{ needs.time.outputs.v }}" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt
shell: bash
- name: Build Installer (${{ matrix.arch }})
run: |
cd ./YMCL.Main/YMCL.Desktop
pupnet -r win-${{ matrix.arch }} -k setup -y -o YMCL.Desktop.win.${{ matrix.arch }}.installer.exe --app-version ${{ needs.time.outputs.y }}.${{ needs.time.outputs.md }}.${{ needs.time.outputs.hm }}
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: win-artifacts-${{ matrix.arch }}
path: ./YMCL.Main/YMCL.Desktop/Deploy/OUT/*
retention-days: 1
mac:
needs: [linux-macos]
runs-on: macos-latest
steps:
- name: Download macOS App
uses: actions/download-artifact@v4
with:
name: linux-macos-artifacts
path: ./YMCL.Release/
- name: Extract macOS App
run: unzip -n ./YMCL.Release/YMCL.Desktop.osx.mac.x64.app.zip -d ./app.x64
- name: Create DMG (x64)
uses: L-Super/create-dmg-actions@v1.0.3
with:
dmg_name: "YMCL.Desktop.osx.mac.x64"
src_dir: "./app.x64/YMCL.app"
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: osx-artifacts
path: ./YMCL.Desktop.osx.mac.x64.dmg
retention-days: 1
publish:
needs: [linux-appimage, linux-macos, linux-windows, win, mac, time]
runs-on: ubuntu-latest
steps:
- name: Generate Release Date
id: gdate
run: |
echo "date=$(date +'%Y-%m-%d.%H-%M-%S')" >> $GITHUB_OUTPUT
echo "title=$(date +'%Y.%m.%d.%H.%M')" >> $GITHUB_OUTPUT
- name: Download All Artifacts
uses: actions/download-artifact@v4
with:
path: ./YMCL.Release/
- name: List Release Files
run: find ./YMCL.Release/ -type f -name "*.exe" -o -name "*.dmg" -o -name "*.AppImage" -o -name "*.zip"
- name: Rename Artifacts (Remove Desktop)
run: |
cd ./YMCL.Release/
find . -type f \( -name "*.exe" -o -name "*.dmg" -o -name "*.AppImage" -o -name "*.zip" \) | while read file; do
newname=$(echo "$file" | sed 's/YMCL\.Desktop\./YMCL./g')
if [ "$file" != "$newname" ]; then
mv "$file" "$newname"
fi
done
- name: Publish Release
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: "${{ secrets.TOKEN }}"
title: "v${{ needs.time.outputs.v }}"
automatic_release_tag: "AutoPublish"
prerelease: false
files: |
YMCL.Release/**/*.exe
YMCL.Release/**/*.dmg
YMCL.Release/**/*.AppImage
YMCL.Release/**/*.zip
================================================
FILE: .gitignore
================================================
bin/
obj/
.vs/*
.idea/*
*.suo
*.bin
*.user
================================================
FILE: .vscode/settings.json
================================================
{
}
================================================
FILE: Assets/Default.isl
================================================
; *** Inno Setup 版本 6.5.0+ 中文消息 ***
;
; 要下载此文件的用户贡献翻译,请访问:
; https://jrsoftware.org/files/istrans/
;
; 注意:翻译此文本时,不要在原本没有句号 (.) 的消息末尾添加句号,
; 因为 Inno Setup 会自动添加句号(添加句号会导致显示两个句号)
[LangOptions]
; 以下三个条目非常重要。请务必阅读并理解
; 帮助文件中的"[LangOptions] 部分"主题。
LanguageName=简体中文
LanguageID=$0804
; 应尽可能设置 LanguageCodePage,即使此文件是 Unicode
; 对于中文简体,设置为 936(GBK 编码)
LanguageCodePage=936
; 如果您要翻译的语言需要特殊的字体或
; 大小,请取消注释以下任何条目并相应更改。
;DialogFontName=
;DialogFontSize=9
;DialogFontBaseScaleWidth=7
;DialogFontBaseScaleHeight=15
;WelcomeFontName=Segoe UI
;WelcomeFontSize=14
[Messages]
; *** 应用程序标题
SetupAppTitle=安装
SetupWindowTitle=安装 - %1
UninstallAppTitle=卸载
UninstallAppFullTitle=%1 卸载
; *** 杂项常见
InformationTitle=信息
ConfirmTitle=确认
ErrorTitle=错误
; *** SetupLdr 消息
SetupLdrStartupMessage=这将安装 %1。您想继续吗?
LdrCannotCreateTemp=无法创建临时文件。安装已中止
LdrCannotExecTemp=无法在临时目录中执行文件。安装已中止
HelpTextNote=
; *** 启动错误消息
LastErrorMessage=%1。%n%n错误 %2: %3
SetupFileMissing=安装目录中缺少文件 %1。请更正问题或获取程序的新副本。
SetupFileCorrupt=安装文件已损坏。请获取程序的新副本。
SetupFileCorruptOrWrongVer=安装文件已损坏或与此版本的安装程序不兼容。请更正问题或获取程序的新副本。
InvalidParameter=在命令行上传递了无效参数:%n%n%1
SetupAlreadyRunning=安装程序已在运行。
WindowsVersionNotSupported=此程序不支持您的计算机运行的 Windows 版本。
WindowsServicePackRequired=此程序需要 %1 Service Pack %2 或更高版本。
NotOnThisPlatform=此程序不会在 %1 上运行。
OnlyOnThisPlatform=此程序必须在 %1 上运行。
OnlyOnTheseArchitectures=此程序只能安装在为以下处理器架构设计的 Windows 版本上:%n%n%1
WinVersionTooLowError=此程序需要 %1 版本 %2 或更高版本。
WinVersionTooHighError=此程序无法安装在 %1 版本 %2 或更高版本上。
AdminPrivilegesRequired=安装此程序时必须以管理员身份登录。
PowerUserPrivilegesRequired=安装此程序时必须以管理员身份或作为 Power Users 组成员登录。
SetupAppRunningError=安装程序检测到 %1 当前正在运行。%n%n请立即关闭它的所有实例,然后单击"确定"继续,或单击"取消"退出。
UninstallAppRunningError=卸载程序检测到 %1 当前正在运行。%n%n请立即关闭它的所有实例,然后单击"确定"继续,或单击"取消"退出。
; *** 启动问题
PrivilegesRequiredOverrideTitle=选择安装模式
PrivilegesRequiredOverrideInstruction=选择安装模式
PrivilegesRequiredOverrideText1=%1 可以为所有用户安装(需要管理员权限),或仅为您安装。
PrivilegesRequiredOverrideText2=%1 可以仅为您安装,或为所有用户安装(需要管理员权限)。
PrivilegesRequiredOverrideAllUsers=为 &所有用户安装
PrivilegesRequiredOverrideAllUsersRecommended=为 &所有用户安装(推荐)
PrivilegesRequiredOverrideCurrentUser=仅为 &我安装
PrivilegesRequiredOverrideCurrentUserRecommended=仅为 &我安装(推荐)
; *** 杂项错误
ErrorCreatingDir=安装程序无法创建目录"%1"
ErrorTooManyFilesInDir=无法在目录"%1"中创建文件,因为它包含太多文件
; *** 安装常见消息
ExitSetupTitle=退出安装
ExitSetupMessage=安装未完成。如果现在退出,程序将不会被安装。%n%n您可以在另一个时间再次运行安装程序以完成安装。%n%n退出安装?
AboutSetupMenuItem=&关于安装(&A)...
AboutSetupTitle=关于安装
AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4
AboutSetupNote=
TranslatorNote=
; *** 按钮
ButtonBack=< &返回
ButtonNext=&下一步 >
ButtonInstall=&安装
ButtonOK=确定
ButtonCancel=取消
ButtonYes=&是
ButtonYesToAll=全部 &是(&A)
ButtonNo=&否
ButtonNoToAll=全部 &否(&O)
ButtonFinish=&完成
ButtonBrowse=&浏览...
ButtonWizardBrowse=浏览(&R)...
ButtonNewFolder=&新建文件夹
; *** "选择语言"对话框消息
SelectLanguageTitle=选择安装语言
SelectLanguageLabel=选择安装期间要使用的语言。
; *** 常见向导文本
ClickNext=单击"下一步"继续,或单击"取消"退出安装。
BeveledLabel=
BrowseDialogTitle=浏览文件夹
BrowseDialogLabel=从下面的列表中选择一个文件夹,然后单击"确定"。
NewFolderName=新建文件夹
; *** "欢迎"向导页面
WelcomeLabel1=欢迎使用 [name] 安装向导
WelcomeLabel2=这将在您的计算机上安装 [name/ver]。%n%n建议您在继续之前关闭所有其他应用程序。
; *** "密码"向导页面
WizardPassword=密码
PasswordLabel1=此安装受密码保护。
PasswordLabel3=请提供密码,然后单击"下一步"继续。密码区分大小写。
PasswordEditLabel=&密码:
IncorrectPassword=您输入的密码不正确。请重试。
; *** "许可协议"向导页面
WizardLicense=许可协议
LicenseLabel=请在继续之前阅读以下重要信息。
LicenseLabel3=请阅读以下许可协议。您必须接受此协议的条款才能继续安装。
LicenseAccepted=我 &接受协议(&A)
LicenseNotAccepted=我 &不接受协议(&D)
; *** "信息"向导页面
WizardInfoBefore=信息
InfoBeforeLabel=请在继续之前阅读以下重要信息。
InfoBeforeClickLabel=当您准备好继续安装时,单击"下一步"。
WizardInfoAfter=信息
InfoAfterLabel=请在继续之前阅读以下重要信息。
InfoAfterClickLabel=当您准备好继续安装时,单击"下一步"。
; *** "用户信息"向导页面
WizardUserInfo=用户信息
UserInfoDesc=请输入您的信息。
UserInfoName=&用户名:
UserInfoOrg=&组织:
UserInfoSerial=&序列号:
UserInfoNameRequired=您必须输入名称。
; *** "选择目标位置"向导页面
WizardSelectDir=选择目标位置
SelectDirDesc=[name] 应该安装在哪里?
SelectDirLabel3=安装程序将把 [name] 安装到以下文件夹中。
SelectDirBrowseLabel=要继续,单击"下一步"。如果您想选择其他文件夹,单击"浏览"。
DiskSpaceGBLabel=至少需要 [gb] GB 的可用磁盘空间。
DiskSpaceMBLabel=至少需要 [mb] MB 的可用磁盘空间。
CannotInstallToNetworkDrive=安装程序无法安装到网络驱动器。
CannotInstallToUNCPath=安装程序无法安装到 UNC 路径。
InvalidPath=您必须输入带有驱动器号的完整路径;例如:%n%nC:\APP%n%n或 UNC 路径形式:%n%n\\server\share
InvalidDrive=您选择的驱动器或 UNC 共享不存在或无法访问。请选择另一个。
DiskSpaceWarningTitle=磁盘空间不足
DiskSpaceWarning=安装程序需要至少 %1 KB 的可用空间来安装,但所选驱动器只有 %2 KB 可用。%n%n您想继续吗?
DirNameTooLong=文件夹名称或路径太长。
InvalidDirName=文件夹名称无效。
BadDirName32=文件夹名称不能包含以下任何字符:%n%n%1
DirExistsTitle=文件夹已存在
DirExists=文件夹:%n%n%1%n%n已存在。您想安装到该文件夹吗?
DirDoesntExistTitle=文件夹不存在
DirDoesntExist=文件夹:%n%n%1%n%n不存在。您想创建该文件夹吗?
; *** "选择组件"向导页面
WizardSelectComponents=选择组件
SelectComponentsDesc=应该安装哪些组件?
SelectComponentsLabel2=选择要安装的组件;清除不想安装的组件。准备好后单击"下一步"。
FullInstallation=完全安装
; 如果可能,不要将"Compact"翻译为"最小"
CompactInstallation=紧凑安装
CustomInstallation=自定义安装
NoUninstallWarningTitle=组件已存在
NoUninstallWarning=安装程序检测到以下组件已安装在您的计算机上:%n%n%1%n%n取消选择这些组件不会卸载它们。%n%n您想继续吗?
ComponentSize1=%1 KB
ComponentSize2=%1 MB
ComponentsDiskSpaceGBLabel=当前选择需要至少 [gb] GB 的磁盘空间。
ComponentsDiskSpaceMBLabel=当前选择需要至少 [mb] MB 的磁盘空间。
; *** "选择其他任务"向导页面
WizardSelectTasks=选择其他任务
SelectTasksDesc=应该执行哪些其他任务?
SelectTasksLabel2=选择您希望安装程序在安装 [name] 时执行的其他任务,然后单击"下一步"。
; *** "选择开始菜单文件夹"向导页面
WizardSelectProgramGroup=选择开始菜单文件夹
SelectStartMenuFolderDesc=安装程序应该在哪里放置程序的快捷方式?
SelectStartMenuFolderLabel3=安装程序将在以下开始菜单文件夹中创建程序的快捷方式。
SelectStartMenuFolderBrowseLabel=要继续,单击"下一步"。如果您想选择其他文件夹,单击"浏览"。
MustEnterGroupName=您必须输入文件夹名称。
GroupNameTooLong=文件夹名称或路径太长。
InvalidGroupName=文件夹名称无效。
BadGroupName=文件夹名称不能包含以下任何字符:%n%n%1
NoProgramGroupCheck2=&不创建开始菜单文件夹
; *** "准备安装"向导页面
WizardReady=准备安装
ReadyLabel1=安装程序现在已准备好开始在您的计算机上安装 [name]。
ReadyLabel2a=单击"安装"继续安装,或单击"返回"如果您想查看或更改任何设置。
ReadyLabel2b=单击"安装"继续安装。
ReadyMemoUserInfo=用户信息:
ReadyMemoDir=目标位置:
ReadyMemoType=安装类型:
ReadyMemoComponents=选定的组件:
ReadyMemoGroup=开始菜单文件夹:
ReadyMemoTasks=其他任务:
; *** TDownloadWizardPage 向导页面和 DownloadTemporaryFile
DownloadingLabel2=正在下载文件...
ButtonStopDownload=&停止下载
StopDownload=您确定要停止下载吗?
ErrorDownloadAborted=下载已中止
ErrorDownloadFailed=下载失败:%1 %2
ErrorDownloadSizeFailed=获取大小失败:%1 %2
ErrorProgress=无效的进度:%1 / %2
ErrorFileSize=无效的文件大小:预期 %1,找到 %2
; *** TExtractionWizardPage 向导页面和 ExtractArchive
ExtractingLabel=正在提取文件...
ButtonStopExtraction=&停止提取
StopExtraction=您确定要停止提取吗?
ErrorExtractionAborted=提取已中止
ErrorExtractionFailed=提取失败:%1
; *** 存档提取失败详情
ArchiveIncorrectPassword=密码不正确
ArchiveIsCorrupted=存档已损坏
ArchiveUnsupportedFormat=不支持的存档格式
; *** "准备安装"向导页面
WizardPreparing=准备安装
PreparingDesc=安装程序正在准备在您的计算机上安装 [name]。
PreviousInstallNotCompleted=之前程序的安装/删除未完成。您需要重新启动计算机以完成该安装。%n%n重新启动计算机后,再次运行安装程序以完成 [name] 的安装。
CannotContinue=安装程序无法继续。请单击"取消"退出。
ApplicationsFound=以下应用程序正在使用需要由安装程序更新的文件。建议您允许安装程序自动关闭这些应用程序。
ApplicationsFound2=以下应用程序正在使用需要由安装程序更新的文件。建议您允许安装程序自动关闭这些应用程序。安装完成后,安装程序将尝试重新启动应用程序。
CloseApplications=&自动关闭应用程序
DontCloseApplications=&不关闭应用程序
ErrorCloseApplications=安装程序无法自动关闭所有应用程序。建议您在继续之前关闭所有使用需要由安装程序更新的文件的应用程序。
PrepareToInstallNeedsRestart=安装程序必须重新启动您的计算机。重新启动计算机后,再次运行安装程序以完成 [name] 的安装。%n%n您想立即重新启动吗?
; *** "安装"向导页面
WizardInstalling=安装
InstallingLabel=请等待安装程序在您的计算机上安装 [name]。
; *** "安装完成"向导页面
FinishedHeadingLabel=完成 [name] 安装向导
FinishedLabelNoIcons=安装程序已完成在您的计算机上安装 [name]。
FinishedLabel=安装程序已完成在您的计算机上安装 [name]。可以通过选择已安装的快捷方式来启动应用程序。
ClickFinish=单击"完成"退出安装。
FinishedRestartLabel=要完成 [name] 的安装,安装程序必须重新启动您的计算机。您想立即重新启动吗?
FinishedRestartMessage=要完成 [name] 的安装,安装程序必须重新启动您的计算机。%n%n您想立即重新启动吗?
ShowReadmeCheck=是的,我想查看 README 文件
YesRadio=&是的,立即重新启动计算机
NoRadio=&否,我稍后重新启动计算机
; 用于例如"运行 MyProg.exe"
RunEntryExec=运行 %1
; 用于例如"查看 Readme.txt"
RunEntryShellExec=查看 %1
; *** "安装程序需要下一张磁盘"内容
ChangeDiskTitle=安装程序需要下一张磁盘
SelectDiskLabel2=请插入磁盘 %1 并单击"确定"。%n%n如果此磁盘上的文件可以在下面显示的文件夹以外的其他文件夹中找到,请输入正确的路径或单击"浏览"。
PathLabel=&路径:
FileNotInDir2=文件"%1"无法在"%2"中找到。请插入正确的磁盘或选择另一个文件夹。
SelectDirectoryLabel=请指定下一张磁盘的位置。
; *** 安装阶段消息
SetupAborted=安装未完成。%n%n请更正问题并再次运行安装程序。
AbortRetryIgnoreSelectAction=选择操作
AbortRetryIgnoreRetry=&重试
AbortRetryIgnoreIgnore=&忽略错误并继续
AbortRetryIgnoreCancel=取消安装
RetryCancelSelectAction=选择操作
RetryCancelRetry=&重试
RetryCancelCancel=取消
; *** 安装状态消息
StatusClosingApplications=正在关闭应用程序...
StatusCreateDirs=正在创建目录...
StatusExtractFiles=正在提取文件...
StatusDownloadFiles=正在下载文件...
StatusCreateIcons=正在创建快捷方式...
StatusCreateIniEntries=正在创建 INI 条目...
StatusCreateRegistryEntries=正在创建注册表条目...
StatusRegisterFiles=正在注册文件...
StatusSavingUninstall=正在保存卸载信息...
StatusRunProgram=完成安装...
StatusRestartingApplications=正在重新启动应用程序...
StatusRollback=正在回滚更改...
; *** 杂项错误
ErrorInternal2=内部错误:%1
ErrorFunctionFailedNoCode=%1 失败
ErrorFunctionFailed=%1 失败;代码 %2
ErrorFunctionFailedWithMessage=%1 失败;代码 %2。%n%3
ErrorExecutingProgram=无法执行文件:%n%1
; *** 注册表错误
ErrorRegOpenKey=打开注册表项时出错:%n%1\%2
ErrorRegCreateKey=创建注册表项时出错:%n%1\%2
ErrorRegWriteKey=写入注册表项时出错:%n%1\%2
; *** INI 错误
ErrorIniEntry=在文件"%1"中创建 INI 条目时出错。
; *** 文件复制错误
FileAbortRetryIgnoreSkipNotRecommended=&跳过此文件(不推荐)
FileAbortRetryIgnoreIgnoreNotRecommended=&忽略错误并继续(不推荐)
SourceIsCorrupted=源文件已损坏
SourceDoesntExist=源文件"%1"不存在
SourceVerificationFailed=源文件验证失败:%1
VerificationSignatureDoesntExist=签名文件"%1"不存在
VerificationSignatureInvalid=签名文件"%1"无效
VerificationKeyNotFound=签名文件"%1"使用未知密钥
VerificationFileNameIncorrect=文件名不正确
VerificationFileTagIncorrect=文件标记不正确
VerificationFileSizeIncorrect=文件大小不正确
VerificationFileHashIncorrect=文件哈希不正确
ExistingFileReadOnly2=无法替换现有文件,因为它被标记为只读。
ExistingFileReadOnlyRetry=&删除只读属性并重试
ExistingFileReadOnlyKeepExisting=&保留现有文件
ErrorReadingExistingDest=尝试读取现有文件时出错:
FileExistsSelectAction=选择操作
FileExists2=文件已存在。
FileExistsOverwriteExisting=&覆盖现有文件
FileExistsKeepExisting=&保留现有文件
FileExistsOverwriteOrKeepAll=&对后续冲突执行此操作
ExistingFileNewerSelectAction=选择操作
ExistingFileNewer2=现有文件比安装程序尝试安装的文件更新。
ExistingFileNewerOverwriteExisting=&覆盖现有文件
ExistingFileNewerKeepExisting=&保留现有文件(推荐)
ExistingFileNewerOverwriteOrKeepAll=&对后续冲突执行此操作
ErrorChangingAttr=尝试更改现有文件的属性时出错:
ErrorCreatingTemp=尝试在目标目录中创建文件时出错:
ErrorReadingSource=尝试读取源文件时出错:
ErrorCopying=尝试复制文件时出错:
ErrorDownloading=尝试下载文件时出错:
ErrorExtracting=尝试提取存档时出错:
ErrorReplacingExistingFile=尝试替换现有文件时出错:
ErrorRestartReplace=RestartReplace 失败:
ErrorRenamingTemp=尝试在目标目录中重命名文件时出错:
ErrorRegisterServer=无法注册 DLL/OCX:%1
ErrorRegSvr32Failed=RegSvr32 失败,退出代码 %1
ErrorRegisterTypeLib=无法注册类型库:%1
; *** 卸载显示名称标记
; 用于例如"我的程序 (32 位)"
UninstallDisplayNameMark=%1 (%2)
; 用于例如"我的程序 (32 位,所有用户)"
UninstallDisplayNameMarks=%1 (%2, %3)
UninstallDisplayNameMark32Bit=32 位
UninstallDisplayNameMark64Bit=64 位
UninstallDisplayNameMarkAllUsers=所有用户
UninstallDisplayNameMarkCurrentUser=当前用户
; *** 安装后错误
ErrorOpeningReadme=尝试打开 README 文件时出错。
ErrorRestartingComputer=安装程序无法重新启动计算机。请手动执行此操作。
; *** 卸载程序消息
UninstallNotFound=文件"%1"不存在。无法卸载。
UninstallOpenError=文件"%1"无法打开。无法卸载
UninstallUnsupportedVer=卸载日志文件"%1"的格式不被此版本的卸载程序识别。无法卸载
UninstallUnknownEntry=在卸载日志中遇到未知条目 (%1)
ConfirmUninstall=您确定要完全删除 %1 及其所有组件吗?
UninstallOnlyOnWin64=此安装只能在 64 位 Windows 上卸载。
OnlyAdminCanUninstall=此安装只能由具有管理员权限的用户卸载。
UninstallStatusLabel=请等待 %1 从您的计算机中删除。
UninstalledAll=%1 已成功从您的计算机中删除。
UninstalledMost=%1 卸载完成。%n%n某些元素无法删除。这些可以手动删除。
UninstalledAndNeedsRestart=要完成 %1 的卸载,必须重新启动您的计算机。%n%n您想立即重新启动吗?
UninstallDataCorrupted="%1"文件已损坏。无法卸载
; *** 卸载阶段消息
ConfirmDeleteSharedFileTitle=删除共享文件?
ConfirmDeleteSharedFile2=系统指示以下共享文件不再被任何程序使用。您想让卸载程序删除此共享文件吗?%n%n如果任何程序仍在使用此文件并将其删除,这些程序可能无法正常运行。如果您不确定,请选择"否"。将文件保留在系统上不会造成任何伤害。
SharedFileNameLabel=文件名:
SharedFileLocationLabel=位置:
WizardUninstalling=卸载状态
StatusUninstalling=正在卸载 %1...
; *** 关闭阻止原因
ShutdownBlockReasonInstallingApp=正在安装 %1。
ShutdownBlockReasonUninstallingApp=正在卸载 %1。
; 下面的自定义消息不被安装程序本身使用,但如果您在
; 脚本中使用它们,您需要翻译它们。
[CustomMessages]
NameAndVersion=%1 版本 %2
AdditionalIcons=其他快捷方式:
CreateDesktopIcon=创建 &桌面快捷方式
CreateQuickLaunchIcon=创建 &快速启动快捷方式
ProgramOnTheWeb=%1 网站
UninstallProgram=卸载 %1
LaunchProgram=启动 %1
AssocFileExtension=&将 %1 与 %2 文件扩展名关联
AssocingFileExtension=正在将 %1 与 %2 文件扩展名关联...
AutoStartProgramGroupDescription=启动:
AutoStartProgram=自动启动 %1
AddonHostProgramNotFound=在您选择的文件夹中找不到 %1。%n%n您想继续吗?
================================================
FILE: Assets/Icon.ai
================================================
%PDF-1.5
%
1 0 obj
<>/OCGs[28 0 R 29 0 R 31 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
application/pdf
Icon
Adobe Illustrator 26.2 (Windows)
2025-03-14T22:47:45+09:00
2025-03-14T22:47:46+08:00
2025-03-14T22:47:46+08:00
256
200
JPEG
/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAyAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F
XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
q7FXYq7FXYq7FXYq7FXYq7FXYq7FVC9ujbQGYJ6gUjkK0oDtXocsxw4jTRqM3hx4qtC2+u2chCvW
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
uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7
xmp.did:d5f62d1b-7efe-4d05-b1f8-644cb847dfa0
uuid:81d003dd-8fcc-47a2-b243-c3815ba123fd
proof:pdf
uuid:419d3a9b-55bd-cb4b-8139-14cb80982081
xmp.did:834d4cc7-02d9-4757-a180-d79ec67c6416
uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7
proof:pdf
saved
xmp.iid:d5f62d1b-7efe-4d05-b1f8-644cb847dfa0
2025-03-14T22:23:46+08:00
Adobe Illustrator 29.3 (Macintosh)
/
EmbedByReference
empty_icon.png
empty_icon.png
Basic RGB
Document
AIRobin
1
False
False
512.000000
512.000000
Pixels
Cyan
Magenta
Yellow
默认色板组
0
白色
RGB
PROCESS
255
255
255
黑色
RGB
PROCESS
0
0
0
RGB 红
RGB
PROCESS
255
0
0
RGB 黄
RGB
PROCESS
255
255
0
RGB 绿
RGB
PROCESS
0
255
0
RGB 青
RGB
PROCESS
0
255
255
RGB 蓝
RGB
PROCESS
0
0
255
RGB 洋红
RGB
PROCESS
255
0
255
R=193 G=39 B=45
RGB
PROCESS
193
39
45
R=237 G=28 B=36
RGB
PROCESS
237
28
36
R=241 G=90 B=36
RGB
PROCESS
241
90
36
R=247 G=147 B=30
RGB
PROCESS
247
147
30
R=251 G=176 B=59
RGB
PROCESS
251
176
59
R=252 G=238 B=33
RGB
PROCESS
252
238
33
R=217 G=224 B=33
RGB
PROCESS
217
224
33
R=140 G=198 B=63
RGB
PROCESS
140
198
63
R=57 G=181 B=74
RGB
PROCESS
57
181
74
R=0 G=146 B=69
RGB
PROCESS
0
146
69
R=0 G=104 B=55
RGB
PROCESS
0
104
55
R=34 G=181 B=115
RGB
PROCESS
34
181
115
R=0 G=169 B=157
RGB
PROCESS
0
169
157
R=41 G=171 B=226
RGB
PROCESS
41
171
226
R=0 G=113 B=188
RGB
PROCESS
0
113
188
R=46 G=49 B=146
RGB
PROCESS
46
49
146
R=27 G=20 B=100
RGB
PROCESS
27
20
100
R=102 G=45 B=145
RGB
PROCESS
102
45
145
R=147 G=39 B=143
RGB
PROCESS
147
39
143
R=158 G=0 B=93
RGB
PROCESS
158
0
93
R=212 G=20 B=90
RGB
PROCESS
212
20
90
R=237 G=30 B=121
RGB
PROCESS
237
30
121
R=199 G=178 B=153
RGB
PROCESS
199
178
153
R=153 G=134 B=117
RGB
PROCESS
153
134
117
R=115 G=99 B=87
RGB
PROCESS
115
99
87
R=83 G=71 B=65
RGB
PROCESS
83
71
65
R=198 G=156 B=109
RGB
PROCESS
198
156
109
R=166 G=124 B=82
RGB
PROCESS
166
124
82
R=140 G=98 B=57
RGB
PROCESS
140
98
57
R=117 G=76 B=36
RGB
PROCESS
117
76
36
R=96 G=56 B=19
RGB
PROCESS
96
56
19
R=66 G=33 B=11
RGB
PROCESS
66
33
11
冷光
1
C=56 M=0 Y=20 K=0
RGB
PROCESS
101
200
208
C=51 M=43 Y=0 K=0
RGB
PROCESS
131
139
197
C=26 M=41 Y=0 K=0
RGB
PROCESS
186
155
201
灰色
1
R=0 G=0 B=0
RGB
PROCESS
0
0
0
R=26 G=26 B=26
RGB
PROCESS
26
26
26
R=51 G=51 B=51
RGB
PROCESS
51
51
51
R=77 G=77 B=77
RGB
PROCESS
77
77
77
R=102 G=102 B=102
RGB
PROCESS
102
102
102
R=128 G=128 B=128
RGB
PROCESS
128
128
128
R=153 G=153 B=153
RGB
PROCESS
153
153
153
R=179 G=179 B=179
RGB
PROCESS
179
179
179
R=204 G=204 B=204
RGB
PROCESS
204
204
204
R=230 G=230 B=230
RGB
PROCESS
230
230
230
R=242 G=242 B=242
RGB
PROCESS
242
242
242
Adobe PDF library 16.04
endstream
endobj
3 0 obj
<>
endobj
5 0 obj
<>/Resources<>/ExtGState<>/Properties<>/XObject<>>>/Thumb 38 0 R/TrimBox[0.0 0.0 512.0 512.0]/Type/Page>>
endobj
33 0 obj
<>stream
HTn1)㍝Nl"qFRPo̊O|6oN%8ٞ˜:m_.iokK]YEnұr{>mR)4xiW,'k{4 xwS~xU'߰q#W#W^RY -]jp5yOzAkTpdАx#q;OL0
m8Zh4|䇴h1J8`
tK36} gV9Wv$T+)Ri9d4ڈ7OAkiA7b a4 v@ !bhS+JA.P\=(9Ed2vAVql`!4)5c1
+N @5)aL$"P9TXՂ:s"}\({l4dZT iI䬵-y8A߶,`2<# \F@F+b _PE^0Rd2 7Ɗ@ 3K
V z!.6AhX8?>J02R{[KLxŪBV=J"BV,Ց<7?*5^@L4"112UT#\f`z"ץD=f#0wB}ލ͊Pׁw̶U Hj-!Ej8Hc|GX}n?ly0Iǎ@Yz^ 9kΜ&i~Nr^}/ r[
endstream
endobj
38 0 obj
<>stream
8;Z\s40AZ/$q1t$W`8L@VFm2_$rjPF.V:DOkF"OO!mF<[:AfKKSt=G-kS\@`>MT
(]:');k2jBrl9L8:f;:EIi\G$W(Y[Qgf9FOgucTD.E1QB693*#8_/H&IKCd]\Sf[n
e6I8oDo?PKHSG*nWCUpn)*F9ofEo7UD^TKVN4TaL`Ad_1jrH]mUu/$5T6\dpGZFB.
4rHD3'23WNGBc[DJEr70pcI\a!:Tuep
endstream
endobj
39 0 obj
[/Indexed/DeviceRGB 255 40 0 R]
endobj
40 0 obj
<>stream
8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn
6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O(
l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
37 0 obj
<>/Subtype/Form>>stream
endstream
endobj
41 0 obj
<>
endobj
28 0 obj
<