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