利用.net的资源文件实现网站的多语言版本

要实现网站的多语言,最关键的就是所有与用户界面有关的东西都要从动态地读取.实现的技术不难,但却有很多细节要考虑,比如英文比较长,中文比较短的显示问题.这些先不谈,这里介绍一下实现方法,虽然实在没什么技术含量.

首先建立四个资源文件,ERR_EN_US.resx(英文的用户交互),ERR_ZH_CN.resx(中文的用户交互),UI_EN_US.resx(英文的界面显示),UI_ZH_CN.resx(中文的界面显示)内容自己填,但是ERR_EN_US.resx,ERR_ZH_CN.resx这两个文件要有相同的KEY,例子中写了一个ERROR_DB。UI_EN_US.resx,UI_ZH_CN.resx这两个文件要有相同的KEY,例子中写了一个BUTTON_SHOWMSG。

然后新建一个类WebHelper,继承于Page,用于让所有的页面都继承于这个类,这样的好处就是方便调用.里面定义了两个ResourceManager,一个是关于界面显示的,另一个用于与用户交互的一些信息.

 

public static ResourceManager RMUI;
public static ResourceManager RMERR;

 

这两个变量在程序首次运行时就要赋值,所以在Global.asax中写Application_Start方法为其赋值

 

       protected void Application_Start(object sender, EventArgs e)
        
{
            
string lang = ConfigurationManager.AppSettings["lang"];

            
switch (lang.ToUpper())
            
{
                
case "ZH_CN":
                    WebHelper.RMUI 
= new ResourceManager(typeof(UI_ZH_CN));
                    WebHelper.RMERR 
= new ResourceManager(typeof(ERR_ZH_CN));
                    
break;
                
case "EN_US":
                    WebHelper.RMUI 
= new ResourceManager(typeof(UI_EN_US));
                    WebHelper.RMERR 
= new ResourceManager(typeof(ERR_EN_US));
                   
break;
                
default:
                    
break;
            }

        }


 

我们希望根据Web.config的Appsetting设置语言.所以在Web.config中新增一个设置

  

  <appSettings>
    
<!--切换语言,可以使用"ZH_CN"或"EN_US"-->
    
<add key="lang" value="EN_US"/>
  
</appSettings>

 

然后把这两个资源写成枚举,方便调用.另一个好处就是,在重命名的时候,可以利用VS的重命名功能,非常地方便.这里只定义了一项.

 

        public enum UILang
        
{
            BUTTON_SHOWMSG
        }


        
public enum ERRLang
        
{
            ERROR_DB
        }

 

下面是用于页面中调用的两个方法:

 

        public string GetUI(UILang uiLang)
        
{
            
return RMUI.GetString(uiLang.ToString());
        }


        
public string GetERR(ERRLang errLang)
        
{
            
return RMERR.GetString(errLang.ToString());
        }

 

其它页面继承于WebHelper,直接调用GetERR和GetUI即可.

 

        protected void Page_Load(object sender, EventArgs e)
        
{
            Button1.Text 
= GetUI(UILang.BUTTON_SHOWMSG);
        }


        
protected void Button1_Click(object sender, EventArgs e)
        
{
            Button btn 
= sender as Button;
            
if (btn != null)
            
{
                ClientScript.RegisterStartupScript(
this.GetType(),
                    
"showMsg",
                    
string.Format("alert('{0}')",GetERR(ERRLang.ERROR_DB)),
                    
true);
            }

        }

posted on 2009-03-19 17:53  廖勇军  阅读(931)  评论(1编辑  收藏  举报

导航