65.9K
CodeProject 正在变化。 阅读更多。
Home

卫星程序集的自动生成和维护过程

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.20/5 (3投票s)

2006 年 7 月 19 日

8分钟阅读

viewsIcon

28071

downloadIcon

342

本文讨论了如何在数据库中生成和维护本地化资源,以供卫星程序集使用。

Sample Image - Autolocalize.jpg

摘要

本文旨在帮助任何希望在软件产品发布不同语言版本时,能够维护和自动化生成卫星程序集的人。

引言

基于产品开发的公司在进行软件营销时,要求开发的应用程序支持多种语言才能获得良好的市场。在开发具有竞争力的应用程序时,设计方面必须实现国际化支持。每次应用程序发布新语言版本时,都会创建卫星程序集来支持新语言,以便应用程序能在用户界面上正确显示支持语言的文本字符串。卫星程序集包含本地化所需的所有资源。 .NET Framework 中提供了相关工具。本文档将讨论如何维护本地化字符串,以及如何按需自动生成卫星程序集。Resgen.exe 是一个资源文件生成器,是 .NET 中提供的命令行工具,用于生成卫星程序集。资源文件生成器会将 .txt 文件和 .resx(基于 XML 的资源格式)文件转换为通用的语言运行时二进制 .resources 文件,这些文件可以嵌入到运行时二进制可执行文件中,或编译成卫星程序集。

Resgen.exe 执行以下转换:

将 .txt 文件转换为 .resources 或 .resx 文件
将 .resources 文件转换为文本或 .resx 文件
将 .resx 文件转换为文本或 .resources 文件

为了使 Resgen.exe 能够解析您的输入,您的 .txt 和 .resx 文件必须遵循正确的格式。您必须在单独的行上指定每个名称/值对,如下所示:

name = value

如果您使用 Resgen.exe 将包含对象的 .resources 文件转换为 .txt 文件,则所有字符串资源都会被正确转换,但非字符串对象的类型也会作为字符串写入文件。您将在转换中丢失嵌入的对象,并且 Resgen.exe 会报告检索资源时发生错误。

为什么“AutoLocalize”很有用

如果卫星程序集包含字符串资源和图像,那么生成卫星程序集的过程将非常繁琐。AutoLocalize 帮助您自动化生成卫星程序集的过程。当您的应用程序需要支持新语言时,您只需要 4 个步骤:

1. 在 Windows 中设置语言(如下所述)
2. 加载工具(Autolocalize.exe)
3. 输入特定语言的字符串
4. 生成卫星程序集。

就这样!您可以使用卫星程序集来支持您的应用程序的新语言。

在 Windows 中设置语言

在输入本地化字符串之前,需要先在 Windows 中设置语言。请按照以下步骤设置语言。

1. 在 Windows 桌面任务栏的“开始”菜单中,选择“设置”,然后选择“控制面板”。

Sample screenshot

2. 选择“区域和语言选项”。
3. 在“区域和语言选项”对话框中,选择“语言”选项卡。
4. 单击“详细信息...”按钮。
Sample screenshot

5. 在“文本服务和输入语言”对话框中,单击“设置”选项卡下的“添加...”按钮。
6. 在“添加输入语言”对话框中,选择您的应用程序将支持的语言。
Sample screenshot

在我们的示例中,我们选择了德语(德国)。德语的缩写“DE”会显示在“文本服务和输入语言”中。设置完成后,请查看桌面右下角。将显示语言缩写的指示符。在本例中,显示的是“DE”。

Sample screenshot

现在,Windows 中的语言设置已完成。

Autolocalize 的作用是什么?

让我们探讨一下 Autolocalize 工具如果想有用,应该具备哪些优势。它使用 SQL Server 数据库来维护字符串资源。安装时,它会在 SQL Server 中创建数据库和名为“Localize”和“LanguageSupport”的表。“LanguageSupport”表用于存储软件产品支持的语言列表,以便创建卫星程序集。它为每种语言维护一个单独的表。每当输入新的语言数据时,它会创建两个不同的表来存储区域设置键和值。一个表用于存储文本资源,另一个表用于存储图像资源。但在生成卫星程序集时,文本和图像资源都会存储到一个程序集中。使用此过程的好处是,每当软件产品发布新版本时,都可以输入新的字符串和图像资源来生成卫星程序集。另一方面,使用此过程可以轻松维护卫星程序集。

如何使用 Autolocalize 生成卫星程序集?

它有文件、工具、窗口帮助菜单。文件菜单包含语言支持文本资源图像资源选项。工具菜单包含生成资源选项。让我们从文件 ->语言支持选项开始。这是输入语言信息的第一个屏幕。

1. 从菜单中选择文件 ->语言支持
2. 右键单击鼠标。
3. 将显示包含新建编辑选项的上下文菜单。
4. 选择新建。将显示一个屏幕,如下所示。
Sample screenshot

5. 输入语言 ID。(语言的唯一标识符。最好使用文化名称作为语言标识符,正如 Microsoft 在 MSDN 中建议的那样。EN-英语,DE-德语等)
6. 输入需要为某种语言维护的样式表名称。
7. 输入资源文件名。生成卫星程序集时,此文件用于存储字符串资源。
8. 输入程序集名称。卫星程序集将以此名称创建。
9. 输入资源表名称。将在数据库中创建一个表来存储具有此名称的文本资源。
10. 输入图像表名称。将在数据库中创建一个表来存储具有此名称的图像资源。
11. 选择生成卫星程序集的位置。您可以在此处指定软件产品存储的目标路径。
12. 默认语言。软件产品开发所用的语言。必须将一种语言设置为必选项。
13. 按 TAB 键。
14. 按“保存并关闭”按钮。

在本例中,我们使用 EN 作为英语。现在,默认语言已设置。要输入该语言的字符串资源,请在主屏幕右上角显示的组合框中选择 EN。
15. 选择下拉菜单中的文件,文本资源选项。您将看到一个如下所示的屏幕。

注意:不要忘记从组合框(主屏幕右上角显示的)中选择您将要输入文本或图像的语言选项。如果选择了除默认语言以外的任何语言,则区域设置键将从默认语言中获取。您只需要输入等效的单词。
Sample screenshot

16. 右键单击鼠标。将显示一个包含新建、编辑选项的上下文菜单。
17. 选择新建选项。您将看到一个如下所示的屏幕。

Sample screenshot

18. 在“区域设置键”列中输入将用作本地化键的文本。
19. 在其他语言的值 文本框中输入等效的语言文本。对于默认语言,在两个文本框中输入的文本显然是相同的。

考虑应用程序的登录页面。该屏幕需要输入登录名密码来验证用户。如果您正在为英语开发应用程序,则“区域设置键”和“其他语言的值”列中的文本将是登录名。但如果您的应用程序需要支持德语,则在“区域设置键”列中键入登录名,在“其他语言的值”列中键入等效的德语单词。
20. 按保存并关闭以保存数据。

如何保存图像?

1. 选择下拉菜单中的文件,图像资源选项。您将看到一个如下所示的屏幕。
Sample screenshot

2. 右键单击鼠标。将显示一个包含新建、编辑选项的上下文菜单。
3. 选择新建选项。您将看到一个如下所示的屏幕。

Sample screenshot

4. 输入图像的名称,该名称是数据库中用于定位图像的键。
5. 按从文件获取图像按钮选择要存储在数据库中的图像。
6. 将显示“打开”对话框。
7. 选择要保存的图像。
8. 按保存并关闭按钮。图像保存后,将主屏幕中显示添加的信息,如下所示。

Sample screenshot

如何生成卫星程序集?

1. 选择下拉菜单中的文件、工具、生成资源选项。您将看到一个如下所示的屏幕。
Sample screenshot

2. 通过单击鼠标左键选择一个语言(行)。选定的行会在左侧用指向该行的三角形表示。
3. 右键单击鼠标。将显示一个如下所示的屏幕,其中包含语言信息,如语言 ID、资源文件名、程序集名称、存储文本资源的资源表、存储图像资源的图像表(在数据库中)。

Sample screenshot

4. 选择要存储卫星程序集的驱动器和文件夹。
5. 按生成资源按钮。
注意:请确保已设置指向 D:\WINNT\Microsoft.NET\Framework\v2.0.50727 文件夹的环境变量(路径)。因为 autolocalize 工具使用 al.exe 来生成卫星程序集。
6. 现在检查文件夹以查找卫星程序集。(在本例中,将创建一个名为 ENGASM.DLL 的程序集)

在应用程序中使用卫星程序集

在应用程序中,使用System.Reflection命名空间来加载卫星程序集,并使用System.Resource命名空间从卫星程序集中加载字符串或图像。

//
   System.Reflection.Assembly oA = System.Reflection.Assembly.LoadFile("f:\\resources\\engasm.dll");
   System.Resources.ResourceManager rm;
// engres is a name of .resource file generated by autolocalize tool
   rm = new System.Resources.ResourceManager("engres",oA);
// pass locale id as a parameter to GetString method of resource manager object
   TextBox1.Text=rm.GetString("1");
//

您无需在源代码中硬编码 .resource 文件的名称。这可以指定在 app.config/web.config 文件中,您可以编写一个配置处理程序来自动检索。您可以根据需要增强此工具。

 

 

© . All rights reserved.