现测试一个解决方案,使用以下方式定义用户选择的语言
string s = "zh-CN";
Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);使用<%=Resources.labels.ch %>的方式从全局资源中取得相应的string,但是在服务器控件,如button、label等用如下方式无法取得相应的string
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="<%=Resources.labels.ch %>" />
只能在后台使用this.Button1.Text = (String)GetGlobalResourceObject("labels", "ch");的方式给控件赋值,而html控件确可以,如<INPUT id="BtnPrint" type="button" value="<%=Resources.labels.ch %>" />,不知道为什么,看哪位高手了解,请指点一下,谢谢

解决方案 »

  1.   

    说一下我刚做的一个项目的方案吧。开发工具:Visual Web Developer 2005 Express App_GlobalResources
    下面建立 资源文件
    XXXX.resx
    XXXX.en-us.resx
    重载Page类的InitializeCulture方法。Thread.CurrentThread.CurrentUICulture = new CultureInfo(s);
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(s);ASPX页面里面Text="<%$ Resources:“资源文件名”, “资源Key名” %>"
      

  2.   

    可以写一个派生自Button的新控件,加一个属性用来读取Resource文件
    下面是伪码:public class ResourceButton : Button {  public string ResourceExpress {
        get; set;
      }  override Render(...) {
        if(string.IsNullOrEmpty(Text))
            Text = GetResource(ResourceExpress);    base.Render(...);
      }}
      

  3.   

    很简单,因为服务器端控件不能简单的用<%=Resources.labels.ch %>来得到,必须用$表达式计算得到, 如:<%$ Resources:Globalization, ButtonReturnText %>
      

  4.   

    参考:http://hi.baidu.com/ooofcu/blog/item/e552cb3d45362bc09e3d623f.html
    多语言其实可能涉及的问题很多.如果有只是UI上的caption,可以参考上面的文章.
      

  5.   

    其实我是将代码放在了pageload中,而应该放到InitializeCulture中即可