WPF 中英文多语言切换动态加载资源字典的方式
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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了