WPF多语言功能简单示例

摘要:
_语言<<_英文标题<Key=“OpenLanguageFileMenuHeader”>_打开语言文件<add key=“Lang”value=“/Resources/Langs/en-us.xaml”/>

一.本功能的原理

1为不同语言创建不同的资源文件,如en-us.xamlzh-cn.xaml

2、在App.xaml加载时根据配置文件的值读取不同的资源文件

3、在各窗体的xaml文件中利用动态绑定显示资源文件内容

4、更改不同语言需修改配置文件的值并重新启动程序,也可获取当前操作系统的语言类型在启动时读取不同的语言资源文件

 

en-us.xaml(zh-cn.xaml将内容改为中文) 

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    

                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    

                    xmlns:s="clr-namespace:System;assembly=mscorlib">

    <s:String x:Key="MainWindowTitle">Localization Demos</s:String>

    <s:String x:Key="LanguageMenuHeader">_Languages</s:String>

    <s:String x:Key="EnglishMenuHeader">_Englishs</s:String>

    <s:String x:Key="ChineseMenuHeader">_EnglishsHeader</s:String>

    <s:String x:Key="OpenLanguageFileMenuHeader">_Open Language Files</s:String>

</ResourceDictionary>

 

 创建配置文件并读取(需引入System.configuration)

  <appSettings>

    <add key="Lang" value="/Resources/Langs/en-us.xaml" />

  </appSettings>

 

public partial class App : Application

    {

        protected override void OnStartup(StartupEventArgs e)

        {

            base.OnStartup(e);

            string langType = ConfigurationManager.AppSettings.Get("Lang");

            App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(langType, UriKind.RelativeOrAbsolute) });

        }

}

动态绑定:

    <StackPanel VirtualizingStackPanel.VirtualizationMode="Recycling" HorizontalAlignment="Left" VerticalAlignment="Top">

        <Label Content="{DynamicResource MainWindowTitle}"/>

        <Label Content="{DynamicResource LanguageMenuHeader}"/>

        <Label Content="{DynamicResource EnglishMenuHeader}"/>

        <Label Content="{DynamicResource ChineseMenuHeader}"/>

        <Label Content="{DynamicResource OpenLanguageFileMenuHeader}"/>

    </StackPanel>

修改配置文件值:

  XmlDocument doc = new XmlDocument();

            doc.Load(path);

            XmlNode node = doc.SelectSingleNode(@"//add[@key='Lang']");

            XmlElement ele = (XmlElement)node;

            ele.SetAttribute("value", Type);

            doc.Save(path);

免责声明:文章转载自《WPF多语言功能简单示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python心得基础篇【5】模块Django ORM相关操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux curl

命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。 语法:# curl [option] [url] 常见参数:   -A/--user-agent <string>...

VS2013快速安装教程

1、下载vs2013安装镜像。VS2013_RTM_ULT_CHS.iso链接: http://pan.baidu.com/s/1mguOdiK 密码: rllz  建议使用百度网盘客户端下载,虽然被人吐槽无数,但还是最稳定的下载方式,其它下载软件可能导致下载后不能使用的情况。2、下载完成后,是一个iso文件,如果是win8(8.1)或者安装了虚拟光驱的电...

正则表达式——RegExp零宽断言

正则表达式之中,支持某匹配对象的前面或者后面满足条件的匹配模式。这种匹配模式叫做零宽断言。 零宽断言的格式类似于(?exp)exp (?<=ing)ing表示匹配对象前面是ing的,ing对象如:singingdancing能匹配第一个 kiss(?=ing)表示匹配对象后面是ing的,内容是kiss对象的如:kissingkissed只能匹配第一个...

STL之六:map/multimap用法详解

转载于:http://blog.csdn.net/longshengguoji/article/details/8547007 map/multimap     使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序。mul...

VS 2010配置Qt 4.8.5

     由于早上偶然的一个念想,今天的宝贵时光就奉献给了Qt的安装及其和VS 2010的配置上了。   说实话,开始时真的查找了资料,包括博客、文库、知道等等,作者们写得都很全面,细致。 但自己动手尝试就是错误百出,本人的装备是win7系统+VS2010旗舰+惠普老机子。   所实话,总共试了多少建议方案已经记不清了,总之有点头晕,朋友们都知道杭州的暑期...

canvas drawImage图片不显示问题

初次学习canvas,用来做笔记记录下遇到的问题及解决方案 这里是要将一张图片写到canvas里,按照网上搜索,初写了段代码,可是却没显示,以为是路径问题,不能跨域名使用,后来改为相对路径后,仍然无效,如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha...