本文共 2243 字,大约阅读时间需要 7 分钟。
很多国际化的程序都提供了多语言的选项,这样方便不同国家的使用者更方便的使用软件。这篇博客中将介绍在WPF中实现多语言的方式。
方式一,使用WPF动态资源的方式实现。先简单介绍下StaticResource和DynamicResource,这两者的区别在于动态资源改变后会实时的体现出来,而静态资源只加载一次,后面对资源的任何改变都不会体现出来。显而易见,使用动态资源会降低系统的性能。
新建一个工程,添加ZH.xaml与EN.xaml两个资源文件,用于放置界面显示的文案;
MainWindow.xaml:
切换语言方法:
private string _currentLan = string.Empty; public MainWindow() { InitializeComponent(); _currentLan = "ZH"; } private void SwitchButton_Click(object sender, RoutedEventArgs e) { string message = TryFindResource("Message") as string; MessageBox.Show(message); // TODO: 切换系统资源文件 ResourceDictionary dict = new ResourceDictionary(); if(_currentLan == "ZH") { dict.Source = new Uri(@"Resources\Language\EN.xaml", UriKind.Relative); _currentLan = "EN"; } else { dict.Source = new Uri(@"Resources\Language\ZH.xaml", UriKind.Relative); _currentLan = "ZH"; } Application.Current.Resources.MergedDictionaries[0] = dict; }
运行效果:
代码点击下载。
方式二,Xml文件+XPath的方式来实现。
项目结构:
新建两个xml文件,Chinese.xml和English.xml。
你好 WPF世界!
使用:
切换语言:
private string _currentLang = string.Empty; public MainWindow() { InitializeComponent(); _currentLang = "Zh"; } private void SwitchButton_Click(object sender, RoutedEventArgs e) { // TODO: Switch Language XmlDataProvider provider = TryFindResource("Lang") as XmlDataProvider; if (provider == null) return; if(_currentLang == "Zh") { provider.Source = new Uri("Languages/English.xml", UriKind.Relative); _currentLang = "En"; } else { provider.Source = new Uri("Languages/Chinese.xml", UriKind.Relative); _currentLang = "Zh"; } provider.Refresh(); }
运行效果:
代码点击下载。
当然实现多语言的方式有很多方式,例如:
感谢您的阅读。谢谢!
转载地址:http://xaxna.baihongyu.com/