栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

WPF国际化的实现方法

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

WPF国际化的实现方法

一、用xaml资源文件实现

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

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

内容:
zh-CN.xaml


    你好世界!
    国际化程序

en-US.xaml


    Hello world!
    Internationalization App

使用:

 

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

    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、使用资源
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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号