日期:2011-02-17  浏览次数:20515 次

<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>使用资源文件</h4>


<div class="indent" style="font-family:Verdana; font-size:8pt;"> <b> <img align="middle" src="http://edu.cnzz.cn/quickstart/images/bullet.gif">  </b><a class="toc2" href="#create">创建资源</a><br> <b> <img align="middle" src="http://edu.cnzz.cn/quickstart/images/bullet.gif">  </b><a class="toc2" href="#useresource">使用页上的资源</a><br> <b> <img align="middle" src="http://edu.cnzz.cn/quickstart/images/bullet.gif">  </b><a class="toc2" href="#satellite">使用附属程序集</a><br> <b> <img align="middle" src="http://edu.cnzz.cn/quickstart/images/bullet.gif">  </b><a class="toc2" href="#satellitecont">对控件使用附属程序集</a><br> <b> <img align="middle" src="http://edu.cnzz.cn/quickstart/images/bullet.gif">  </b><a class="toc2" href="#summary">本节小结</a><br>
</div>
<p>
<hr>



<!--BEGIN SECTION--> <a name="create"> <span class="subhead">创建资源</span>
<p>

资源管理是 .NET 框架类库的一个功能,可用于从源代码中提取可本地化的元素,并将它们与字符串键一起存储为资源。 运行时,可使用 <b>ResourceManager</b> 类的一个实例将键解析为原始资源或本地化版本。 资源可存储为独立(“松散”)文件,或程序集的一部分。
<p> ASP.NET 页可使用资源文件;另外,已编译的代码隐藏控件可以使用嵌入或链接到它们的程序集中的资源。
<p>

可使用 <b>ResourceWriter</b> 类以编程方式创建资源,或使用工具 Resgen.exe 创建资源。Resgen.exe 可使用简单的“键=值”格式作为输入,或使用 .resx 格式的 XML 文件。
<div class="code"><xmp> ; ; Lines beginning with a semicolon can be used for comments. ;

[strings] greeting=Welcome ! more=Read more ... ... </xmp></div>

<b>ResourceWriter</b> 和 Resgen.exe 创建一个 .resources 文件,该文件可单独使用,也可用作程序集的一部分。 若要在程序集中包括 .resources 文件,请使用相关的编译器开关或 Al.exe 工具。 仅包含本地化资源、不包含代码的程序集称为附属程序集。



<!--BEGIN SECTION--> <br> <a name="useresource"> <br> <span class="subhead">使用页上的资源</span>
<p>

下面的示例仅实现一个 .aspx 页,该页为每个请求都被本地化。 支持的语言是英语、德语和日语。 确定语言的方法是检查 Global.asax 文件中 HTTP 标头的 <b>Content-Language</b> 字段。 该字段的内容可通过 <b>UserLanguages</b> 集合访问:
<p>

<p><Acme:TabControl runat="server">
<Tab Name="C#"> Thread.CurrentThread.CurrentCulture = new CultureInfo(Request.UserLanguages[0]);
</Tab>

<Tab Name="VB"> Thread.CurrentThread.CurrentCulture = New CultureInfo(Request.UserLanguages(0))
</Tab>

<Tab Name="JScript"> Thread.CurrentThread.CurrentCulture = new CultureInfo(Request.UserLanguages[0]);
</Tab>

</Acme:TabControl><p>

若要更改初始语言设置,可使用以不同的方式本地化的客户端,或更改浏览器上的语言设置。 例如,对于 Internet Explorer 5.x,从菜单中选择<b>工具</b>-><b>Internet 选项</b>并单击底部的<b>语言</b>按钮。 在接下来的对话框中,可以添加其他语言,并定义它们的优先级。 为简单起见,示例总是选择第一项。
<p> 页第一次加载后,用户可在下拉列表控件 <b>MyUICulture</b> 中选择其他区域性。 如果选定的区域性有效,此值将重写从 <b>UserLanguages</b> 获得的设置:

<p><Acme:TabControl runat="server">
<Tab Name="C#"> String SelectedCulture = MyUICulture.SelectedItem.Text; if(! SelectedCulture.StartsWith("Choose")) { // If another culture was selected, use that instead. Thread.CurrentThread.CurrentCulture = new CultureInfo(SelectedCulture); Thread.CurrentThread.CurrentUICulture = new CultureInfo(SelectedCulture); }
</Tab>

<Tab Name="VB"> Dim SelectedCulture As String = MyUICulture.SelectedItem.Text If Not(SelectedCulture.StartsWith("Choose")) Then ' If another culture was selected, use that instead.