• 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(@"ResourcesLanguageEN.xaml", UriKind.Relative);
    
                    _currentLan = "EN";
                }
                else
                {
                    dict.Source = new Uri(@"ResourcesLanguageH.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

    感谢您的阅读。谢谢!

  • 相关阅读:
    LightOJ1031 Easy Game(区间DP)
    POJ1325 Machine Schedule(二分图最小点覆盖集)
    ZOJ1654 Place the Robots(二分图最大匹配)
    LightOJ1025 The Specials Menu(区间DP)
    POJ2288 Islands and Bridges(TSP:状压DP)
    LightOJ1021 Painful Bases(状压DP)
    LightOJ1013 Love Calculator(DP)
    POJ1780 Code(欧拉路径)
    POJ1201 Intervals(差分约束系统)
    ZOJ2770 Burn the Linked Camp(差分约束系统)
  • 原文地址:https://www.cnblogs.com/wangchaoyuana/p/7523635.html
Copyright © 2020-2023  润新知