开发者

Programmatically set Culture of User Controls in ASP.NET

开发者 https://www.devze.com 2023-02-08 17:17 出处:网络
I\'d like to programmatically set the culture of my User Control which defines several Labels, Buttons and Textboxes ...

I'd like to programmatically set the culture of my User Control which defines several Labels, Buttons and Textboxes ...

Usually, for aspx-pages you override the InitializeCult开发者_JAVA技巧ure-Method and set Culture and UICulture to achieve this, alas ASCX-Controls do not have this Method, so how exactly would I do this?

I've set up the local resources mycontrol.ascx.de-DE.resx, mycontrol.ascx.resx and mycontrol.ascx.en-GB.resx but only the values of the default file (mycontrol.ascx.resx) are used.

Thanks in advance.

Dennis


The current culture is thread-wide: Page.Culture and Page.UICulture actually set Thread.CurrentThread.CurrentCulture and Thread.CurrentThread.CurrentUICulture under the hood.

If the user control is defined in your page markup, I don't think there's anything you can do. If you load it with LoadControl(), you can temporarily override the current thread's culture before the call and restore it afterward, but it would be quite awkward:

protected void Page_Load(object sender, EventArgs e)
{
    // Some code...

    CultureInfo oldCulture = Thread.CurrentThread.CurrentCulture;
    CultureInfo oldUICulture = Thread.CurrentThread.CurrentUICulture;
    Thread.CurrentThread.CurrentCulture = yourNewCulture;
    Thread.CurrentThread.CurrentUICulture = yourNewUICulture;

    try {
        Controls.Add(LoadControl("yourUserControl.ascx"));
    } finally {
        Thread.CurrentThread.CurrentCulture = oldCulture;
        Thread.CurrentThread.CurrentUICulture = oldUICulture;
    }

    // Some other code...
}


I also spent hours on this problem and finally got This solution. You only have to override the FrameworkInitialize() instead of initilizeculture(), eg:

protected override void FrameworkInitialize()
{
    String selectedLanguage = LanguageID;
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);

    base.FrameworkInitialize();
}

Jus Put this code inside your ascx.cs file, This override function does not need to be called.


I used the following code to change the language for asp.net mvc in my project page

public ActionResult ChangeCulture (Culture lang, string returnUrl)
     {
         if (returnUrl.Length> = 3)
         {
             returnUrl = returnUrl.Substring (3);
         }
         return redirect ("/" + lang.ToString () + returnUrl);
     }

also I used usercontrol (ascx) on the same page.when I changed language with actionlink is changed viewpage language but user control pageload event isn't capture changing so viewpage's language changes but usercontrol's language doesn't change

0

精彩评论

暂无评论...
验证码 换一张
取 消