本地化 ClickOnce 应用程序

本地化是使你的应用程序适用于特定区域性的过程。 此过程涉及使用正确的日期和货币格式、调整窗体上控件的大小以及根据需要从右到左镜像处理控件,从而将用户界面 (UI) 文本转换为特定于区域的语言。

对应用程序进行本地化将创建一个或多个附属程序集。 每个程序集均包含用户界面字符串、图像和其他特定于给定区域性的资源。 (应用程序的主可执行文件包含用于应用程序的默认区域性的字符串。)

本主题介绍为其他区域性部署 ClickOnce 应用程序的三种方法:

  • 在单个部署中包括所有附属程序集。

  • 为每种区域性生成一个部署,且每个部署中均包括单个附属程序集。

  • 按需下载附属程序集。

在一个部署中包括所有附属程序集

与发布多个 ClickOnce 部署不同,你可以发布单个包含所有附属程序集的 ClickOnce 部署。

此方法是 Visual Studio 中的默认方法。 若要在 Visual Studio 中使用此方法,则无需进行任何其他工作。

若要与 MageUI.exe 一起使用此方法,则必须在 MageUI.exe 中将应用程序的区域性设置为“非特定语言”。 接下来,必须手动将所有附属程序集包括在你的部署中。 在 MageUI.exe 中,可以通过使用应用程序清单“文件”选项卡上的“填充”按钮添加附属程序集

此方法的好处在于它可创建单个部署,并简化已本地化的部署。 在运行时,将根据用户 Windows 操作系统的默认区域性使用适当的附属程序集。 此方法的缺点为只要客户端计算机上安装或更新了应用程序,此方法就会下载所有附属程序集。 如果你的应用程序具有大量字符串,或客户的网络连接速度慢,则此过程在应用程序更新期间会影响性能。

注意

此方法假定你的应用程序将自动调整控件的高度、宽度和位置以适应不同区域性中不同的文本字符串大小。 Windows 窗体包含各种控件和技术,这些控件和技术使你可以设计更易于本地化的窗体,其中包括 FlowLayoutPanelTableLayoutPanel 控件以及 AutoSize 属性。 另请参阅如何:使用 AutoSize 和 TableLayoutPanel 控件支持对 Windows 窗体的本地化

为每种区域性生成一个部署

在此部署策略中,可以生成多个部署。 在每个部署中,仅包括特定区域性所需的附属程序集,并将该部署标记为特定于该区域性。

若要在 Visual Studio 中使用此方法,请在“发布”选项卡上将“发布语言”属性设置为所需的区域。 Visual Studio 将自动包括所选区域所需的附属程序集,并将排除部署中的所有其他附属程序集。

注意

在适用于 .NET Core 3.1 和 .NET 5(或更高版本)的 ClickOnce 中,需要使用“发布”工具(而不是“发布”向导和项目设计器的“发布”页)来设置部署属性。 有关详细信息,请参阅使用 ClickOnce 部署 .NET Windows 应用程序适用于 .NET 的 ClickOnce

可通过在 Microsoft Windows 软件开发工具包 (SDK) 中使用 MageUI.exe 工具实现相同的操作。 使用应用程序清单“文件”选项卡上的“填充”按钮排除应用程序目录中的所有其他附属程序集,然后为 MageUI.exe 中的部署清单设置“名称”选项卡上的“区域性”字段。 这些步骤不仅包括正确的附属程序集,同时也将部署清单中 assemblyIdentity 元素上的 language 属性设置为相应的区域性。

发布应用程序后,必须为应用程序支持的每种其他区域性重复此步骤。 必须确保每次发布到不同的 Web 服务器目录或文件共享目录,因为每个应用程序清单将引用不同的附属程序集,并且每个部署清单将具有不同的 language 属性值。

按需下载附属程序集

如果决定在单个部署中包括所有附属程序集,则可通过使用按需下载来提高性能,这使你能够将程序集标记为可选。 安装或更新应用程序时,将不会下载已标记的程序集。 可通过调用 ApplicationDeployment 类上的 DownloadFileGroup 方法,根据需要安装程序集。

注意

.NET Core 和 .NET 5 及更高版本中不支持 System.Deployment.Application 命名空间中的 ApplicationDeployment 类和 API。 在 .NET 7 中,支持一种访问应用程序部署属性的新方法。 有关详细信息,请参阅访问 .NET 中的 ClickOnce 部署属性。 .NET 7 不支持等效的 ApplicationDeployment 方法。

按需下载附属程序集与按需下载其他类型的程序集略有不同。 有关如何使用 ClickOnce 的 Windows SDK 工具来启用此方案的详细信息和代码示例,请参阅演练:使用 ClickOnce 部署 API 按需下载附属程序集

还可以在 Visual Studio 中启用此方案。 有关详细信息,请参阅演练:使用设计器通过 ClickOnce 部署 API 按需下载附属程序集

在部署前测试已本地化的 ClickOnce 应用程序

仅当应用程序主线程的 CurrentUICulture 属性设置为附属程序集的区域性时,才将附属程序集用于 Windows 窗体应用程序。 本地市场中的客户可能已经在运行 Windows 的本地化版本,并且已将区域性设置为相应默认值。

向客户提供应用程序前,你有如下三个选项,供测试已本地化的部署:

  • 可在 Windows 相应的本地化版本上运行自己的 ClickOnce 应用程序。

  • 可在应用程序中以编程方式设置 CurrentUICulture 属性。 (必须在调用 Run 方法前设置该属性。)