• 程序中的多语言(对比asp.net2.0)


    软件要广泛的发布,就要支持多语言。

    使用.net的resX文件来实现多语言是一个不错的选择。

    这是使用Web中使用多语言的一个例子。

    效果是:在国内访问的话,看到这样的显示:
    UserLanguages : zh-cn
    based on ur cultrue, u should see this word : 汉字:
    如果在英语国家访问的话
    UserLanguages : en-us
    based on ur cultrue, u should see this word : English Word 

    Web项目名叫ChineseWordTest。建立了两个资源文件,分别是MultiLang.en-us.resx和MultiLang.zh-cn.resx。资源文件里面都有一个键值对Test_Word。en-us的那个里面值是“English Word”,MultiLang.zh-cn.resx里面写的是“汉字:”。
    下边是代码
    ---------------------------------code------------------------
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Label Label2;
    protected System.Web.UI.WebControls.Label Label1;
     
    private void Page_Load(object sender, System.EventArgs e)
    {
    string clientCultrue=Request.UserLanguages[0].ToString();
    this.Label1.Text="UserLanguages : "+ clientCultrue;

    try
    {
    //使用客户的浏览器的默认语言来确定显示
    Thread.CurrentThread.CurrentUICulture=new System.Globalization.CultureInfo(clientCultrue);
    }
    catch
    {
    //如果失败,就使用默认语言展示给用户。
        Thread.CurrentThread.CurrentUICulture=new System.Globalization.CultureInfo("en-us");
    }
               

    Assembly assembly;
    ResourceManager rmManager;

    assembly = Assembly.GetExecutingAssembly();
    rmManager = new ResourceManager("ChineseWordTest.MultiLang", assembly);

    string str = rmManager.GetString("Test_Word");
    this.Label2.Text="based on ur cultrue, u should see this word : "+str;
    }
    ------------------------------------end code-------------------------


    注意:
    1:资源文件的命名规则。一定是这样子的了:xxx.文化代码.resx.比如MultiLang.zh-cn.resx。MultiLang是资源名,zh-cn是简体中文的代码。
    2:资源文件好像只能放在根目录下,一旦放进一个文件夹里,好像就出错。
    3:引用时: new ResourceManager("ChineseWordTest.MultiLang", assembly);  格式是:项目名.资源名。 ChineseWordTest是Web项目的名称,MultiLang使资源文件的名称。  至于该调用那一个资源文件,是汉语还是英语,由Thread.CurrentThread.CurrentUICulture来确定,只要指定了这个Cultrue,framework就会自动调用你的不同文化的资源文件了。
    4:如果成功的话,编译成功后会在bin文件夹下创建en-us,zh-cn文件夹。发布时不要改变这个结构。
    5:我是使用的string clientCultrue=Request.UserLanguages[0].ToString();来获取用户的语言代码的。根据发送请求的用户的浏览器的语言列表的第一个来确定。如果失败,证明还没有这个语言包,那么就使用默认语言包(英语)。


    以上是在vs2003下测试通过。
    如果要在asp.net2.0中使用,则稍有不同。

    这时放在Global.asax中的代码。

    --------------------------------------code----------------------
        void Session_Start(Object sender, EventArgs e)
        {
            // Code that runs when a new session is started
            //new a resource manager for each session
            string clientCultrue = Request.UserLanguages[0].ToString();
         
            try
            {
                //使用客户的浏览器的默认语言来确定显示
                Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(clientCultrue);
            }
            catch
            {
                //如果失败,就使用默认语言展示给用户。
                Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-us");
            }

            ResourceManager rmManager;

            rmManager = Resources.MultiLang.ResourceManager;     

            Session.Add("ResourceManager", rmManager);
           
           
        }
    -------------------------end code-----------------------
    注意:
    1:asp.net2.0中应该如此使用:
      rmManager = Resources.MultiLang.ResourceManager;
      而不是在Assembly中取:
      assembly = Assembly.GetExecutingAssembly();
      rmManager = new ResourceManager("ChineseWordTest.MultiLang", assembly);
    2:2.0中创建资源文件时,必须创建一个MultiLang.resx,然后再创建MultiLang.en-us.resx和MultiLang.zh-cn.resx。如果没有MultiLang.resx,则系统就找不到该资源。MultiLang.resx里面可以什么都不写,但是必须得有。
    3:访问资源可以Resources.MultiLang.Key。
      有了资源文件(必须是如此命名的:xxx.resx。而不能是xxx.语言.resx)之后, 代码文件中写入Resources.就可以自动找到该资源名称xxx。继而可以直接引用资源中的key。


    文章来源:http://blog.aspcool.com/dlwang2002/archive/2005/06/20/2462.html
  • 相关阅读:
    net.sf.jsqlparser.statement.select.PlainSelect.getGroupByColumnReferences()Ljava/util/List(版本问题)
    Netty ByteBuf
    Vertx session 使用须知
    用Vert.x shiro jdbcRealm对restful api鉴权
    Vert.x发送 HTTP/HTTPS请求及重定向
    解决“hao123”劫持浏览器主页
    cannot find module bcrypt_lib.node
    nodejs运行项目报错TypeError: db.collection is not a function
    [Java] Stream flatMap
    [Spring Security] Authotization
  • 原文地址:https://www.cnblogs.com/flyfish/p/349539.html
Copyright © 2020-2023  润新知