簡體   English   中英

更改CultureInfo C#

[英]Change CultureInfo c#

我為WebApp創建了3個選項慣用法。 此慣用語在所有頁面的“按鈕”中設置。 第一個選項慣用法設置為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);
        }
    }
}

我需要用在HomePage中設置User的選項設置CurrentInfo ,如果此CurrentInfo與眾不同。

例:

主頁:我的CurrentInfo是“ en-US”。 主頁:我將慣用語更改為“ es-ES”。 其他頁面:我需要獲得這個新的CurrentInfo(“ es-ES”)。

我清楚嗎?

為了以專業的方式進行制作,您應該了解asp頁面的層次結構,因為您知道任何aspx頁面都從System.Web.Pages擴展而來,因此您必須創建一個名為BasePage的類,該類將從Page擴展而您將覆蓋一些默認功能,這些功能將幫助您大量使用cultureinfo和currency等。並使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();
}
}

我希望這可以幫到你

這不是完整的解決方案,但是向您展示了如何從會話中設置/檢索某些內容-如果您決定采用這種方式。

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

        return string.Empty;
    }
    set 
    { 
        Session["chaveRM"] = value; 
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM