C# 在C中创建多语言应用程序
我的申请是用英语写的,我想把它换成多语言版本。但我给了我的应用程序一个名为langauge的ToolStripMenuItem,并为阿拉伯语、韩语和英语版本添加了一个子菜单,而不是用户在区域设置中更改默认语言 据我所知,需要做三件事: 在该语言的click事件中编写代码,使用阿拉伯语 创建相应的resx文件 我还将Form localizable属性设置为True 这是我在Form1中添加到程序中的代码C# 在C中创建多语言应用程序,c#,winforms,localization,C#,Winforms,Localization,我的申请是用英语写的,我想把它换成多语言版本。但我给了我的应用程序一个名为langauge的ToolStripMenuItem,并为阿拉伯语、韩语和英语版本添加了一个子菜单,而不是用户在区域设置中更改默认语言 据我所知,需要做三件事: 在该语言的click事件中编写代码,使用阿拉伯语 创建相应的resx文件 我还将Form localizable属性设置为True 这是我在Form1中添加到程序中的代码 //this variable indicates the current language
//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,版本=2.0.0.0,区域性=neutral,PublicKeyToken=b77a5c561934e089
这有什么区别吗
EDIT1:在浏览时,我发现我还需要生成一个designer.cs文件来响应它。搜索引擎谈到安装了一些RazorGenerator。我尝试从包管理器安装它,但失败了。有这个灯吗
EDIT2:这就是我所做的。我创建了另外两个.resx文件,一个用于韩语,另一个用于阿拉伯语,并尝试更改形式语言,在编码视图中效果非常好。然而,仍然缺少一些东西。首先,我仍然无法根据需要通过单击工具条语言选项来更改语言。其次,我甚至试图将我的系统的语言环境更改为韩语,但应用程序没有收到任何更改。它总是以英文显示,你应该使用system.globalization来解决这个问题,你不必创建资源文件,只需更改表单中的语言并开始编辑,但为什么它不会影响你呢 因为,c在重置应用程序后会执行此操作,所以您应该保存有关应用程序状态的数据,然后重新启动应用程序,然后使用所需的本地化重新加载应用程序。如果你不想这样做,不要使用全球化,按行设置整个ui,
Sry在我的状态下,我在公交车上不能给你确切的代码,但这是你应该怎么做的,应用程序。重新启动我想或者附近的某件事:谢谢你的建议。下面是我所做的。我创建了另外两个resx文件,一个是韩语的,另一个是阿拉伯语的,并尝试按照您的建议更改形式语言,效果非常好。然而,仍然缺少一些东西。首先,我仍然无法根据需要通过单击工具条语言选项来更改语言。其次,我甚至试图将我的系统的区域设置更改为韩语,但应用程序没有收到任何更改。是的,你不能按照你的意愿这样做,但关于另一件事,我认为有一个本地化类告诉你哪个本地化用户在他的系统上,如果你没有找到留言,我今晚退房,现在是1点,我6点回来。。。CyaSry昨晚头痛,我不确定,但我认为这是您应该在开始时执行的代码:system.threading.thread.CurrentThread.CurrentCalture=system.globalization.CaltureInfoen-CA;我在整本书中没有找到其他代码,还有一件事要做,你可以将所有资源存储在单独的空项目中,一旦你需要特定的资源,然后加载特定的程序集,但我自己我从来没有这样做过,也没有简要的解释