以编程方式在ASP.NET中设置用户控件的文化

Den*_*ger 4 c# asp.net resources user-controls ascx

我想以编程方式设置我的用户控件的文化,它定义了几个标签,按钮和文本框......

通常,对于aspx页面,您重写InitializeCulture-Method并设置Culture和UICulture来实现这一点,唉ASCX-Controls没有这个方法,那么我究竟该怎么做呢?

我已经设置了本地资源mycontrol.ascx.de-DE.resx,mycontrol.ascx.resx和mycontrol.ascx.en-GB.resx,但只使用了默认文件(mycontrol.ascx.resx)的值.

提前致谢.

丹尼斯

小智 7

我也花了好几个小时来解决这个问题,最后得到了这个解 你只需要覆盖FrameworkInitialize()而不是 initilizeculture(),例如:

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

    base.FrameworkInitialize();
}
Run Code Online (Sandbox Code Playgroud)

Jus将此代码放在ascx.cs文件中,不需要调用此覆盖函数.


Fré*_*idi 5

目前的文化是线程级:Page.CulturePage.UICulture实际设置Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture引擎盖下.

如果在页面标记中定义了用户控件,我认为您无法做任何事情.如果你加载它LoadControl(),你可以在调用之前暂时覆盖当前线程的文化并在之后恢复它,但这将是非常尴尬的:

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...
}
Run Code Online (Sandbox Code Playgroud)