WPF 中英文多语言切换动态加载资源字典的方式_C#

XAML:

<Grid>
<StackPanel Margin="20">
<Button x:Name="buttonNewTaskWindow" Height="30" Width="100" Content="{DynamicResource buttonNewTaskWindow}"/>
<Button x:Name="buttonProperty" Height="30" Width="100" Margin="0 20 0 0" Content="{DynamicResource buttonProperty}"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 20 0 0">
<RadioButton x:Name="rdbChinese" Content="简体中文" Checked="rdbChinese_Checked"/>
<RadioButton x:Name="rdbFChinese" Content="繁體中文" Checked="rdbFChinese_Checked"/>
<RadioButton x:Name="rdbEnglish" Content="English" Checked="rdbEnglish_Checked"/>
</StackPanel>
</StackPanel>
</Grid

CodeBehind:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();

rdbChinese.IsChecked = true;
}

private void rdbEnglish_Checked(object sender, RoutedEventArgs e)
{
UpdateLanguage(@"en-us.xaml");
}

private void rdbChinese_Checked(object sender, RoutedEventArgs e)
{
UpdateLanguage(@"zh-cn.xaml");
}

private void rdbFChinese_Checked(object sender, RoutedEventArgs e)
{

UpdateLanguage(@"ft.xaml");
}

private void UpdateLanguage(string resourcePath)
{
List<ResourceDictionary> dictionaryList = new List<ResourceDictionary>();

foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
{
dictionaryList.Add(dictionary);
}

ResourceDictionary resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(resourcePath));

Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
}
}

zh-cn.xaml :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:CsWPFTest">
<s:String x:Key="buttonNewTaskWindow">新建任务</s:String>
<s:String x:Key="buttonProperty">任务属性</s:String>
</ResourceDictionary>

en-us.xaml :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:CsWPFTest">
<s:String x:Key="buttonNewTaskWindow">New Task</s:String>
<s:String x:Key="buttonProperty">Task Property</s:String>
</ResourceDictionary>

ft.xaml :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:CsWPFTest">
<s:String x:Key="buttonNewTaskWindow">新建任務</s:String>
<s:String x:Key="buttonProperty">任務屬性</s:String>
</ResourceDictionary>

App.XAML:

<Application x:Class="CsWPFTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CsWPFTest"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ft.xaml"/>
<ResourceDictionary Source="en-us.xaml"/>
<ResourceDictionary Source="zh-cn.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>