⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 localizingapps.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
字号:
<%@ 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>本地化 ASP.NET 应用程序</h4>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#copy">复制并翻译</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#embed">本地化和控件</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#summary">本节小结</a><br>
</div>

<p>
<hr>


<!--BEGIN SECTION--> <a name="copy"><span class="subhead">复制并翻译</span>
<p>

本地化 Web 页的最简单方法通常是创建副本并将其翻译为目标语言。此方法非常适合不需要大量维护的静态内容。若要为 ASP.NET 页支持此模型,可以使用 <b>Page</b> 指令设置 <b>Culture</b> 属性。所有与区域设置相关的方法都获取 <b>Culture</b> 属性值。
<p>
下面的示例说明如何为页的三个独立的本地化版本实现此方法。在每页上都设置了 <b>Culture</b> 属性以确定日期格式:

<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%@Page Culture="de-DE" Language="C#" %&gt;
...
&lt;%=DateTime.Now.ToString("f", null)%&gt;
</Tab>

<Tab Name="VB">
&lt;%@Page Culture="de-DE" Language="VB" %&gt;
...
&lt;%=DateTime.Now.ToString("f", Nothing)%&gt;
</Tab>

<Tab Name="JScript">
&lt;%@Page Culture="de-DE" Language="JScript" %&gt;
...
&lt;%=DateTime.Now.ToString("f", null)%&gt;
</Tab>

</Acme:TabControl><p>

<p>

<table>
<tr>
<td>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/CS/news-en-us.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-en-us.src"
  Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
  Caption="C# news-en-us.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/VB/news-en-us.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-en-us.src"
  Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
  Caption="VB news-en-us.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/JS/news-en-us.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-en-us.src"
  Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
  Caption="JScript news-en-us.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

</td>
<td>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/CS/news-de.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-de.src"
  Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
  Caption="C# news-de.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/VB/news-de.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-de.src"
  Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
  Caption="VB news-de.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/JS/news-de.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-de.src"
  Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
  Caption="JScript news-de.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>
</td>
<td>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/CS/news-ja.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-ja.src"
  Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
  Caption="C# news-ja.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/VB/news-ja.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-ja.src"
  Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
  Caption="VB news-ja.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize1/JS/news-ja.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize1/news-ja.src"
  Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
  Caption="JScript news-ja.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>
</td>
</tr>
</table>




<!--BEGIN SECTION--> <br> <a name="embed"><br> <span class="subhead">本地化和控件</span>
<p>

在简单的“复制并翻译”方法上的一个改进是使用控件获取主要网页的区域性。在下面的示例中,标志图像和搜索条是控件。根据宿主网页的区域性,它们呈现不同的内容。为支持这一点,在每页中还添加了 <b>UICulture</b> 属性:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%@Page Culture="de-DE" UICulture="de-DE" Language="C#" %&gt;
</Tab>

<Tab Name="VB">
&lt;%@Page Culture="de-DE" UICulture="de-DE" Language="VB" %&gt;
</Tab>

<Tab Name="JScript">
&lt;%@Page Culture="de-DE" UICulture="de-DE" Language="JScript" %&gt;
</Tab>

</Acme:TabControl><p>

<p>
例如,标志控件 (Flag.ascx) 仅使用区域性名称生成 <b>&lt;img&gt;</b> 标记的 <b>Src</b> 属性:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
&lt;%@Import Namespace="System.Globalization"%&gt;

&lt;script runat="Server" Language="C#"&gt;
override protected void Render(HtmlTextWriter writer) {
    FlagImage.Src = "../../flags/" + CultureInfo.CurrentCulture + ".jpg";
    FlagImage.Alt = CultureInfo.CurrentCulture.NativeName;
    base.Render(writer);
}
&lt;/script&gt;

&lt;img runat="server" id="FlagImage" /&gt;
</Tab>

<Tab Name="VB">
&lt;%@Import Namespace="System.Globalization"%&gt;

&lt;script runat="Server" Language="VB"&gt;
Overrides Protected Sub Render(writer As HtmlTextWriter)
    FlagImage.Src = "../../flags/" & CultureInfo.CurrentCulture.Name & ".jpg"
    FlagImage.Alt = CultureInfo.CurrentCulture.NativeName
    MyBase.Render(writer)
End Sub
&lt;/script&gt;

&lt;img runat="server" id="FlagImage" /&gt;
</Tab>

<Tab Name="JScript">
&lt;%@Import Namespace="System.Globalization"%&gt;

&lt;script runat="Server" Language="JScript"&gt;
override protected function Render(writer:HtmlTextWriter) : void {
    FlagImage.Src = "../../flags/" + CultureInfo.CurrentCulture + ".jpg";
    FlagImage.Alt = CultureInfo.CurrentCulture.NativeName;
    base.Render(writer);
}
&lt;/script&gt;

&lt;img runat="server" id="FlagImage" /&gt;
</Tab>

</Acme:TabControl><p>

<p>

搜索控件 (Search.ascx) 使用 switch 语句初始化标签和文本框的值,而区域性名称也可以是数据库查询的参数:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
void LocalizeSearchText() {
  switch(String.Intern(CultureInfo.CurrentUICulture.Name)) {
    case "en-US":
      SearchText.Text = "Clinton";
      SearchButton.Text = "Search";
      break;
    case "de-DE":
      ...
    case "ja-JP":
      ...
    default:
      SearchButton.Text = "Search";
  }
}
</Tab>

<Tab Name="VB">
Sub LocalizeSearchText()
  Select Case String.Intern(CultureInfo.CurrentUICulture.Name))
    Case "en-US"
      SearchText.Text = "Clinton"
      SearchButton.Text = "Search"

    Case "de-DE"
      ...
    Case "ja-JP"
      ...
    Case Else
      SearchButton.Text = "Search"
  End Select
End Sub
</Tab>

<Tab Name="JScript">
public function LocalizeSearchText() : void {
  switch(String.Intern(CultureInfo.CurrentUICulture.Name)) {
    case "en-US":
      SearchText.Text = "Clinton";
      SearchButton.Text = "Search";
      break;
    case "de-DE":
      ...
    case "ja-JP":
      ...
    default:
      SearchButton.Text = "Search";
  }
}
</Tab>

</Acme:TabControl><p>

<table>
<tr>
<td>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/CS/news-en-us.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-en-us.src"
  Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
  Caption="C# news-en-us.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/VB/news-en-us.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-en-us.src"
  Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
  Caption="VB news-en-us.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/JS/news-en-us.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-en-us.src"
  Icon="/quickstart/aspplus/samples/localize/flags/en-US.jpg"
  Caption="JScript news-en-us.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

</td>
<td>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/CS/news-de.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-de.src"
  Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
  Caption="C# news-de.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/VB/news-de.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-de.src"
  Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
  Caption="VB news-de.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/JS/news-de.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-de.src"
  Icon="/quickstart/aspplus/samples/localize/flags/de-DE.jpg"
  Caption="JScript news-de.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

</td>
<td>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/CS/news-ja.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-ja.src"
  Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
  Caption="C# news-ja.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/VB/news-ja.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-ja.src"
  Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
  Caption="VB news-ja.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/localize/localize2/JS/news-ja.aspx"
  ViewSource="/quickstart/aspplus/samples/localize/localize2/news-ja.src"
  Icon="/quickstart/aspplus/samples/localize/flags/ja-JP.jpg"
  Caption="JScript news-ja.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>
</td>
</tr>
</table>


<h4><a name="summary">本节小结</a></h4>
<ol>
<li>ASP.NET 页支持 <b>Culture</b> 和 <b>UICulture</b> 属性以支持独立的本地化页。
<li>页上的控件可以获取页的区域性,并且可以呈现与区域性相关的内容。
</ol>

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





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -