用c#创建一个多语言应用程序

本文关键字:一个 语言 应用程序 创建 | 更新日期: 2023-09-27 18:03:08

我的应用程序仅用英语制作,我想将其切换到多语言版本。但是,我没有让用户在区域设置中更改默认语言,而是给我的应用程序提供了一个名为language的"ToolStripMenuItem",并添加了阿拉伯语、韩语和英语版本的子菜单。

据我所知有三件事是必需的:

  1. 在语言子菜单的点击事件中编写代码说"阿拉伯语"
  2. 创建相应的resx文件
  3. 我还设置了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文件,一个用于韩语,另一个用于阿拉伯语,并尝试改变语言的形式,它在编码视图中工作得很好。然而,仍然缺少一些东西。首先,我仍然无法通过按需单击工具条语言选项来更改语言。其次,我甚至试图将系统的语言设置更改为韩语,但应用程序没有更改。它总是以英文显示

用c#创建一个多语言应用程序

您应该使用system。全球化对于这个问题来说,你不需要创建资源文件,只需要在你的表单中改变语言并开始编辑c#就可以了,但是为什么它没有影响呢?

因为c#是在你重置你的应用程序之后做的,你应该做的是保存关于你的应用程序状态的数据,然后重新启动你的应用程序,然后重新加载它。如果你不想那样做,不要使用全球化,设置整个ui,对不起,在我的状态下(我在公交车上)不能给你确切的代码,但这是你应该怎么做,application。restart()我认为或接近

的东西