如何在运行时更改CurrentCulture?

era*_*zap 18 c# asp.net culture

我需要根据每种文化的资源文件在运行时更改文化.

我需要根据指定.resx文件的两种文化来更改表单中控件的属性

resorces1.aspx.resx // default 
resorces1.aspx.he-IL.resx // hebrew culture 
Run Code Online (Sandbox Code Playgroud)

我可以使用fallback资源加载页面,或者在pageload上提供UICulture = "he-IL"值,并且可以使用所需资源加载.

问题是我需要在运行时进行这些更改.

1 ..在我更改按钮单击事件的值后

    btn_change_Click(....)
    {
        UICulture = "he-IL" ;
    }
Run Code Online (Sandbox Code Playgroud)

它仍然返回到"en-US"的初始值

如何在运行时提交对UICulture的更改?

2 ..如果我不知道它是"en-US",我如何引用回退资源文件?

max*_*oin 48

更改当前的UI文化:

System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("he-IL");
Run Code Online (Sandbox Code Playgroud)

或更好,检索he-IL文化的缓存只读实例:

System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("he-IL");
Run Code Online (Sandbox Code Playgroud)

在运行时,ASP.NET使用与CurrentUICulture属性的设置最匹配的资源文件.线程的UI文化是根据页面的UI文化设置的.例如,如果当前UI文化是西班牙语,则ASP.NET使用WebResources.es.resx文件的编译版本.如果当前UI文化不匹配,则ASP.NET使用资源回退.它首先搜索特定文化的资源.如果没有这些,它会搜索中立文化的资源.如果找不到这些,ASP.NET将加载默认资源文件.在此示例中,默认资源文件是WebResource.resx.