zoukankan      html  css  js  c++  java
  • 利用.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);
                }

            }
  • 相关阅读:
    Linux上的SQL Server的起步
    SQL Server 2016 SP1 标准版等同企业版?!
    为什么简单恢复模式模式真的是坏主意?
    在SQL Serve里停用行和页层级锁
    SQL Server里的闩锁耦合(Latch Coupling)
    我有几个NUMA节点
    SQL Server里在文件组间如何移动数据?
    对于SQL Server,我需要多少内存
    SQL Server里的文件和文件组
    重启SQL Server——总是好事?
  • 原文地址:https://www.cnblogs.com/yvesliao/p/1417000.html
Copyright © 2011-2022 走看看