インターフェイスのローカリゼーションについて学んでおり、Visual Studio 2008 で WPF を使用しています。私のプログラムの目標は、ユーザーがボタンをクリックしてウィンドウに表示される言語を変更できるようにすることです。ユーザーがボタンをクリックしたときに、コード ビハインド セクションで実行時にリソース ファイルを変更しようとしています。
この質問を読みました: Code Behind でリソース ファイル言語 (resx) をプログラムで変更する
ただし、ボタンクリックイベントで上記の変更を行いたいため、これは私にとっては解決策ではないようです。これをやろうとすると、他の質問の保護された関数がアクションイベント内に入らないため、このソリューションを使用できないようです。
前の質問に基づいて、運が悪かったのは次のとおりです。
/// 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");
}
}
私はここ数年、学校や独学でプログラミングを行ってきたので、まったく初心者というわけではありません。ただし、私は 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");
}
}
}