From d7a47b08277355353fffd96c37389cc33d47348a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E6=80=A1=E9=A3=9E?= <363301617@qq.com> Date: Wed, 13 Nov 2024 22:10:05 +0800 Subject: [PATCH] Fix store app check and update bug Fix store app check and update bug --- Description/README_EN-US.md | 2 +- Description/README_ZH-CN.md | 2 +- GetStoreApp/GetStoreApp.csproj | 6 +- GetStoreApp/GetStoreApp.res | Bin 438036 -> 438036 bytes GetStoreApp/Properties/AssemblyInfo.cs | 6 +- GetStoreApp/Views/Pages/AppUpdatePage.xaml.cs | 153 +++++++++++++----- GetStoreAppInstaller/GetStoreAppInstaller.res | Bin 438072 -> 438072 bytes .../Properties/AssemblyInfo.cs | 6 +- GetStoreAppPackage/Package.appxmanifest | 2 +- .../Properties/AssemblyInfo.cs | 6 +- GetStoreAppWebView/GetStoreAppWebView.res | Bin 438104 -> 438104 bytes GetStoreAppWidget/GetStoreAppWidget.csproj | 2 +- GetStoreAppWidget/GetStoreAppWidget.res | Bin 438060 -> 438060 bytes GetStoreAppWidget/Properties/AssemblyInfo.cs | 6 +- .../Properties/AssemblyInfo.cs | 6 +- .../Properties/AssemblyInfo.cs | 6 +- README.md | 2 +- 17 files changed, 143 insertions(+), 62 deletions(-) diff --git a/Description/README_EN-US.md b/Description/README_EN-US.md index c38bd0e89..ece89235f 100644 --- a/Description/README_EN-US.md +++ b/Description/README_EN-US.md @@ -163,7 +163,7 @@ All the content of the program has been developed > * Complete the translation steps described above to ensure that all steps run smoothly. > * Open the GetStoreAppPackage packaging project, find the Package.appxmanifest file, right-click the file, click View Code, find the Sources tab, and add the corresponding language according to the template, such as "". > * Open the Strings folder of the GetStoreApp project and create the language you are using, for example ( English (United States) folder name is en-us , you can refer to the Table of Indicating Language (Culture) Codes and Countries and Regions) -> * Open the resw file under the subfolder and translate each name. +> * Open the resjson file under the subfolder and translate each name. > * Compile and run the code and test your language, when the application is first opened if there is no language you use to display English (United States) by default, it needs to be dynamically adjusted in the settings. > * Create a PR after completing the above steps, then submit the modified content to this project and wait for the merge. diff --git a/Description/README_ZH-CN.md b/Description/README_ZH-CN.md index 3336590a6..455ae59b1 100644 --- a/Description/README_ZH-CN.md +++ b/Description/README_ZH-CN.md @@ -159,7 +159,7 @@ > * 完成上面所述的翻译步骤,确保所有步骤能够顺利运行。 > * 打开 GetStoreAppPackage 打包项目,找到 Package.appxmanifest 文件,右键该文件,点击查看代码,找到 Resources 标签,根据模板添加相对应的语言,例如“”。 > * 打开 GetStoreApp 项目的 Strings 文件夹,并创建您使用的语言,比如(English(United States))文件夹名称为 en-us,具体可以参考表示语言(文化)代码与国家地区对照表)。 -> * 打开子文件夹下的 resw 文件,对每一个名称进行翻译。 +> * 打开子文件夹下的 resjson 文件,对每一个名称进行翻译。 > * 编译运行代码并测试您的语言,应用在初次打开的时候如果没有您使用的语言默认显示 English(United States),需要在设置中动态调整。 > * 完成上述步骤后创建 PR,然后将修改的内容提交到本项目,等待合并即可。 diff --git a/GetStoreApp/GetStoreApp.csproj b/GetStoreApp/GetStoreApp.csproj index ce897b6bd..a154f0318 100644 --- a/GetStoreApp/GetStoreApp.csproj +++ b/GetStoreApp/GetStoreApp.csproj @@ -10,14 +10,14 @@ true false false - true + false false false disable false false true - preview + latest false false Size @@ -233,7 +233,7 @@ - + diff --git a/GetStoreApp/GetStoreApp.res b/GetStoreApp/GetStoreApp.res index e0090b9c59f4e777a1c013ae7a95926e8f033305..60ff1be575591ead87bd1baecbe523aa6c5caf1f 100644 GIT binary patch delta 65 zcmbPoPio3NsfHHD7N!>F7M2#)Eo@4&I3rmY8CV$@7$T=@&tmIkHe@iKzIztiUJzq@ Q^=!6MMlkF195zKE0FNOP5&!@I delta 65 zcmbPoPio3NsfHHD7N!>F7M2#)Eo@4&ID=Ri8CV$@7=os2&tmIkHefKDzIztiUJzq@ Q^=!6MMlkF195zKE0F7M}3IG5A diff --git a/GetStoreApp/Properties/AssemblyInfo.cs b/GetStoreApp/Properties/AssemblyInfo.cs index feecd5743..71908172c 100644 --- a/GetStoreApp/Properties/AssemblyInfo.cs +++ b/GetStoreApp/Properties/AssemblyInfo.cs @@ -7,11 +7,11 @@ [assembly: AssemblyCompany("高怡飞")] [assembly: AssemblyCopyright("Copyright ©2022-2024 高怡飞, All Rights Reserved.")] [assembly: AssemblyDescription("获取商店应用")] -[assembly: AssemblyFileVersion("5.1.1106.0")] -[assembly: AssemblyInformationalVersion("5.1.1106.0")] +[assembly: AssemblyFileVersion("5.1.1113.0")] +[assembly: AssemblyInformationalVersion("5.1.1113.0")] [assembly: AssemblyProduct("获取商店应用")] [assembly: AssemblyTitle("获取商店应用")] -[assembly: AssemblyVersion("5.1.1106.0")] +[assembly: AssemblyVersion("5.1.1113.0")] // 应用程序默认区域性的资源控制器设置 [assembly: NeutralResourcesLanguage("en-us")] diff --git a/GetStoreApp/Views/Pages/AppUpdatePage.xaml.cs b/GetStoreApp/Views/Pages/AppUpdatePage.xaml.cs index 7583de817..9fd2556b9 100644 --- a/GetStoreApp/Views/Pages/AppUpdatePage.xaml.cs +++ b/GetStoreApp/Views/Pages/AppUpdatePage.xaml.cs @@ -9,6 +9,8 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; +using System.Runtime.InteropServices.Marshalling; +using System.Threading; using System.Threading.Tasks; using Windows.ApplicationModel; using Windows.ApplicationModel.Store.Preview.InstallControl; @@ -42,6 +44,7 @@ public sealed partial class AppUpdatePage : Page, INotifyPropertyChanged private readonly AppInstallManager appInstallManager = new(); private readonly PackageManager packageManager = new(); + private readonly Lock appinstallingLock = new(); private readonly Dictionary AppInstallingDict = []; private string AppUpdateCountInfo { get; } = ResourceService.GetLocalized("AppUpdate/AppUpdateCountInfo"); @@ -134,12 +137,25 @@ await Task.Run(async () => LogService.WriteLog(LoggingLevel.Error, string.Format("Update app failed: package family name {0}", appUpdateItem.PackageFamilyName), e); } - if (appInstallItem is not null) + appinstallingLock.Enter(); + + try { - appInstallItem.StatusChanged += OnAppInstallItemStatausChanged; - appInstallItem.Completed += OnAppInstallItemCompleted; + if (appInstallItem is not null && !AppInstallingDict.ContainsKey(appInstallItem.PackageFamilyName)) + { + appInstallItem.StatusChanged += OnAppInstallItemStatausChanged; + appInstallItem.Completed += OnAppInstallItemCompleted; - AppInstallingDict.TryAdd(appInstallItem.PackageFamilyName, appInstallItem); + AppInstallingDict.TryAdd(appInstallItem.PackageFamilyName, appInstallItem); + } + } + catch (Exception e) + { + ExceptionAsVoidMarshaller.ConvertToUnmanaged(e); + } + finally + { + appinstallingLock.Exit(); } }); @@ -158,20 +174,33 @@ private async void OnCancelExecuteRequested(XamlUICommand sender, ExecuteRequest { await Task.Run(() => { - if (AppInstallingDict.TryGetValue(packageFamilyName, out AppInstallItem appInstallItem)) + appinstallingLock.Enter(); + + try { - try - { - appInstallItem.Completed -= OnAppInstallItemCompleted; - appInstallItem.StatusChanged -= OnAppInstallItemStatausChanged; - appInstallItem.Cancel(); - } - catch (Exception e) + if (AppInstallingDict.TryGetValue(packageFamilyName, out AppInstallItem appInstallItem)) { - LogService.WriteLog(LoggingLevel.Error, "Store app cancel install failed", e); - } + try + { + appInstallItem.Completed -= OnAppInstallItemCompleted; + appInstallItem.StatusChanged -= OnAppInstallItemStatausChanged; + appInstallItem.Cancel(); + } + catch (Exception e) + { + LogService.WriteLog(LoggingLevel.Error, "Store app cancel install failed", e); + } - AppInstallingDict.Remove(packageFamilyName); + AppInstallingDict.Remove(packageFamilyName); + } + } + catch (Exception e) + { + ExceptionAsVoidMarshaller.ConvertToUnmanaged(e); + } + finally + { + appinstallingLock.Exit(); } }); @@ -230,13 +259,13 @@ await Task.Run(async () => }; IReadOnlyList upgradableAppsList = await appInstallManager.SearchForAllUpdatesAsync(string.Empty, string.Empty, updateOptions); - foreach (AppInstallItem upgradableApps in upgradableAppsList) + foreach (AppInstallItem upgradableAppItem in upgradableAppsList) { // 判断是否已经添加到 AppUpdateCollection 中,没有则添加 bool isExisted = false; foreach (AppUpdateModel appUpdateItem in AppUpdateCollection) { - if (appUpdateItem.PackageFamilyName.Equals(upgradableApps.PackageFamilyName)) + if (appUpdateItem.PackageFamilyName.Equals(upgradableAppItem.PackageFamilyName)) { isExisted = true; } @@ -246,9 +275,9 @@ await Task.Run(async () => { foreach (Package packageItem in packageManager.FindPackagesForUser(string.Empty)) { - if (packageItem.Id.FamilyName.Equals(upgradableApps.PackageFamilyName, StringComparison.OrdinalIgnoreCase)) + if (packageItem.Id.FamilyName.Equals(upgradableAppItem.PackageFamilyName, StringComparison.OrdinalIgnoreCase)) { - AppInstallStatus appInstallStatus = upgradableApps.GetCurrentStatus(); + AppInstallStatus appInstallStatus = upgradableAppItem.GetCurrentStatus(); string installInformation = GetInstallInformation(appInstallStatus.InstallState, appInstallStatus); string installSubInformation = string.Format(InstallingSubInformation, FileSizeHelper.ConvertFileSizeToString(appInstallStatus.DownloadSizeInBytes), FileSizeHelper.ConvertFileSizeToString(appInstallStatus.BytesDownloaded)); @@ -261,13 +290,35 @@ await Task.Run(async () => InstallSubInformation = installSubInformation, IsUpdating = appInstallStatus.InstallState is AppInstallState.Pending || appInstallStatus.InstallState is AppInstallState.Starting || + appInstallStatus.InstallState is AppInstallState.AcquiringLicense || appInstallStatus.InstallState is AppInstallState.Downloading || appInstallStatus.InstallState is AppInstallState.RestoringData || appInstallStatus.InstallState is AppInstallState.Installing, - PackageFamilyName = upgradableApps.PackageFamilyName, + PackageFamilyName = upgradableAppItem.PackageFamilyName, PercentComplete = appInstallStatus.PercentComplete, - ProductId = upgradableApps.ProductId + ProductId = upgradableAppItem.ProductId }); + + appinstallingLock.Enter(); + + try + { + if (upgradableAppItem is not null && !AppInstallingDict.ContainsKey(upgradableAppItem.PackageFamilyName)) + { + upgradableAppItem.StatusChanged += OnAppInstallItemStatausChanged; + upgradableAppItem.Completed += OnAppInstallItemCompleted; + + AppInstallingDict.TryAdd(upgradableAppItem.PackageFamilyName, upgradableAppItem); + } + } + catch (Exception e) + { + ExceptionAsVoidMarshaller.ConvertToUnmanaged(e); + } + finally + { + appinstallingLock.Exit(); + } break; } } @@ -311,12 +362,25 @@ private void OnUpdateAllClicked(object sender, RoutedEventArgs args) { AppInstallItem appInstallItem = await appInstallManager.UpdateAppByPackageFamilyNameAsync(appUpdateItem.PackageFamilyName); - if (appInstallItem is not null && !AppInstallingDict.ContainsKey(appInstallItem.PackageFamilyName)) + appinstallingLock.Enter(); + + try { - appInstallItem.Completed += OnAppInstallItemCompleted; - appInstallItem.StatusChanged += OnAppInstallItemStatausChanged; + if (appInstallItem is not null && !AppInstallingDict.ContainsKey(appInstallItem.PackageFamilyName)) + { + appInstallItem.StatusChanged += OnAppInstallItemStatausChanged; + appInstallItem.Completed += OnAppInstallItemCompleted; - AppInstallingDict.TryAdd(appInstallItem.PackageFamilyName, appInstallItem); + AppInstallingDict.TryAdd(appInstallItem.PackageFamilyName, appInstallItem); + } + } + catch (Exception e) + { + ExceptionAsVoidMarshaller.ConvertToUnmanaged(e); + } + finally + { + appinstallingLock.Exit(); } } }); @@ -334,13 +398,30 @@ private void OnAppInstallItemCompleted(AppInstallItem sender, object args) sender.Completed -= OnAppInstallItemCompleted; sender.StatusChanged -= OnAppInstallItemStatausChanged; - AppInstallingDict.Remove(appUpdateItem.PackageFamilyName); + appinstallingLock.Enter(); + + try + { + AppInstallingDict.Remove(appUpdateItem.PackageFamilyName); + } + catch (Exception e) + { + ExceptionAsVoidMarshaller.ConvertToUnmanaged(e); + } + finally + { + appinstallingLock.Exit(); + } // 显示商店应用更新成功通知 - AppNotificationBuilder appNotificationBuilder = new(); - appNotificationBuilder.AddArgument("action", "OpenApp"); - appNotificationBuilder.AddText(string.Format(ResourceService.GetLocalized("Notification/AppUpdateSuccessfully"), appUpdateItem.DisplayName)); - ToastNotificationService.Show(appNotificationBuilder.BuildNotification()); + if (appUpdateItem.AppInstallState is AppInstallState.Completed) + { + AppNotificationBuilder appNotificationBuilder = new(); + appNotificationBuilder.AddArgument("action", "OpenApp"); + appNotificationBuilder.AddText(string.Format(ResourceService.GetLocalized("Notification/AppUpdateSuccessfully"), appUpdateItem.DisplayName)); + ToastNotificationService.Show(appNotificationBuilder.BuildNotification()); + } + break; } } @@ -404,12 +485,12 @@ await Task.Run(() => appUpdateItem.PercentComplete = appInstallStatus.PercentComplete; appUpdateItem.InstallInformation = installInformation; appUpdateItem.InstallSubInformation = installSubInformation; - appUpdateItem.IsUpdating = !(appInstallStatus.InstallState is AppInstallState.Canceled || - appInstallStatus.InstallState is AppInstallState.Error || - appInstallStatus.InstallState is AppInstallState.Paused || - appInstallStatus.InstallState is AppInstallState.PausedLowBattery || - appInstallStatus.InstallState is AppInstallState.PausedWiFiRecommended || - appInstallStatus.InstallState is AppInstallState.PausedWiFiRequired); + appUpdateItem.IsUpdating = appInstallStatus.InstallState is AppInstallState.Pending || + appInstallStatus.InstallState is AppInstallState.Starting || + appInstallStatus.InstallState is AppInstallState.AcquiringLicense || + appInstallStatus.InstallState is AppInstallState.Downloading || + appInstallStatus.InstallState is AppInstallState.RestoringData || + appInstallStatus.InstallState is AppInstallState.Installing; } } } diff --git a/GetStoreAppInstaller/GetStoreAppInstaller.res b/GetStoreAppInstaller/GetStoreAppInstaller.res index 253dd7ce696231c5f6386d532143a4833bfda9c8..5480f3f9b500a236dec140178825575f5c6c3a5a 100644 GIT binary patch delta 65 zcmdmSPin_KsfHHD7N!>F7M2#)Eo@4&I3rmY8CV$@7$T=@&tmIkHe@iKzIztiRS;wQ QF7M2#)Eo@4&ID=Ri8CV$@7=os2&tmIkHefKDzIztiRS;wQ Q + Version="5.1.1113.0" /> ms-resource:PackageDisplayName diff --git a/GetStoreAppShellExtension/Properties/AssemblyInfo.cs b/GetStoreAppShellExtension/Properties/AssemblyInfo.cs index 2a7d74bbd..c8ec9bc4b 100644 --- a/GetStoreAppShellExtension/Properties/AssemblyInfo.cs +++ b/GetStoreAppShellExtension/Properties/AssemblyInfo.cs @@ -7,11 +7,11 @@ [assembly: AssemblyCompany("高怡飞")] [assembly: AssemblyCopyright("Copyright ©2022-2024 高怡飞, All Rights Reserved.")] [assembly: AssemblyDescription("获取商店应用 右键菜单扩展")] -[assembly: AssemblyFileVersion("5.1.1106.0")] -[assembly: AssemblyInformationalVersion("5.1.1106.0")] +[assembly: AssemblyFileVersion("5.1.1113.0")] +[assembly: AssemblyInformationalVersion("5.1.1113.0")] [assembly: AssemblyProduct("获取商店应用 右键菜单扩展")] [assembly: AssemblyTitle("获取商店应用 右键菜单扩展")] -[assembly: AssemblyVersion("5.1.1106.0")] +[assembly: AssemblyVersion("5.1.1113.0")] // 应用程序默认区域性的资源控制器设置 [assembly: NeutralResourcesLanguage("en-us")] diff --git a/GetStoreAppWebView/GetStoreAppWebView.res b/GetStoreAppWebView/GetStoreAppWebView.res index c1574fabd764a5a633302f4408c9c83b98d7f55b..12c10316333b2b7e37619e3df3630a382c436392 100644 GIT binary patch delta 65 zcmca{PwK`!sfHHD7N!>F7M2#)Eo@4&I3rmY8CV$@7$T=@&tmIkHe@iKzIztiRS;wQ Q`xonC;0J5bMI{*Lx delta 65 zcmca{PwK`!sfHHD7N!>F7M2#)Eo@4&ID=Ri8CV$@7=os2&tmIkHefKDzIztiRS;wQ Q`xonC;0I=Z`GXMYp diff --git a/GetStoreAppWidget/GetStoreAppWidget.csproj b/GetStoreAppWidget/GetStoreAppWidget.csproj index 2b5f0f953..6123e50bf 100644 --- a/GetStoreAppWidget/GetStoreAppWidget.csproj +++ b/GetStoreAppWidget/GetStoreAppWidget.csproj @@ -73,7 +73,7 @@ - + diff --git a/GetStoreAppWidget/GetStoreAppWidget.res b/GetStoreAppWidget/GetStoreAppWidget.res index 7d8c07e2fe4ec783835abfc236fe8bc9bf9a080a..3074bca5bfa287e12d92cbc91548a6d63b7a2f56 100644 GIT binary patch delta 65 zcmZ2;PioCQsfHHD7N!>F7M2#)Eo@4&I3rmY8CV$@7$T=@&tmIkHe@iKzIztiSrB7; Q_iVOWMlg$eE}Nnd0GTBcg8%>k delta 65 zcmZ2;PioCQsfHHD7N!>F7M2#)Eo@4&ID=Ri8CV$@7=os2&tmIkHefKDzIztiSrB7; Q_iVOWMlg$eE}Nnd0GDABdjJ3c diff --git a/GetStoreAppWidget/Properties/AssemblyInfo.cs b/GetStoreAppWidget/Properties/AssemblyInfo.cs index d4b85a983..07c279213 100644 --- a/GetStoreAppWidget/Properties/AssemblyInfo.cs +++ b/GetStoreAppWidget/Properties/AssemblyInfo.cs @@ -7,11 +7,11 @@ [assembly: AssemblyCompany("高怡飞")] [assembly: AssemblyCopyright("Copyright ©2022-2024 高怡飞, All Rights Reserved.")] [assembly: AssemblyDescription("获取商店应用 小组件")] -[assembly: AssemblyFileVersion("5.1.1106.0")] -[assembly: AssemblyInformationalVersion("5.1.1106.0")] +[assembly: AssemblyFileVersion("5.1.1113.0")] +[assembly: AssemblyInformationalVersion("5.1.1113.0")] [assembly: AssemblyProduct("获取商店应用 小组件")] [assembly: AssemblyTitle("获取商店应用 小组件")] -[assembly: AssemblyVersion("5.1.1106.0")] +[assembly: AssemblyVersion("5.1.1113.0")] // 应用程序默认区域性的资源控制器设置 [assembly: NeutralResourcesLanguage("en-us")] diff --git a/Microsoft.Management.Deployment.Projection/Properties/AssemblyInfo.cs b/Microsoft.Management.Deployment.Projection/Properties/AssemblyInfo.cs index bcc477141..0359e8166 100644 --- a/Microsoft.Management.Deployment.Projection/Properties/AssemblyInfo.cs +++ b/Microsoft.Management.Deployment.Projection/Properties/AssemblyInfo.cs @@ -7,11 +7,11 @@ [assembly: AssemblyCompany("高怡飞")] [assembly: AssemblyCopyright("©Copyright ©2022-2024 高怡飞, All Rights Reserved.")] [assembly: AssemblyDescription("获取商店应用 WinGet WinRT 扩展")] -[assembly: AssemblyFileVersion("5.1.1106.0")] -[assembly: AssemblyInformationalVersion("5.1.1106.0")] +[assembly: AssemblyFileVersion("5.1.1113.0")] +[assembly: AssemblyInformationalVersion("5.1.1113.0")] [assembly: AssemblyProduct("获取商店应用 WinGet WinRT 扩展")] [assembly: AssemblyTitle("获取商店应用 WinGet WinRT 扩展")] -[assembly: AssemblyVersion("5.1.1106.0")] +[assembly: AssemblyVersion("5.1.1113.0")] // 应用程序默认区域性的资源控制器设置 [assembly: NeutralResourcesLanguage("en-us")] diff --git a/Microsoft.UI.Xaml.Projection/Properties/AssemblyInfo.cs b/Microsoft.UI.Xaml.Projection/Properties/AssemblyInfo.cs index 762f1738a..519233a0a 100644 --- a/Microsoft.UI.Xaml.Projection/Properties/AssemblyInfo.cs +++ b/Microsoft.UI.Xaml.Projection/Properties/AssemblyInfo.cs @@ -7,11 +7,11 @@ [assembly: AssemblyCompany("高怡飞")] [assembly: AssemblyCopyright("©Copyright ©2022-2024 高怡飞, All Rights Reserved.")] [assembly: AssemblyDescription("获取商店应用 Microsoft.UI.Xaml(WinUI 2) WinRT 扩展")] -[assembly: AssemblyFileVersion("5.1.1106.0")] -[assembly: AssemblyInformationalVersion("5.1.1106.0")] +[assembly: AssemblyFileVersion("5.1.1113.0")] +[assembly: AssemblyInformationalVersion("5.1.1113.0")] [assembly: AssemblyProduct("获取商店应用 Microsoft.UI.Xaml(WinUI 2) WinRT 扩展")] [assembly: AssemblyTitle("获取商店应用 Microsoft.UI.Xaml(WinUI 2) WinRT 扩展")] -[assembly: AssemblyVersion("5.1.1106.0")] +[assembly: AssemblyVersion("5.1.1113.0")] // 应用程序默认区域性的资源控制器设置 [assembly: NeutralResourcesLanguage("en-us")] diff --git a/README.md b/README.md index 985c22523..41ae58db9 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ > * 完成上面所述的翻译步骤,确保所有步骤能够顺利运行。 > * 打开 GetStoreAppPackage 打包项目,找到 Package.appxmanifest 文件,右键该文件,点击查看代码,找到 Resources 标签,根据模板添加相对应的语言,例如“”。 > * 打开 GetStoreApp 项目的 Strings 文件夹,并创建您使用的语言,比如(English(United States))文件夹名称为 en-us,具体可以参考表示语言(文化)代码与国家地区对照表)。 -> * 打开子文件夹下的 resw 文件,对每一个名称进行翻译。 +> * 打开子文件夹下的 resjson 文件,对每一个名称进行翻译。 > * 编译运行代码并测试您的语言,应用在初次打开的时候如果没有您使用的语言默认显示 English(United States),需要在设置中动态调整。 > * 完成上述步骤后创建 PR,然后将修改的内容提交到本项目,等待合并即可。