https://blog.csdn.net/eyupaopao/article/details/120090431
resx资源文件实现
resx资源文件,实现的过程比第一种复杂,但resx文件本身编辑比较简单,维护起来比较方便。需要用到的框架:WpfExtensions.Xaml
- 为每种语言添加.resx资源文件,放在I18nResource文件夹下
I18nResource.resx 代表英语,名字不要改
I18nResource.zh-CN.resx 代表中文
国家简写
创建完I18nResource.resx文件后会生成一个I18nResource.Designer.cs文件 - 添加一个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 #>));
<#
}
#>
}
}
- 如果修改了resx文件,需要把I18nProvider.tt重新生成一下,右键运行自定义工具
- 在代码中访问
I18nManager.Instance.Get(I18nProvider.Input_User_Name).ToString()
- 多语言开源项目
Accelerider.Windows
TerminalMACS.ManagerForWPF文章来源:https://www.toymoban.com/news/detail-660551.html
WpfExtensions文章来源地址https://www.toymoban.com/news/detail-660551.html
到了这里,关于WPF国际化的实现方法(WpfExtensions.Xaml)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!