本地化和全球化的一点心得。
项目是开始没有考虑到做全球化的。不知道为什么后来有了这个需求,我接手过来之后,时间也就是3,5天吧。说多不算多,说少也不少了。简单的看了下,一共是有大概50来个页面,都带有code behind的那种。很多都是控件里面有Text属性,有的干脆也没有,直接在两个tag之间的随便一写,反而很不好弄。还有就是code behind对某个控件的TExt进行赋值,总之东西多而且需要非常细致的工作。下面分类说几种处理的方式:
- 全球化语言的加载。
在config文件中加入一个key项,比如我的叫做defaultLanguage,Value是文化的形式:
<add key ="defaultLanguage" value="en-GB"/>
建立Global.asax文件,在如下的函数中,读取defaultLanguage中的内容。
{
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属性中去。
<tr>
abc;
<tr>
<asp:Literal run="server" ID="ltABC" Text="abc"></Literal>
2.如果页面中有了控件,但是没有写在Text属性中的,写入到属性中去。
<asp:Literal run="server" ID="aLiteral" >abc</Literal>
写成:
<asp:Literal run="server" ID="aLiteral" Text="abc"></Literal>
3.切换页面到Design状态下,然后在Tools--》Generate LocalResource,生成resource文件。
4.如上的页面控件中会自动生成一些新的代码。
<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",那么,在前台页面或者后台页面都可以直接访问到。分别是:
<%= Resources.Label.UserName %>
abc.Text = Resources.Label.UserName;
- 时间或者金钱的处理。(¥$)
起初对于日期是硬编码的,那么对于日期时间的显示写成dd/MM/yyyy,到了其他语言或者国家的话,就会出现了问题了。必须和当前的文化相对才行。对于Money前面的那个符号也是需要当前的文化信息相对应的。
abc.ToString("d",System.Globalization.CultureInfo.CurrentCulture)
作者:Alexliu(alex dotNet Learning)
出处:http://alexliu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,转载请注明。并且保留文章链接。否则保留追究法律责任的权利。