使用 ResX Builder 创建卫星程序集
如何使用 ResX Builder 创建卫星程序集。
引言
Visual Studio 中的本地化功能非常出色,而且我发现它几乎适用于所有情况。但是,有一个问题可能会导致很多麻烦:当应用程序已经构建完成后,如何部署新的卫星程序集?对于许多小型项目来说,这并不是一个问题,开发人员只需部署一个新版本即可。然而,这并不总是容易的选择。如果能够创建一个卫星程序集并将其上传到应用程序,而无需重新构建,那该多好!当然可以!让我们开始了解如何操作...
传统方法:如果你有时间和精力去研究,你就会使用 resgen.exe 和 al.exe 这两个包含在 Visual Studio 安装中的工具。Resgen.exe 会接收一个 RESX 文件并输出一个 .resources 文件。然后,你需要使用大量的不同(且棘手的)语法命令,最终编写出类似这样的内容
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\resgen.exe"
"HelloResX.ja-JP.resx" "ResXTest.HelloResX.ja-JP.resources"
"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\al.exe" /t:lib
/out:"ja-JP\ResXTest.resources.dll" /culture:ja-JP
/embed:"ResXTest.HelloResX.ja-JP.resources"
看起来很简单,但我告诉你……有时它可能会导致严重的麻烦。好了,为了尽量减少麻烦,我编写了一个不错的 GUI 工具,希望对你们中的一些人有所帮助。让我们开始解释 ResXBuilder 吧...
使用 ResX Builder 简化流程
你只需要启动该工具,输入一些信息,然后单击“构建”,然后瞧;你的新卫星程序集就可以部署了。
如上图所示,主区域是一个网格,基本上它的作用是编辑现有 .resx 文件的值。例如,假设你有一个名为 HelloResX.resx 的默认 .resx 文件;你需要告诉该工具在哪里找到模板文件(你的默认 .resx 文件),然后单击“加载”。这将把所有名称/值对带入一个可以编辑的网格中。翻译完成后,只需选择一种区域性,并指定资源命名空间和项目名称,然后单击“构建”。就是这样;你就可以部署了!
一个演示应用程序
在附带的源代码中,你将找到一个演示项目。在其中,你将看到以下简单的代码
static void Main(string[] args)
{
List<string> cultures = new List<string>();
cultures.Add("en-US");
cultures.Add("zh-CHS");
cultures.Add("ja-JP");
cultures.Add("vi-VN");
cultures.Add("ru-RU");
cultures.ForEach(HiBye);
Console.ReadLine();
}
private static void HiBye(string cultureCode)
{
HelloResX.Culture = CultureInfo.GetCultureInfo(cultureCode);
Console.WriteLine("Culture: {0}", cultureCode);
Console.WriteLine("Hello: {0}", HelloResX.Hello);
Console.WriteLine("Goodbye: {0}", HelloResX.Goodbye);
Console.WriteLine();
}
基本上,我只有一个资源文件:HelloResX.resx,并且由于它是强类型的,我们可以直接调用其属性。默认情况下,它将使用当前区域性,但如果你像上面的代码中那样更改 Culture
属性,它将尝试从 bin 文件夹中找到所需的卫星程序集。我在上面的代码中所做的是为 5 种不同的区域性设置区域性 5 次,并将名称/值对写入控制台。当然,在实际应用程序中,你不知道要加载哪些区域性,你需要让用户从下拉菜单或其他方式中选择他们想要使用的区域性,然后从那里加载它。下面的图片显示了我在将卫星程序集添加到 bin 文件夹之前和之后的样子。
结论
卫星程序集;非常有用……生成它们的命令行工具;很糟糕……处理此问题的 GUI 工具;使生成卫星程序集快速而容易。尽情享受吧!