WPF 多语言实现

简介: 原文:WPF 多语言实现很多国际化的程序都提供了多语言的选项,这样方便不同国家的使用者更方便的使用软件。这篇博客中将介绍在WPF中实现多语言的方式。 方式一,使用WPF动态资源的方式实现。先简单介绍下StaticResource和DynamicResource,这两者的区别在于动态资源改变后会实时的体现出来,而静态资源只加载一次,后面对资源的任何改变都不会体现出来。
原文: WPF 多语言实现

很多国际化的程序都提供了多语言的选项,这样方便不同国家的使用者更方便的使用软件。这篇博客中将介绍在WPF中实现多语言的方式。

方式一,使用WPF动态资源的方式实现。先简单介绍下StaticResource和DynamicResource,这两者的区别在于动态资源改变后会实时的体现出来,而静态资源只加载一次,后面对资源的任何改变都不会体现出来。显而易见,使用动态资源会降低系统的性能。

新建一个工程,添加ZH.xaml与EN.xaml两个资源文件,用于放置界面显示的文案;

 

MainWindow.xaml:

    <Grid>
        <StackPanel>
            <TextBlock Text="{DynamicResource Greeting}"/>

            <Button Content="{DynamicResource Language}" Width="100" Height="35" Click="SwitchButton_Click"/>
        </StackPanel>
    </Grid>

切换语言方法:

        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。

<?xml version="1.0" encoding="utf-8"?>
<language>
  <resources>
    <resource name="Greeting">你好 WPF世界!</resource>
  </resources>
</language>

使用:

<TextBlock>
    <TextBlock.Text>
       <Binding Source="{StaticResource Lang}" XPath="resource[@name='Greeting']" />
    </TextBlock.Text>
</TextBlock>

切换语言:

        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://www.codeproject.com/Articles/35159/WPF-Localization-Using-RESX-Files

感谢您的阅读。谢谢!

目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
3209 0
|
C# 数据可视化 开发工具
WPF实现选项卡效果(1)——使用AvalonDock
原文:WPF实现选项卡效果(1)——使用AvalonDock 简介   公司最近一个项目,软件采用WPF开发,需要实现类似于VS的选项卡(或者是浏览器的选项卡)效果。
2271 0
|
4月前
|
开发者 C# 自然语言处理
WPF开发者必读:掌握多语言应用程序开发秘籍,带你玩转WPF国际化支持!
【8月更文挑战第31天】随着全球化的加速,开发多语言应用程序成为趋势。WPF作为一种强大的图形界面技术,提供了优秀的国际化支持,包括资源文件存储、本地化处理及用户界面元素本地化。本文将介绍WPF国际化的实现方法,通过示例代码展示如何创建和绑定资源文件,并设置应用程序语言环境,帮助开发者轻松实现多语言应用开发,满足不同地区用户的需求。
86 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1204 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
1087 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2415 0
|
C#
WPF特效-实现3D足球效果
原文:WPF特效-实现3D足球效果 WPF 实现 3D足球效果,效果图如下:  每个面加载不同贴图。                                                          ...
921 0
|
算法 C# 容器
WPF特效-实现弧形旋转轮播图
原文:WPF特效-实现弧形旋转轮播图        项目遇到,琢磨并实现了循环算法,主要处理循环替换显示问题       (如:12张图组成一个圆弧,但总共有120张图需要呈现,如何在滑动中进行显示块的替换,并毫无卡顿)        处理的自己感觉比较满意,记录一下。
2159 0
|
C#
wpf采用Xps实现文档显示、套打功能
原文:wpf采用Xps实现文档显示、套打功能 近期的一个项目需对数据进行套打,用户要求现场不允许安装office、页面预览显示必须要与文档完全一致,xps文档来对数据进行处理。Wpf的DocumentView 控件可以直接将数据进行显示,xps也是一种开放式的文档,如果我们能够替换里面的标签就最终实现了我们想要的效果。
1804 0
|
文字识别 C# Windows
通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)
原文:通通WPF随笔(4)——通通手写输入法(基于Tablet pc实现)          从我在博客园写第一篇博客到现在已经有1年半了,我的第一篇博客写的就是手写识别,当时,客户需求在应用中加入手写输入功能,由于第三方的手写输入法都无法定制界面,所以领导决定自主开发,所以我就很简单地基于Tablet pc写了一个WPF控件,由于几个瓶颈问题,导致这个输入功能只能在我们的UI框架里使用,而无法做到像输入法那样可以输入到任意窗口。
2224 0