0

我有一个已经本地化的 WinForms 程序,有四种语言。它由一个EXE 和几个DLL 组成。所有 C# 项目都包含在一个解决方案中。附属程序集是从本地化资源文件自动生成的,例如Strings.fr.resxMyForm.it.resx

源代码存储在 Subversion 中,即 Artifactory 中集中(构建服务器)生成的二进制文件。Maven 用于依赖解析。二进制文件(快照)的相应源代码也存储在 Artifactory 中。因此,二进制文件(DLL、EXE)和相应的源代码都可以从其他项目中引用。

现在,我想在不重新编译的情况下为程序添加一种额外的语言。不得触及原始二进制文件

这个想法是创建一个依赖于(Maven)原始程序版本的附加解决方案。所以,我得到了二进制文件和源代码。然后我可以为每个原始项目创建工具项目以创建附属程序集,例如使用批处理文件。这将适用于资源文件中具有可本地化文本和其他内容的项目。

但是控件和表单呢?不同的语言可能有不同的结果控件布局、换行符、位置变化、大小等。这不仅仅是文本翻译。因此,WinForms 设计器会很有帮助。有人知道创建包含控件的附属程序集的好方法吗?

无法使用其他工具(例如 Sisulizer)。原始二进制文件是强命名的,并且密钥仅在构建服务器上可用。因此,新的卫星组件也必须使用该密钥进行强命名。

4

1 回答 1

0

这就是我通过本地化构建的方式。我使用可以读取 Windows 窗体 EXE 的本地化工具 (Soluling)。首先,我使用本地化工具的 GUI 版本创建一个本地化项目文件(XML 文件),并将其包含在我的存储库中。然后在构建服务器上的构建过程中,使用命令行版本的本地化工具扫描EXE文件。此扫描过程提取新的或更改的字符串,然后构建过程将它们发送以进行翻译。之后,构建过程构建附属程序集文件。构建过程的输出工件是主程序集 (.exe)、一些其他程序集 (.dll) 以及主要程序集和其他程序集的附属程序集 (.resources.dll)。这一切都由命令行完成作为正常构建过程的一部分的本地化工具版本。

在您的情况下,您不想重建 EXE。那也行。您只会使用构建过程的卫星构建部分。

一般来说,我使用三种构建过程(取决于项目)

1) 本地

我在我的机器上本地安装了本地化工具的命令行版本,并从 PowerShell 或 Bat 文件中调用它。

2) 自建服务器/代理

与上面相同,但构建管道的任务调用了本地化工具的命令行版本。

3) 基于云的构建

这有点棘手,因为我无法在 Azure 这样的云构建上安装自己的软件。为此,我将本地化工具的命令行版本(单个 EXE、SoluMake.exe)包含在我的存储库中。在构建期间,此 EXE 然后在 Azure DevOps 构建机器中可用,并且构建可以使用就像在情况 #1 和 #2 中一样。

于 2020-06-13T15:44:22.307 回答