WPF国际化的实现方法(WpfExtensions.Xaml)

本文介绍了如何在.NET项目中使用WpfExtensions框架和I18nResource.resx文件实现多语言支持,包括创建资源文件、生成I18nProvider.tt文件以及在代码中访问翻译文本的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  1. 为每种语言添加.resx资源文件,放在I18nResource文件夹下
    在这里插入图片描述
    I18nResource.resx 代表英语,名字不要改
    I18nResource.zh-CN.resx 代表中文
    国家简写
    创建完I18nResource.resx文件后会生成一个I18nResource.Designer.cs文件
  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. 如果修改了resx文件,需要把I18nProvider.tt重新生成一下,右键运行自定义工具
  2. 在代码中访问

I18nManager.Instance.Get(I18nProvider.Input_User_Name).ToString()

  1. 修改了 WpfExtensions源代码,增加了在WPF设计界面显示默认值的功能,如果不提供默认值,会选择一种语言显示
Content="{markup:I18n {x:Static i18n:I18nProvider.Login},DefaultValue=111}"
  1. 多语言开源项目
    Accelerider.Windows

TerminalMACS.ManagerForWPF

WpfExtensions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangle63

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值