[导入]:本地化 Web 窗体页(来自CSDN)
当本地化 Web 窗体页时,Visual Studio 项目系统不自动生成资源文件。您必须手动创建和编辑 XML 资源文件。本演练主题说明如何添加资源文件模板,然后用 XML 设计器编辑该模板以创建英语资源、德语资源和在奥地利讲的德语资源。本主题还讨论如何编写代码以访问这些资源。
您还可以将文本文件转换为资源文件。有关更多信息,请参见文本文件格式中的资源和资源文件生成器 (Resgen.exe)。
手动创建和编辑资源文件
- 创建名为“LocProject”的新 ASP.NET Web 应用程序。有关详细信息,请参见创建 Web 项目。
注意 必须将项目命名为“LocProject”;本演练中后面的一些代码要求该项目必须具有此名称。
- 在“项目”菜单上单击“添加新项”。
- 在“模板”框中选择“程序集资源文件”模板。在“名称”框中键入文件名“strings.resx”。strings.resx 文件将包含英语的后备资源。每当应用程序找不到更适合于 UI 区域性的资源时,就将访问这些资源。
该文件被添加到解决方案资源管理器中的项目中,并自动在 XML 设计器中以“数据”视图形式打开。
- 在“数据表”窗格中选择“data”。
- 在“数据”窗格中,单击空行,并在“name”列中输入“txtSearch”,在“value”列中输入“Search for the following text:”。
不需要为字符串指定 type 或 mimetype;它们用于对象。类型说明符保持所保存对象的数据类型。如果对象由二进制数据组成,则 MIME 类型说明符保持所存储的二进制信息的基类型 (base64)。
- 单击另一个空行,并在“name”列中输入“txtWelcome”,在“value”列中输入“Welcome to Localization!”。
- 在“文件”菜单中,单击“保存 strings.resx”。
- 再执行步骤 2-7 两次以分别创建两个名为“strings.de.resx”和“strings.de-AT.resx”的资源文件,文件中包含在下表中指定的字符串资源。strings.de.resx 文件将包含作为非特定语言的德语资源,即它们适用于讲德语的任何区域。strings.de-AT.resx 文件将包含特定于奥地利的德语资源。
资源文件名 name value strings.de.resx txtSearch Nach dem folgenden Text suchen: strings.de.resx txtWelcome Willkommen zur Lokalisierung! strings.de-AT.resx txtWelcome Grüßt's euch zur ASP.NET Lokalisierung! 您可以按照多种方式输入重音符:
- 从本帮助主题中复制并粘贴
- 使用德语键盘布局
- 使用字符映射应用程序 charmap.exe
- 使用 Windows 2000 和 Windows XP 中的 Windows 屏上键盘
有关使用不同键盘布局、字符映射应用程序或屏上键盘的详细信息,请参见 Windows 帮助。
访问资源
- 在代码编辑器中,在代码模块的开始处导入
System.Resources
和System.Globalization
命名空间。在 Visual Basic 中,此代码应在 WebForm1 的类声明之前出现。在 Visual C# 中,此代码应在命名空间声明之前出现。下面的示例在上下文中显示这些语句。' Visual Basic
Imports System.Resources
Imports System.Globalization
Public Class WebForm1 Inherits System.Web.UI.Page // C#using System.Resources;
using System.Globalization;
namespace LocProject - 将 ResourceManager 类型的变量声明为页类的一部分:
' Visual Basic Public Class WebForm1 Inherits System.Web.UI.Page
Protected LocRM As ResourceManager
// C# namespace LocProject_CS { public class WebForm1 : System.Web.UI.Page {protected ResourceManager LocRM;
- 通过在 WebForm1 代码隐藏类中向 Page_Load 方法中添加下列代码来创建 ResourceManager 类的实例。ResourceManager 构造函数采用两个参数。第一个参数是资源的根名称,即不带区域性和 .resx 后缀的资源文件名称。第二个参数是主程序集。
' Visual Basic LocRM = New ResourceManager("LocProject.strings", GetType(WebForm1).Assembly) // C# LocRM= new ResourceManager("LocProject.strings", typeof(WebForm1).Assembly);
注意 如果未将项目命名为“LocProject”,则应当替换您以前用作根目录名参数部分的名称。
在页中显示静态资源字符串
- 在 HTML 视图中,用下列 HTML 代码从资源文件添加一些静态文本。将此代码放置在 <form> 和 </form> 标记之间。
<h3><%=LocRM.GetString("txtWelcome")%></h3>
注意 默认情况下,ResourceManager 对象区分大小写。如果您希望执行不区分大小写的查找(例如使“TXTWELCOME”与“txtWelcome”检索相同的资源),则可以将资源管理器的 IgnoreCase 属性设置为 true。但是,为了提高性能,最好始终为资源名称指定正确的大小写。如果执行不区分大小写的资源查找,则可能会导致性能问题。
将资源字符串分配到控件的属性
- 在“设计”视图中,将 Button 控件从“工具箱”的“Web 窗体”选项卡拖到窗体上。
- 在“属性”窗口中,删除该按钮 Text 属性的值
- 在代码编辑器中,将下列代码添加到 Page_Load 方法中,以从资源文件检索该按钮的文本。
' Visual Basic Button1.Text = LocRM.GetString("txtSearch") // C# Button1.Text = LocRM.GetString("txtSearch");
- 在代码编辑器中,添加下列代码以在代码模块的开始处导入
System.Threading
命名空间。' Visual Basic ' Import this namespace at the beginning of the code module Imports System.Threading // C# // Import this namespace at the beginning of the code module. using System.Threading;
- 将下列代码添加到 Page_Load 方法的最开始处,以指定 Web 窗体页应根据在浏览器的“接受语言”标头中指定的区域性来显示资源和格式设置。此代码十分重要,因为如果没有它,您的 Web 应用程序将默认为 Web 服务器的区域性设置,这可能不适合远程用户查看 Web 窗体页。
' Visual Basic ' Set the culture and UI culture to the browser's accept language Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0)) Thread.CurrentThread.CurrentUICulture = New CultureInfo(Request.UserLanguages(0)) // C# // Set the culture and UI culture to the browser's accept language Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]); Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.UserLanguages[0]);
- 保存该项目。
- 在“生成”菜单上,单击“生成 LocProject”命令。
- 在解决方案资源管理器中,右击 WebForm1.aspx 文件,然后选择“在浏览器中查看”。如果您正在德语或奥地利语系统上运行,则您将看到用德语或奥地利语显示的页;如果您不是在德语或奥地利语系统上运行,将看到用英语显示的页。
如果您首先在为德语配置的系统上查看页,然后在为奥地利语配置的系统上查看该页,您将注意到“Welcome”文本已更改为奥地利语资源,但搜索按钮的文本却没有更改。这是资源后备系统的一个示例:奥地利语资源只更改“welcome”文本,而其余的文本默认为非特定的德语资源。
文章来源:http://www.cnblogs.com/suiqirui19872005/articles/769687.html