[英]Multilingual application: CultureInfo manual change error
我想要一个选项,以更改C#,Visual Studio中的语言。 我有保存默认语言项的Form1.resx
。 我也有Form1.en.resx
和Form1.en-US.resx
,其中包含英语翻译。 (当然,我只需要其中一个,但是在测试时我创建了两个。)
当我运行该应用程序时,将显示默认语言标题。 但是下面的代码应该覆盖这个:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", false);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
当我检查CurrentCulture
或CurrentUICulture
值时,在此代码之后,它们的确确实更改为“ en-US”,但是使用了相同的resx文件,因此字幕不会更改。 因此,对于示例label1.Text
保持相同,尽管在Form1.en-US.resx
具有不同的值。
我应该如何解决这个问题?
附加信息:我使用.NET Framework 4.5和Visual Studio2012。如果需要,可以在此处使用项目文件(非常简单的项目): https : //dl.dropboxusercontent.com/u/36411041/Multi.zip
更改语言时,请尝试重新创建表单。 一种可能性:
/// <summary>
/// Program entry point
/// </summary>
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// ...
// close the form after you change the language:
// DialogResult = DialogResult.Cancel;
// exit with any other value
DialogResult result;
do
{
MainForm form = new MainForm();
result = form.ShowDialog()
} while(result == DialogResult.Cancel);
}
Sinatr在显示表单后更改语言是正确的:无法完成。 但是,如果您之前知道所需的语言,则可以使用以下代码来完成。
public Form1()
{
//Set the wanted language here
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//...
}
感谢您在解决此问题时所提供的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.