0

我想要一个选项,以更改 C#、Visual Studio 中的语言。我有Form1.resx其中包含默认语言项目。我也有Form1.en.resx, 和Form1.en-US.resx, 其中包含英文翻译。(当然我只需要其中一个,但在测试时我创建了两个。)

当我运行应用程序时,会出现默认语言标题。但是下面的代码应该覆盖它:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US", false);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);

当我检查CurrentCultureorCurrentUICulture值时,在此代码之后,它们确实更改为“en-US”,但使用了相同的 resx 文件,因此标题不会更改。因此,例如label1.Text,尽管它在 中具有不同的值,但它保持不变Form1.en-US.resx

我应该如何解决这个问题?

附加信息:我使用 .NET Framework 4.5 和 Visual Studio 2012。项目文件(非常简单的项目)可在此处获得,如果您需要的话:https ://dl.dropboxusercontent.com/u/36411041/Multi.zip

4

2 回答 2

0

更改语言时尝试重新创建表单。一种可能:

    /// <summary>
    /// Program entry point
    /// </summary>
    [STAThread]
    public static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        // ...

        // close the form after you change the language:
        //     DialogResult = DialogResult.Cancel;
        // exit with any other value

        DialogResult result;
        do
        {
             MainForm form = new MainForm();
             result = form.ShowDialog()
        } while(result == DialogResult.Cancel);
    }
于 2013-07-18T12:16:11.017 回答
0

Sinatr 关于在表格显示后更改语言是正确的:这是不可能的。但是,如果您在那之前就知道想要的语言,那么下面的代码应该可以做到。

    public Form1()
    {
        //Set the wanted language here
        CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");

        CultureInfo.DefaultThreadCurrentCulture = culture;
        CultureInfo.DefaultThreadCurrentUICulture = culture;
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;


        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        //...
    }

感谢您在解决这个问题时提供的帮助。

于 2013-07-18T19:33:43.857 回答