用c#创建一个多语言应用程序
本文关键字:一个 语言 应用程序 创建 | 更新日期: 2023-09-27 18:03:08
我的应用程序仅用英语制作,我想将其切换到多语言版本。但是,我没有让用户在区域设置中更改默认语言,而是给我的应用程序提供了一个名为language的"ToolStripMenuItem",并添加了阿拉伯语、韩语和英语版本的子菜单。
据我所知有三件事是必需的:
- 在语言子菜单的点击事件中编写代码说"阿拉伯语"
- 创建相应的resx文件
- 我还设置了Form localizable属性为"True"
这是我在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和里面,只是为了测试添加了两个东西:
这一美元。Text = Abc M البرمجيات تطبيق ويب
这一美元。Name = Form1
然而,当我运行我的应用程序,并尝试点击语言阿拉伯语,它仍然没有改变任何东西。
有没有人能帮我找出我哪里错了,或者我错过了什么?
也是默认值。我发现另一列写着
这一美元。类型= System.Windows.Forms。形式,System.Windows。表单,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089
这有什么区别吗?
EDIT1:在浏览时,我发现我还需要生成一个与之相应的designer.cs文件。搜索引擎说要安装一些"RazorGenerator"。我尝试从包管理器安装它,但失败了。有什么头绪吗
这是我所做的。我创建了两个额外的.resx文件,一个用于韩语,另一个用于阿拉伯语,并尝试改变语言的形式,它在编码视图中工作得很好。然而,仍然缺少一些东西。首先,我仍然无法通过按需单击工具条语言选项来更改语言。其次,我甚至试图将系统的语言设置更改为韩语,但应用程序没有更改。它总是以英文显示您应该使用system。全球化对于这个问题来说,你不需要创建资源文件,只需要在你的表单中改变语言并开始编辑c#就可以了,但是为什么它没有影响呢?
因为c#是在你重置你的应用程序之后做的,你应该做的是保存关于你的应用程序状态的数据,然后重新启动你的应用程序,然后重新加载它。如果你不想那样做,不要使用全球化,设置整个ui,对不起,在我的状态下(我在公交车上)不能给你确切的代码,但这是你应该怎么做,application。restart()我认为或接近