ASP.NET 本地化相关的技巧
日期:2009-12-17 | 作者: Allen通常的ASP.NET本地化的做法是利用Visual Studio中生成本地资源工具,在文件夹中生成一个App_LocalResources文件夹,其下再生成一个和aspx对应的resx文件,然后我们将这个resx文件进行复制,重命名,再对其进行翻译。这种做法上手很快,但随着页面的增多,项目结构越来越复杂,这个方案有其缺点:
- 翻译文件在物理上过于分散。每个层级的文件都有resx文件,对资源文件管理不方便。
- 翻译内容的重复。10个页面都有“保存”功能,按照传统的做法,生成10个resx文件,里面都有“保存”需要翻译,重复劳动。
- 翻译内容对应的主键无自描述,或者很少有自描述。
- 没有GUN gettext使用方便。
所以要对其进行一番改进,目标是:
- 只使用一个全局的资源文件。
- 使用简单的命令对资源文件进行利用(如 GetText)。
目标说明之后,代码就很简单了。
代码
可以放在Page, UserControl和MasterPage的基类中,也可以改动一下做成静态方法调用。
public string GetText(string key)
{
var result = HttpContext.GetGlobalResourceObject("Web", key);
return result == null ? string.Empty : result.ToString();
}
public string GetText(string key, CultureInfo cultureInfo)
{
var result = HttpContext.GetGlobalResourceObject("Web", key, cultureInfo);
return result == null ? string.Empty : result.ToString();
}
应用
- 在HTML中显示本地化
<div><%=GetText(“English”)%></div>
- 在Server控件中使用本地化
<asp:Label ID=”Label1″ runat=”server” Text=”<%$Resources:Web,English%>”><asp:Label>
- 关于Javascript中的本地化
可以将多语言的Javascript文件路径作为一个“翻译内容”,使用方法类似于第一种方法。
最后
默认的ASP.NET本地化解决方案,上手方便,但在使用上有些呆板,产生很多重复工作。所以在原来的基础上进行了改进,力图达到方便使用,方便维护的目的。
题外话,尽量少使用服务器控件,比如ASP.NET的RadioButton控件,最后生成的HTML会包含一个SPAN,写Javascript进行DOM操作的时候,有些不习惯。在前端技术得到飞速发展的今天,HTML代码越少,越有语义性,维护起来就更加方便。
又学习了~~
回复