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 #>));
<#
}
#>
}
}