我的应用程序仅使用英语,我想将其切换为多语言版本。但是,我没有在regionaal设置中更改默认语言,而是为我的应用程序提供了一个名为langauge的“ToolStripMenuItem”,并添加了阿拉伯语,韩语和英语版本的子菜单。
据我所知,有三件事需要 - :
这是我在Form1()
中添加到我的程序中的代码//this variable indicates the current language in use
CultureInfo CurrentLocale;
public Form1()
{
InitializeComponent();
valueInit();
//MessageBox.Show(rfidCard.PORT + "");
}
//Lets start adding the multilingual code here
//change the language in real time
private void ChangeLanguage(string lang)
{
CurrentLocale = new CultureInfo(lang);
foreach (Control c in this.Controls)
{
ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));
resources.ApplyResources(c, "$this");
RefreshResources(this, resources);
}
}
//refresh all the controls e sub-controls of the form
private void RefreshResources(Control ctrl, ComponentResourceManager res)
{
ctrl.SuspendLayout();
res.ApplyResources(ctrl, ctrl.Name, CurrentLocale);
foreach (Control control in ctrl.Controls)
RefreshResources(control, res); // recursion
ctrl.ResumeLayout(false);
}
private void englishToolStripMenuItem_Click(object sender, EventArgs e)
{
ChangeLanguage("en-US");
}
private void arabicToolStripMenuItem_Click(object sender, EventArgs e)
{
ChangeLanguage("ar-SA");
}
private void koreanToolStripMenuItem_Click(object sender, EventArgs e)
{
ChangeLanguage("ko-KR");
}
// the code ends here
其次我添加了一个名为Form1.ar-SA.resx的resx文件,其中仅用于测试添加了两件事:
$ this.Text = Abc Mالبرمجياتتطبيقويب
$ this.Name = Form1
然而,当我运行我的应用程序并尝试单击语言阿拉伯语时,它仍然没有改变任何东西。
有人可以帮我找到我错在哪里或者我错过了什么?
同样在default.resx中,我发现了另一栏
$ this.Type = System.Windows.Forms.Form,System.Windows.Forms,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
这有什么不同吗?
EDIT1:浏览时我发现我还需要创建一个与它相对应的designer.cs文件。搜索引擎谈到安装了一些“RazorGenerator”。我尝试从包管理器安装它但它失败了。请点亮这个
EDIT2:这就是我所做的。我创建了两个额外的.resx文件,一个用于韩语,另一个用于阿拉伯语,并尝试更改表单的语言,它在编码视图中工作得很好。然而,仍然缺少某些东西。首先,我仍然无法根据需要单击工具条语言选项来更改语言。其次,我甚至尝试将系统的语言环境更改为韩语,但应用程序没有任何变化。它始终以英文显示
答案 0 :(得分:0)
你应该使用system.globalization这个问题,你不必创建资源文件,只需更改表单中的语言并开始编辑c#为你做,但为什么它不会影响?!
由于c#在重置应用程序后执行此操作,您应该执行的操作是保存有关应用程序状态的数据,并在重新加载应用程序后重新启动应用程序并进行所需的本地化。如果你不想这样做,不要使用全球化,请按行设置整个ui, 我觉得在我的州(我在公交车上)不能给你准确的代码,但是你应该怎么做,Application.Restart()我认为或者附近有一些东西< / p>