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