0

我想要一个选项,在C#中更改Visual Studio的语言。我有Form1.resx其中包含默认语言项目。我也有Form1.en.resxForm1.en-US.resx,其中包含英文翻译。 (当然,我只需要其中一个,但是在测试时我创建了两个)。多语言应用程序:CultureInfo手动更改错误

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

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 Studio 2012 项目文件(很简单的项目)是avaible这里如果你需要他们:https://dl.dropboxusercontent.com/u/36411041/Multi.zip

+0

纠正我,如果我错了,但本地化在crapwinforms发生只有当你创建一个窗体的实例。如果表格已经显示 - 这是失败的。您必须在更改语言或使用自定义本地化管理器后重新创建表单。我发现最好的方法是使用反射来即时翻译所有内容。 – Sinatr

+0

好的,但我该如何解决这个问题,改变语言,然后重新启动应用程序。这将如何工作? – weiszam

回答

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

谢谢你的帮助,一边搞清楚这一点。

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); 
    } 
+0

如果我想用不同的语言重新启动软件? SetCompatibleTextRenderingDefault有一些错误:必须在应用程序中创建第一个IWin32Window对象之前调用SetCompatibleTextRenderingDefault。 – weiszam