WPF国际化的实现方法

一、用xaml资源文件实现

用xaml实现比较简单,缺点是后期软件越来越大,xaml编辑起来就变得相当麻烦。

首先每种需要支持的语言创建一个xaml文件。如图:

在这里插入图片描述

内容:
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=mscorlib">
    <sys:String x:Key="hello">你好世界!</sys:String>
    <sys:String x:Key="title">国际化程序</sys:String>
</ResourceDictionary>

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=mscorlib">
    <sys:String x:Key="hello">Hello world!</sys:String>
    <sys:String x:Key="title">Internationalization App</sys:String>
</ResourceDictionary>

使用:

 <Label Content="{DynamicResource hello}" />

要切换的时候,加载对应的文件,即可完成切换。代码如下:
英文

    ResourceDictionary resource = (ResourceDictionary)Application.LoadComponent(new Uri("Language/en-US.xaml", UriKind.Relative)) ;     
	if (resource != null)
    {
        Application.Current.Resources.MergedDictionaries.Add(resource);
    }

中文

    ResourceDictionary resource = (ResourceDictionary)Application.LoadComponent(new Uri("Language/zh-CN.xaml", UriKind.Relative)) ;     
	if (resource != null)
    {
        Application.Current.Resources.MergedDictionaries.Add(resource);
    }

二、resx资源文件实现

resx资源文件,实现的过程比第一种复杂,但resx文件本身编辑比较简单,维护起来比较方便。需要用到的框架:WpfExtensions.Xaml

1、为每种语言添加.resx资源文件。
2、添加一个I18nProvider.tt文件,与资源文件放在同一个文件夹,visual studio会自动解析这个文件,并扫描resx资源文件,并生成一个I18nProvider.cs文件,代码:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="System.Xml.Linq" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Xml.Linq" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".cs" #>

using System.Windows;

<#
    const string ResourceFileName = "I18nResource.resx";
#>

namespace <#=System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("NamespaceHint").ToString()#>
{
	public static class I18nProvider
	{
        
<#
    var resourceKeys = XElement.Load(this.Host.ResolvePath(ResourceFileName))
        .Elements("data")
        .Select(item => item.Attribute("name")?.Value)
        .Where(item => item != null);

	var resourceDesignerName = Path.GetFileNameWithoutExtension(ResourceFileName);

    foreach (string resourceKey in resourceKeys)
    {
#>
		public static readonly ComponentResourceKey <#= resourceKey #> = new ComponentResourceKey(typeof(<#= resourceDesignerName #>), nameof(<#= resourceDesignerName #>.<#= resourceKey #>));
<#
    }
#>
	}
}

图:1、2步完成之后
在这里插入图片描述

3、用Nuget包管理器搜索安装WpfExtensions.Xaml框架
4、加载资源文件。
public App()
{
	I18nManager.Instance.Add(I18nResource.I18nResource.ResourceManager);
}
5、在mainwindow.xaml中引入命名空间。
 xmlns:markup="clr-namespace:WpfExtensions.Xaml.Markup;assembly=WpfExtensions.Xaml"
 xmlns:i18n="clr-namespace:Eyu.I18nDEMO.I18nResource"
6、使用资源
<Label Content="{markup:I18n {x:Static i18n:I18nProvider.hello}}" />
7、切换语言的方法
public static void SetLanguage(string languageTag)
{
     CultureInfo currentUICulture = I18nManager.Instance.CurrentUICulture;
     if (languageTag == currentUICulture.Name) return;
     CultureInfo newCulture = new CultureInfo(languageTag);
     I18nManager.Instance.CurrentUICulture = newCulture;
 }
8、源代码

https://gitee.com/eyupaopao/wpfi18n-demo.git

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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国际化技术,开发人员可以轻松地为应用程序提供多语言支持,满足不同用户的语言需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值