【参加讨论】复制并翻译
本地化 Web 页的最简单方法通常是创建副本并将其翻译为目标语言。此方法非常适合不需要大量维护的静态内容。若要为 ASP.NET 页支持此模型,可以使用 Page 指令设置 Culture 属性。所有与区域设置相关的方法都获取 Culture 属性值。
下面的示例说明如何为页的三个独立的本地化版本实现此方法。在每页上都设置了 Culture 属性以确定日期格式:
<%@Page Culture="de-DE" Language="C#" %>
...
<%=DateTime.Now.ToString("f", null)%>
<%@Page Culture="de-DE" Language="VB" %>
...
<%=DateTime.Now.ToString("f", Nothing)%>
<%@Page Culture="de-DE" Language="JScript" %>
...
<%=DateTime.Now.ToString("f", null)%>
|
| C# |
VB |
JScript |
|
本地化和控件
在简单的"复制并翻译"方法上的一个改进是使用控件获取主要网页的区域性。在下面的示例中,标志图像和搜索条是控件。根据宿主网页的区域性,它们呈现不同的内容。为支持这一点,在每页中还添加了 UICulture 属性:
<%@Page Culture="de-DE" UICulture="de-DE" Language="C#" %>
<%@Page Culture="de-DE" UICulture="de-DE" Language="VB" %>
<%@Page Culture="de-DE" UICulture="de-DE" Language="JScript" %>
|
| C# |
VB |
JScript |
|
例如,标志控件 (Flag.ascx) 仅使用区域性名称生成 <img> 标记的 Src 属性:
<%@Import Namespace="System.Globalization"%>
<script runat="Server" Language="C#">
override protected void Render(HtmlTextWriter writer) {
FlagImage.Src = "../../flags/" + CultureInfo.CurrentCulture + ".jpg";
FlagImage.Alt = CultureInfo.CurrentCulture.NativeName;
base.Render(writer);
}
</script>
<img runat="server" id="FlagImage" />
<%@Import Namespace="System.Globalization"%>
<script runat="Server" Language="VB">
Overrides Protected Sub Render(writer As HtmlTextWriter)
FlagImage.Src = "../../flags/" & CultureInfo.CurrentCulture.Name & ".jpg"
FlagImage.Alt = CultureInfo.CurrentCulture.NativeName
MyBase.Render(writer)
End Sub
</script>
<img runat="server" id="FlagImage" />
<%@Import Namespace="System.Globalization"%>
<script runat="Server" Language="JScript">
override protected function Render(writer:HtmlTextWriter) : void {
FlagImage.Src = "../../flags/" + CultureInfo.CurrentCulture + ".jpg";
FlagImage.Alt = CultureInfo.CurrentCulture.NativeName;
base.Render(writer);
}
</script>
<img runat="server" id="FlagImage" />
|
| C# |
VB |
JScript |
|
搜索控件 (Search.ascx) 使用 switch 语句初始化标签和文本框的值,而区域性名称也可以是数据库查询的参数:
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";
}
}
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
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";
}
}
|
| C# |
VB |
JScript |
|
- ASP.NET 页支持 Culture 和 UICulture 属性以支持独立的本地化页。
- 页上的控件可以获取页的区域性,并且可以呈现与区域性相关的内容。