ASP.NET 本地化相关的技巧

日期:2009-12-17 | 作者: Allen

通常的ASP.NET本地化的做法是利用Visual Studio中生成本地资源工具,在文件夹中生成一个App_LocalResources文件夹,其下再生成一个和aspx对应的resx文件,然后我们将这个resx文件进行复制,重命名,再对其进行翻译。这种做法上手很快,但随着页面的增多,项目结构越来越复杂,这个方案有其缺点:

  1. 翻译文件在物理上过于分散。每个层级的文件都有resx文件,对资源文件管理不方便。
  2. 翻译内容的重复。10个页面都有“保存”功能,按照传统的做法,生成10个resx文件,里面都有“保存”需要翻译,重复劳动。
  3. 翻译内容对应的主键无自描述,或者很少有自描述。
  4. 没有GUN gettext使用方便。

所以要对其进行一番改进,目标是:

  1. 只使用一个全局的资源文件。
  2. 使用简单的命令对资源文件进行利用(如 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();
}

应用

  1. 在HTML中显示本地化

    <div><%=GetText(“English”)%></div>

  2. 在Server控件中使用本地化

    <asp:Label ID=”Label1″ runat=”server” Text=”<%$Resources:Web,English%>”><asp:Label>

  3. 关于Javascript中的本地化

    可以将多语言的Javascript文件路径作为一个“翻译内容”,使用方法类似于第一种方法。

最后

默认的ASP.NET本地化解决方案,上手方便,但在使用上有些呆板,产生很多重复工作。所以在原来的基础上进行了改进,力图达到方便使用,方便维护的目的。

题外话,尽量少使用服务器控件,比如ASP.NET的RadioButton控件,最后生成的HTML会包含一个SPAN,写Javascript进行DOM操作的时候,有些不习惯。在前端技术得到飞速发展的今天,HTML代码越少,越有语义性,维护起来就更加方便。

也许你还会喜欢

One Response to “ASP.NET 本地化相关的技巧”

  1. 1 charley 十二月 17th, 2009 at 12:21 下午

    又学习了~~

    回复

Leave a Reply

Additional comments powered by BackType