2013-08-09 1 views
0

Я создал 3 варианта идиомы для своего WebApp. Эта идиома установлена ​​на кнопках на всех страницах. В первом идиоме опции задано значение CurrentInfo.Change CultureInfo C#

Мой вопрос в том, кто я могу установить на других страницах эту Идиому, которую пользователь установил на главной странице?

, например, на каждой странице, в Page_Load У меня есть этот конфиг:

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

My Button событие в домашней странице. (В основном это то же самое для всех страниц)

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"); 
} 

Мой класс Idiom

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 с опцией, что пользователь был установлен в HomePage и если отличается от этого CurrentInfo.

Пример:

Главная: Мой CurrentInfo является "EN-US". Главная: Я меняю свой Идиом на «es-ES». Другая страница: Мне нужно получить это новое CurrentInfo («es-ES»).

Am I clear?

+3

Сохраните выбранный вариант как-то. ViewState, Session и т. Д. – melancia

+0

Но как передать значение сеанса на другую страницу, например? Мне нужно передать мой CurrentInfo, который был установлен в HomePage на любую другую страницу. – CaioVJesus89

+0

Я вижу, вы боретесь с очень основными понятиями в отношении ASP.NET. Переменная Session видна в любом месте сайта, как только она объявлена ​​где-то. – melancia

ответ

1

, чтобы сделать это профессионально, вы должны знать иерархию страницы asp, , так как вы знаете, что любая страница aspx простирается от System.Web.Pages, поэтому вам нужно создать класс под названием BasePage, который будет простирается от страницы, и вы переусердствуете некоторые функции по умолчанию, которые помогут вам много в культуре и валюте и т. д. и сделайте вашу страницу 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(); 
} 
} 

Я надеюсь, что это было полезно

0

Это не полное решение, но показывает, как можно установить/извлечь что-то из сессии - если вы решите пойти по этому пути.

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^