【问题标题】:Change CultureInfo c#更改 CultureInfo c#
【发布时间】:2013-08-09 12:00:18
【问题描述】:

我为我的 WebApp 创建了 3 个选项习语。 这个成语在所有页面的Buttons中都设置了。第一个选项成语设置为 CurrentInfo。

我的问题是,用户在首页设置的这个成语,我可以在其他页面设置谁?

例如,对于每个页面,在 Page_Load 我都有这个配置:

Idioma.MudaCultura(CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString());

主页中的我的按钮事件。 (基本上所有页面都一样)

protected void es_OnChange(object sender, EventArgs e)
{
    Idioma.MudaCultura("es");
    lblWelcome.Text = Idioma.RetornaMensagem("welcome");
    btnRequestAccess.Text = Idioma.RetornaMensagem("btnRequestAccess");
    btnTickets.Text = Idioma.RetornaMensagem("btnTickets");
    btnManager.Text = Idioma.RetornaMensagem("btnManager");
    btnManageFolders.Text = Idioma.RetornaMensagem("btnManageFolders");
}

我的课堂习语

public class Idioma
{
    private string chaveRM = "";

    public string ChaveRM
    {
        get { return chaveRM; }
        set { chaveRM = value; }
    }

    public static string RetornaMensagem(string NomeMensagem) 
    {
        ResourceManager resx = new ResourceManager(typeof(RM)); 
        return resx.GetString(NomeMensagem, System.Threading.Thread.CurrentThread.CurrentCulture); 
    } 

    public static void MudaCultura(string cultura)
    { 
        if (cultura=="pt") 
        { 
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("pt", true); 
        }

        else if(cultura=="en") 
        { 
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en", true); 
        }

        else if (cultura == "es")
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es", true);
        }
    }
}

我需要设置CurrentInfo 选项,即用户在主页中设置,如果与当前信息不同。

例子:

主页:我的 CurrentInfo 是“en-US”。 Home:我将我的成语改为“es-ES”。 其他页面:我需要获取这个新的 CurrentInfo("es-ES")。

我说清楚了吗?

【问题讨论】:

  • 以某种方式保存选定的选项。 ViewState、Session 等
  • 但是我如何将会话值传递给其他页面,例如?我需要将在 HomePage 中设置的 CurrentInfo 传递给任何其他页面。
  • 我看到您正在为有关 ASP.NET 的非常基本的概念而苦苦挣扎。 Session 变量在网站的任何地方都可见,只要在某处声明。
  • 是的,我是任何主题的初学者。对不起!感谢您的帮助!现在效果很好! :)

标签: c# asp.net .net cultureinfo


【解决方案1】:

为了专业地制作,你应该知道asp页面的层次结构, 如您所知,任何 aspx 页面都从 System.Web.Pages 扩展,因此您必须创建一个名为 BasePage 的类,该类将从 Page 扩展,并且您将覆盖一些默认功能,这些功能将在文化信息和货币等方面为您提供很多帮助。和让你的 aspx 页面从 BasePage 扩展

更改文化后需要重新加载页面才能生效

查看以下示例:

public class BasePage: Page
{ 
  public BasePage()
  {
    //
    // TODO: Add constructor logic here
    //


  }
  protected override void OnPreInit(EventArgs e)
  {
    Page.Theme = "Default";
    base.OnPreInit(e);
  }
  protected override void OnInit(EventArgs e)
  {
    base.OnInit(e);
  }
protected override void InitializeCulture()
{
    string CurrencySymbol = "";
    string lang = string.Empty;
    HttpCookie cookie = Request.Cookies["ddl_LanguageSwitcher"];

    if (cookie != null && cookie.Value != null)
    {
        lang = cookie.Value;
        CultureInfo eg = CultureInfo.CreateSpecificCulture(lang);
        IsArabic = (lang.IndexOf("ar-") >= 0);
        if (IsArabic)
        {
            CurrencySymbol = "جم";
        }
        else
        {
            CurrencySymbol = "EGP";
        }

        DateTimeFormatInfo di = new DateTimeFormatInfo();
        di.FullDateTimePattern = "dd/MM/yyyy HH:mm:ss";
        di.ShortDatePattern = "dd/MM/yyyy";
        eg.DateTimeFormat = di;
        NumberFormatInfo ni = new NumberFormatInfo();
        ni.CurrencySymbol = CurrencySymbol;
        ni.CurrencyDecimalDigits = 2;
        ni.NumberDecimalDigits = 2;
        //ni.CurrencyGroupSeparator = "-";
        ni.NumberGroupSeparator = "";
        eg.NumberFormat = ni;
        System.Threading.Thread.CurrentThread.CurrentUICulture = eg;
        System.Threading.Thread.CurrentThread.CurrentCulture = eg;
        _culture = Request.Cookies["ddl_LanguageSwitcher"].Value;
    }
    else
    {
        if (string.IsNullOrEmpty(lang)) lang = BL.Settings.DefaultLanguage;
        CultureInfo eg = CultureInfo.CreateSpecificCulture(lang);
        IsArabic = (lang.IndexOf("ar-") >= 0);
        if (IsArabic)
        {
            CurrencySymbol = "جم";
            //eg.NumberFormat.CurrencySymbol = "جم";
        }
        else
        {
            CurrencySymbol = "EGP";
            //eg.NumberFormat.CurrencySymbol = "EGP";
        }

        DateTimeFormatInfo di = new DateTimeFormatInfo();
        di.FullDateTimePattern = "dd/MM/yyyy HH:mm:ss";
        di.ShortDatePattern = "dd/MM/yyyy";
        eg.DateTimeFormat = di;

        NumberFormatInfo ni = new NumberFormatInfo();
        ni.CurrencySymbol = CurrencySymbol;
        ni.CurrencyDecimalDigits = 2;
        ni.NumberDecimalDigits = 2;
        //ni.CurrencyGroupSeparator = "-";
        ni.NumberGroupSeparator = "";
        eg.NumberFormat = ni;
        System.Threading.Thread.CurrentThread.CurrentUICulture = eg;
        System.Threading.Thread.CurrentThread.CurrentCulture = eg;
        HttpCookie cookie2 = new HttpCookie("ddl_LanguageSwitcher");
        cookie2.Value = lang;
        Response.SetCookie(cookie2);
        _culture = "ar-EG";
    }
    base.InitializeCulture();
}
}

希望对你有帮助

【讨论】:

    【解决方案2】:

    这不是完整的解决方案,但向您展示了如何从 Session 中设置/检索某些内容 - 如果您决定采用这种方式。

    public string ChaveRM
    {
        get 
        { 
            if (Session["chaveRM"] != null) 
                return Session["chaveRM"].ToString();
    
            return string.Empty;
        }
        set 
        { 
            Session["chaveRM"] = value; 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多