在C#中创建多语言应用程序

时间:2014-05-14 02:42:28

标签: c# winforms localization

我的应用程序仅使用英语,我想将其切换为多语言版本。但是,我没有在regionaal设置中更改默认语言,而是为我的应用程序提供了一个名为langauge的“ToolStripMenuItem”,并添加了阿拉伯语,韩语和英语版本的子菜单。

据我所知,有三件事需要 - :

  1. 在Langauage子菜单的点击事件中编写代码说“阿拉伯语”
  2. 创建相应的resx文件
  3. 我还将Form localizable属性设置为“True”
  4. 这是我在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文件,一个用于韩语,另一个用于阿拉伯语,并尝试更改表单的语言,它在编码视图中工作得很好。然而,仍然缺少某些东西。首先,我仍然无法根据需要单击工具条语言选项来更改语言。其次,我甚至尝试将系统的语言环境更改为韩语,但应用程序没有任何变化。它始终以英文显示

1 个答案:

答案 0 :(得分:0)

你应该使用system.globalization这个问题,你不必创建资源文件,只需更改表单中的语言并开始编辑c#为你做,但为什么它不会影响?!

由于c#在重置应用程序后执行此操作,您应该执行的操作是保存有关应用程序状态的数据,并在重新加载应用程序后重新启动应用程序并进行所需的本地化。如果你不想这样做,不要使用全球化,请按行设置整个ui, 我觉得在我的州(我在公交车上)不能给你准确的代码,但是你应该怎么做,Application.Restart()我认为或者附近有一些东西< / p>