繁体   English   中英

多语言应用程序:CultureInfo手动更改错误

[英]Multilingual application: CultureInfo manual change error

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

当我运行该应用程序时,将显示默认语言标题。 但是下面的代码应该覆盖这个:

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

当我检查CurrentCultureCurrentUICulture值时,在此代码之后,它们的确确实更改为“ en-US”,但是使用了相同的resx文件,因此字幕不会更改。 因此,对于示例label1.Text保持相同,尽管在Form1.en-US.resx具有不同的值。

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

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

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

    /// <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);
    }

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)
    {
        //...
    }

感谢您在解决此问题时所提供的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM