我正在學習接口本地化,並在Visual Studio 2008中使用WPF。我的程序目標是讓用戶可以單擊按鈕並更改顯示的語言在窗口中。我一直試圖在運行時在代碼隱藏部分更改我的資源文件,當用戶單擊按鈕時。在單擊事件中更改C#代碼中的資源文件
我已經經歷了這個問題閱讀:Programmatically change resource file language (resx) in Code Behind
然而,這似乎並沒有爲我一個解決方案,因爲我想打一個按鈕單擊事件上面的變化。當我嘗試這樣做時,好像我無法使用此解決方案,因爲來自其他問題的受保護功能無法進入操作事件。
這裏是我試過,沒有運氣,基於取消了原來的問題:
/// Change to English-US
private void Button2_Click(object sender, RoutedEventArgs e)
{
protected override void InitializeCulture()
{
base.InitializeCulture();
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
}
}
/// Change to German
private void Button3_Click(object sender, RoutedEventArgs e)
{
protected override void InitializeCulture()
{
base.InitializeCulture();
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
}
}
我在學校和我本人的幾年現在已經被編程,所以我我不是絕對的noobie。不過,我是C#和WPF的新手,這正是我現在正在使用的。從我所知道的,你不能在函數內部有一個函數,就像我在我的代碼中一樣。我把它放在那裏的唯一原因是因爲我需要它來處理按鈕單擊事件。
幫助與此將不勝感激。
這是新代碼:
namespace LocalizationConcept
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
Properties.Resources.Culture = new CultureInfo(ConfigurationManager.AppSettings["Culture"]);
///InitializeComponent();
}
/// Exit Button
private void button1_Click(object sender, RoutedEventArgs e)
{
System.Environment.Exit(0);
}
private void ChangeCulture(string cultureKey)
{
try
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureKey);
}
catch (Exception err)
{
System.Environment.Exit(0);
}
}
private void Button2_Click(object sender, RoutedEventArgs e)
{
ChangeCulture("en-US");
}
private void Button3_Click(object sender, RoutedEventArgs e)
{
ChangeCulture("de-DE");
}
}
}
我完全刪除了之前已有的按鈕單擊事件,並將其輸入。編譯器沒有問題,但單擊按鈕時語言不會更改。我將發佈新代碼。 - 也許很重要的一點是,我有一個app.config文件,在我運行程序之前我一直用它來改變語言。 –
我剛剛添加了一個類似的帖子,有一個很好的答案,儘管多一點參與的鏈接。 –
我試圖本地化我的界面中的所有文本。有按鈕,文本框和選項卡上的文本。這個鏈接也適用於那些人嗎?我問的唯一原因是他們總是將字符串編碼到XAML窗口中作爲示例。 –