WPF国际化&语言切换

WPF国际化建议使用官方推荐方式,当然也可以通过自己写个类实现,没必要重复造轮子,如下记录过程

添加资源文件

  • 新建文件,并按照语言命名

  • 适当修改生成文件,添加字符lib
    <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=mscorlib">
        
    </ResourceDictionary>

     

  • 开始添加相对应的语言翻译等
    <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=mscorlib">
        <sys:String x:Key="helpImage">Help</sys:String>
    </ResourceDictionary>

     

  • 修改文件生成

引用定义的资源

  • 首先需要定义默认的资源文件,此处先添加默认资源文件,后面详细说如何引用切换资源文件,在APP.xaml中添加引用资源文件
<Application x:Class="ServoStudio.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:ServoStudio"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="lang/EN.xaml"></ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
  • xmal中引用资源,使用DynamicResource,后面加上对应的key即可
<Image Name="helpImage" Source="png/description.png" Cursor="Help" ToolTip="{DynamicResource helpImage}"></Image>
  • 后台中引用,下面介绍两种方式

在属性中设置,设置label的content

label.SetResourceReference(ContentProperty, "Graph1Lable1");

直接设置,设置label的content

label.Content = App.Current.Resources.MergedDictionaries[0]["updateTrueDButton1"] as string

两种方式的区别这里没有详细比较,可能和切换语言后是否直接可以刷新有关,第一种可以直接刷新,第二种不可以,这里没有做验证,在我的应用中需要加载其他配置文件,所以需要重启后再生效

经测试可不使用MergedDictionaries直接使用

label.Content = App.Current.Resources["updateTrueDButton1"] as string

切换资源文件,即语言修改

前面已经设置了默认语言,但是我们应该包根据设置来选择相关语言,所以需要在后台选择设置资源文件

此处给出我的方式,先清除之前的配置,然后加载进来新的,可根据这个demo修改成选择后调用此方法

private void InitLang()
        {
            //总体设置
            App.Current.Resources.MergedDictionaries.Clear();
            ResourceDictionary resourceDictionary = new ResourceDictionary();
            switch (Properties.Settings.Default.lang)
            {
                case "zh-CN":
                    resourceDictionary.Source = new Uri("lang/zh-CN.xaml", UriKind.Relative);
                    break;
                default:
                    resourceDictionary.Source = new Uri("lang/zh-CN.xaml", UriKind.Relative);
                    break;
            }
            App.Current.Resources.MergedDictionaries.Add(resourceDictionary);
}

一些问题

实际使用过程中发现的几个问题

  • 还有需要注意的是这里使用的方式是直接调用了MergedDictionaries[0],所以需要确保该引用值和里面的对应
  • 加载的文件注意是添加到App总的资源中,而不是当前页面的资源

可以直接如下引用2020.5.19完善

  • App.Current.Resources["String22"] as string

随着认知的增长,今天记录东西到了明天可能我就认为他是错的

闻道有先后。。

from:https://blog.csdn.net/shaynerain

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF国际化是一种用于支持多语言的开发技术,可以使应用程序自动切换不同的语言环境。WPF提供了一套机制,允许开发人员在应用程序中以一种简单而灵活的方式实现国际化。以下是如何实现WPF应用程序的自动切换语言的步骤: 1. 创建资源文件:首先,需要为每种语言创建一个资源文件。资源文件是用于存储各种语言的本地化文本信息的文件,以键值对的形式存储。例如,可以创建一个名为"Resources.resx"的默认资源文件,以及其他语言的资源文件,如"Resources.zh-CN.resx"和"Resources.en-US.resx"。 2. 添加控件标记:在XAML文件中,可以使用标记来引用资源文件中的本地化文本。例如,可以使用<TextBlock>标记来显示某个字符串,通过设置Text属性为资源文件中的键值,如Text="{x:Static resx:Resources.Hello}"。 3. 设置语言切换逻辑:在应用程序中,可以为用户提供切换语言的选项。一种常见的方法是创建一个下拉列表框,列出所有支持的语言选项。当用户选择不同的语言时,可以通过修改应用程序的CurrentUICulture属性来实现语言切换。例如,可以使用CultureInfo类将CurrentUICulture设置为选择的新语言,如Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN")。 4. 更新界面:当语言切换后,需要及时更新界面上显示的文本。WPF会自动根据当前的CurrentUICulture来查找并加载对应的资源文件,并将资源文件中的本地化文本应用到界面上对应的控件。 通过以上步骤,可以实现WPF应用程序的自动切换语言功能。使用WPF国际化技术,开发人员可以轻松地为应用程序提供多语言支持,满足不同用户的语言需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值