全部,我有一個本地化的WinForms應用程序。我創建了一個設施,用戶可以在運行時更改應用程序的文化/語言。爲了避免做任何事情,當用戶確實想要改變文化時,會提示應用程序必須重新啓動以使文化更改生效(合理,因爲這不會經常發生)。然後,我將需要的新語言作爲字符串存儲在我的一個設置XML文件(「de-DE」,「en-US」,「en-GB」等)中。然後,當應用程序重新啓動,如果需要的話我切換到所需要的文化:在運行時失敗時更改應用程序文化
// Main constructor.
public SqlEditorForm(string[] args)
{
// Load settings.
username = Environment.UserName;
userSettings = UserSettings.Instance();
advUserSettings = AdvanceUserSettings.Instance();
CheckChangeCurrentCulture();
isInitialising = true;
InitializeComponent();
...
}
private void CheckChangeCurrentCulture()
{
//if (!Debugger.IsAttached)
// Debugger.Launch();
if (advUserSettings.DefaultCulture)
return;
else
{
CultureInfo culture = new CultureInfo(advUserSettings.CustomCultureString);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
}
現在從VS2012在調試/發佈模式下運行時,這種機制工作正常。但是,當我在各種機器上安裝應用程序(運行Windows 7(x86/x64))時,此機制不再起作用,也就是說文化不會從機器默認EVER切換。
我附上調試器所安裝應用程序,並改變文化的代碼被調用和邏輯似乎是工作,並沒有異常拋出,但文化/語言不會改變。我一直在討論很多問題,但找不到適用於這個特定問題的問題。
爲什麼這個機制從VS2012的工作,但不適合安裝的應用程序?爲了達到我想要的行爲,我需要做些什麼?
謝謝你的時間。
注,我也試圖與更換調用CheckChangeCurrentCulture();
:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("de-DE");
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
也可以工作VS2012中(調試和發佈模式),但不與安裝的應用程序。我也改變了機器文化開始 - >控制面板 - >地區和語言德國(「de-DE」)希望應用程序和.NET框架來檢測我有這種文化可用並使用它。安裝的應用程序也失敗了。
你有沒有試過,當你設置的文化會發生什麼 「手動」 像 Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture( 「EN-US」) ; ? Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(「en-US」);那它有用嗎? – duDE 2013-03-25 10:31:46
是的,我有。我已經更新了這個問題來反映這一點。謝謝你的時間。 – MoonKnight 2013-03-25 10:34:57