WPF多语言实现
参考:https://www.cnblogs.com/chenshibao/p/18937359
开发工具:Visual Studio2022
使用资源字典实现。首先创建在项目下新建多语言目录,新建语言资源

en-US.xaml内容
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=netstandard">
<sys:String x:Key="Home">Home</sys:String>
<sys:String x:Key="Chinese">Chinese</sys:String>
<sys:String x:Key="English">English</sys:String>
</ResourceDictionary>
zh-CN.xaml内容
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=netstandard">
<sys:String x:Key="Home">首页</sys:String>
<sys:String x:Key="Chinese">中文</sys:String>
<sys:String x:Key="English">英文</sys:String>
</ResourceDictionary>
App.xaml合并资源
<Application
x:Class="WpfLocalization.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfLocalization"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/WPFLocalization;component/Language/zh-CN.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
MainWindow.xaml
<Window
x:Class="WpfLocalization.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfLocalization"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
d:DataContext="{d:DesignInstance Type=local:MainWindowModel}"
mc:Ignorable="d">
<Grid>
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button
Padding="5"
Command="{Binding ChangeLanguageCommand}"
CommandParameter="zh-CN"
Content="{DynamicResource Chinese}" />
<Button
Margin="20,0,0,0"
Padding="5"
Command="{Binding ChangeLanguageCommand}"
CommandParameter="en-US"
Content="{DynamicResource English}" />
</StackPanel>
<TextBlock Text="{DynamicResource Home}" />
</StackPanel>
</Grid>
</Window>
MainWindow.xaml.cs的构造方法里面指定DataContext
using System.Windows;
namespace WpfLocalization
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowModel();
}
}
}
MainWindowModel.cs
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Windows;
namespace WpfLocalization
{
public partial class MainWindowModel : ObservableObject
{
/// <summary>
/// 切换语言
/// </summary>
/// <param name="language"></param>
[RelayCommand]
public void ChangeLanguage(string language)
{
var dictionaries = Application.Current.Resources.MergedDictionaries;
// 移除当前语言资源
var existingTheme = dictionaries
.FirstOrDefault(d => d.Source != null &&
(d.Source.OriginalString.Contains("Language/zh-CN.xaml") ||
d.Source.OriginalString.Contains("Language/en-US.xaml")));
if (existingTheme != null)
{
dictionaries.Remove(existingTheme);
}
//添加新语言资源
dictionaries.Add(new ResourceDictionary() { Source = new Uri("Language/" + language + ".xaml", UriKind.Relative) });
}
}
}
运行效果


浙公网安备 33010602011771号