本地化和全球化的一点心得。

  项目是开始没有考虑到做全球化的。不知道为什么后来有了这个需求,我接手过来之后,时间也就是3,5天吧。说多不算多,说少也不少了。简单的看了下,一共是有大概50来个页面,都带有code behind的那种。很多都是控件里面有Text属性,有的干脆也没有,直接在两个tag之间的随便一写,反而很不好弄。还有就是code behind对某个控件的TExt进行赋值,总之东西多而且需要非常细致的工作。下面分类说几种处理的方式:

  • 全球化语言的加载。

  在config文件中加入一个key项,比如我的叫做defaultLanguage,Value是文化的形式:

Code
<add key ="defaultLanguage" value="en-GB"/>

  建立Global.asax文件,在如下的函数中,读取defaultLanguage中的内容。

    void Application_BeginRequest(object sender, EventArgs e)
    {
        
string name = string.Empty;
        name 
= ConfigurationSettings.AppSettings["defaultLanguage"];
        System.Globalization.CultureInfo culture 
= new System.Globalization.CultureInfo(name);
        System.Threading.Thread.CurrentThread.CurrentUICulture 
= culture;
        System.Threading.Thread.CurrentThread.CurrentCulture 
= culture;
    }
  • 普通页面的处理方式

  1.如果是单纯的没有任何asp.net的控件中,加入到asp.net控件的text属性中去。

Code
<tr>
  abc;
<tr>

 

Code
<asp:Literal run="server" ID="ltABC" Text="abc"></Literal>

 

  2.如果页面中有了控件,但是没有写在Text属性中的,写入到属性中去。

Code
<asp:Literal run="server" ID="aLiteral" >abc</Literal>
写成:
<asp:Literal run="server" ID="aLiteral" Text="abc"></Literal>

  3.切换页面到Design状态下,然后在Tools--》Generate LocalResource,生成resource文件。

  

  4.如上的页面控件中会自动生成一些新的代码。

Code
<asp:Literal runat="server" ID="ltABC" Text="abc" meta:resourcekey="ltABCResource1"></Literal> 

  5.而在页面对应的resource文件中,ltABCResource1.Text属性,会对应abc,接下来的工作就是删除页面中所有控件的Text=""属性,这样的话,页面加载的时候会自动的找到它所应该对应的Text值。

  • 特殊页面和Codebehind页面的处理

  一般对于多次出现的一些信息。或者公共的信息。再或者我都放在Globalresource中了。比如我的Global文件类名叫做Label,其中存在一个UserName的,其Value是"abc",那么,在前台页面或者后台页面都可以直接访问到。分别是:

Code
<%= Resources.Label.UserName %>

 

Code
abc.Text = Resources.Label.UserName;

 

  • 时间或者金钱的处理。(¥$)

  起初对于日期是硬编码的,那么对于日期时间的显示写成dd/MM/yyyy,到了其他语言或者国家的话,就会出现了问题了。必须和当前的文化相对才行。对于Money前面的那个符号也是需要当前的文化信息相对应的。

Code
abc.ToString("d",System.Globalization.CultureInfo.CurrentCulture)
posted @ 2008-12-23 11:47  AlexLiu  阅读(624)  评论(0编辑  收藏  举报