Var*_*jan 9 .net c# localization winforms
我试图在运行时设置应用程序的CurrentUICulture.但是,我表单中的菜单项保持不变.我是否还需要做一些改变CurrentUICulture的事情?
迟到了派对.但这是我提出的解决方案:
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void mnuCultureEnglish_Click( object sender, EventArgs e ) {
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo( "en-US" );
Controls.Clear();
InitializeComponent();
}
private void mnuCultureGerman_Click( object sender, EventArgs e ) {
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo( "de-DE" );
Controls.Clear();
InitializeComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
从谷歌搜索结果中删除:http://bytes.com/topic/net/answers/468556-change-currentuiculture-controls-doesnt-refresh
更改"CurrentUICulture"不会自动在所有UI控件中生效.
更改"CurrentUICulture"只会影响一些与本地化相关的API.例如,"System.Resources.ResourceManager.GetString(..)",然后它将使用当前"CurrentUICulture"来加载合适的字符串资源.
对于Windows.Form UI控件,您需要在更改"CurrentUICulture"后重新加载所有资源字符串.
假设您的资源实际上是本地化的(请注意,您必须手动执行此操作 - 没有任何内容可以自动执行此操作),您可以在显示第一个窗口之前设置UI文化.例如Main.
编辑:
另外,请确保CurrentUICulture在UI线程上设置.
以下是一些如何刷新UI的示例代码(再次,从此答案顶部的链接中窃取):
System.Threading.Thread.CurrentThread.CurrentUICulture = new
System.Globalization.CultureInfo(lang); //my selected lang from menu
ReloadControlString();
//...
private void ReloadControlString()
{
System.Resources.ResourceManager resources = new
System.Resources.ResourceManager(typeof(FormMain));
this.menuApp.Text = resources.GetString("menuApp.Text");
}
Run Code Online (Sandbox Code Playgroud)
你可以从中获取一些InitializeComponent().
| 归档时间: |
|
| 查看次数: |
9754 次 |
| 最近记录: |