精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談靈活的WPF程序多語言支持

開發 開發工具
軟件開發常常會被要求支持多國語言。而且想要軟件有更多的受眾,做好本地化無疑是必然的選擇。對于WPF程序而言,支持多語言的方式實在是多種多樣。本文將介紹靈活的WPF程序多語言支持。

<!--[if !supportLists]--> <!--[endif]-->

微軟的WPF程序多語言支持官方解決方案:使用Resource,并把Resource按語言編譯成獨立DLL,程序會根據系統當前語言設置,自動加載最合適的資源。(這種方法靈活性較差,而且不能滿足多樣的需求,于是網上各種多語言方案紛至沓來。)這里有一篇對官方方案的進一步解釋。

使用XML保存語言文件:放進來只是因為網上的確有這么個解釋方案,雖然沒有什么實用價值……,Resource本來就是XML,還用自己定義一個XML,還XMLDataProvider,還XML-based Data Binding,看著都累……
使用Project Resource的:和上面的類似,不過把字符串全放在Project Resource里,然后用ObjectDataProvider,然后也是使用Data Binding。

Assembly自帶語言:每個Assembly里放上支持的所有語言,使用配置文件設置軟件語言,比微軟的方案更進一步,但是WPF程序多語言支持問題也還是存在的。

<!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]--><!--[if !supportLists]--><!--[endif]-->

上面所有的方案都沒有同時解決下面這兩個問題:

<!--[if !supportLists]--> <!--[endif]-->

運行時切換語言。

加入新語言,而不需要重新編譯軟件。

<!--[if !supportLists]--><!--[endif]-->
下面,就來介紹一種更靈活的,解決了上面兩個問題的WPF程序多語言支持方案。

基本方式還是使用Resource,只不過Resource是運行時才加載進來的。解決方案的結構如下圖所示。

<!--[if !vml]-->

解決方案的結構

<!--[endif]-->

1. 解決方案的結構

其中各個語言文件的資源文件放在Resources/Langs文件夾中,這些資源文件不會被編譯到Assembly中,編譯之后的文件結構如下圖所示,語言文件被原樣復制到Output文件夾中。

<!--[if !vml]-->

編譯后的文件結構

<!--[endif]-->

2. 編譯后的文件結構

先來看看程序的運行效果,再來看代碼會比較直觀一些。

<!--[if !vml]-->

英文界面

<!--[endif]-->

3. 英文界面

<!--[if !vml]-->

漢語界面

<!--[endif]-->

4. 漢語界面

下面就是這個界面的代碼。

  1. MainWindow  
  2. <Window x:Class="Localization.DemoWindow" 
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  5.     xmlns:c="clr-namespace:Localization.Backend.Commands" 
  6.     Title="{DynamicResource MainWindowTitle}" 
  7.     Width="230" Height="150"> 
  8.     <DockPanel LastChildFill="False"> 
  9.         <Menu DockPanel.Dock="Top"> 
  10.             <Menu.CommandBindings> 
  11.                 <x:Static Member="c:LanguageCommands.OpenLanguageBinding"/> 
  12.             Menu.CommandBindings> 
  13.             <MenuItem Header="{DynamicResource LanguageMenuHeader}"> 
  14.                 <MenuItem Header="{DynamicResource EnglishMenuHeader}" 
  15.                           Click="OnLoadEnglishClick"/> 
  16.                 <MenuItem Header="{DynamicResource ChineseMenuHeader}" 
  17.                           Click="OnLoadChineseClick" /> 
  18.                 <Separator/> 
  19.                 <MenuItem Command="c:LanguageCommands.OpenLanguage" 
  20.                           Header="{DynamicResource OpenLanguageFileMenuHeader}"/> 
  21.             MenuItem> 
  22.         Menu> 
  23.     DockPanel> 
  24. Window> 

所有的界面上的文字,都使用DynamicResource引用資源文件中的字符串。資源文件的格式如下(英文資源文件示例):

  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  2.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  3.     xmlns:s="clr-namespace:System;assembly=mscorlib"> 
  4.     <s:String x:Key="MainWindowTitle">Localization Demos:String> 
  5.     <s:String x:Key="LanguageMenuHeader">_Languages:String> 
  6.     <s:String x:Key="EnglishMenuHeader">_Englishs:String> 
  7.     <s:String x:Key="ChineseMenuHeader">漢語(_C)s:String> 
  8.     <s:String x:Key="OpenLanguageFileMenuHeader">_Open Language Files:String> 
  9. ResourceDictionary> 

語言文件沒有編譯到Assembly中,使用起來就有些不太一樣。下面是App.xaml文件中設置Application的默認加載語言的方式。

  1. <Application x:Class="Localization.App" 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4.     StartupUri="UI\DemoWindow.xaml"> 
  5.     <Application.Resources> 
  6.         <ResourceDictionary> 
  7.             <ResourceDictionary.MergedDictionaries> 
  8.                 <ResourceDictionary Source="pack://siteOfOrigin:,,,/Resources/Langs/en-US.xaml"/> 
  9.             ResourceDictionary.MergedDictionaries> 
  10.         ResourceDictionary> 
  11.     Application.Resources> 
  12. Application> 

前面的內容基本上沒有什么和別的方案不一樣的地方,下面才是最重要的一點,就是如何運行時切換語言的呢?答案就是,只要把上面代碼里的ResourceDictionary替換掉就OK了,界面會自動刷新。下面就是實現替換功能的代碼。  

  1. public class LanguageHelper  
  2.     {  
  3.         /// <summary> 
  4.         ///   
  5.         /// summary> 
  6.         /// <param name="languagefileName">param> 
  7.         public static void LoadLanguageFile(string languagefileName)  
  8.         {  
  9.             Application.Current.Resources.MergedDictionaries[0] = new ResourceDictionary()  
  10.             {  
  11.                 Source = new Uri(languagefileName, UriKind.RelativeOrAbsolute)  
  12.             };  
  13.         }  
  14.     } 

參數languagefileName可以是文件的絕對路徑,如:C:\en-US.xaml或是和App.xaml里一樣的相對路徑。順便解釋一下,那個“pack://siteOfOrigin:,,,”無非就是當前執行程序的所在目錄。

以目前的測試結果來看,即使界面上有大量的細粒度文字。切換語言的速度也是一瞬間的事兒,如果慢,也是因為xaml文件過大,讀文件用了不少時間。

WPF程序多語言支持缺陷

其實這才是最重要的,很多文章介紹一項技術的時候都會把這個技術夸得天花亂墜,卻對潛在的缺陷或問題避而不談。

缺陷就在于,不是所有的東西都是可以運行是更新的。比如***一個菜單項是用Command實現的,如下代碼所示:

  1. <MenuItem Command="c:LanguageCommands.OpenLanguage" 
  2.  Header="{DynamicResource OpenLanguageFileMenuHeader}"/> 

RoutedUICommand本身就已經定義了Text屬性用來顯示在界面上,完全沒有必要為使用了這個Command的MenuItem設置Header屬性。但是這里為什么還是設置了呢?因為目前還沒有找到簡單的方案改變Command的Text后能自動地更新界面。因為Command的Text屬性不是一個Dependency Property。為了自動更新界面,不得不為MenuItem設置Header屬性。

【編輯推薦】

  1. Visual Studio 2010截圖曝光 以WPF開發UI
  2. 為WPF項目創建單元測試
  3. 詳解Silverlight和WPF互相擴展
  4. 教你如何理解WPF中的Template類
  5. 詳談WPF開發中的數據虛擬化
責任編輯:彭凡 來源: cnblogs
相關推薦

2011-07-26 10:09:08

iPhone 多語言 國際化

2009-08-03 17:33:01

ASP.NET多語言支

2014-07-09 09:20:06

WPFWPF應用

2010-01-06 13:41:51

.NET Framew

2022-07-19 16:54:50

iPaaSServerlessFaaS平臺

2023-08-09 09:36:04

Azure AI微軟

2024-01-12 10:01:07

框架編程

2020-04-14 09:50:02

2014-04-16 14:50:20

Spark

2009-08-31 17:13:09

2024-02-06 12:50:08

AI訓練

2009-08-25 10:44:50

C#實現多語言

2011-08-05 17:54:33

Cocoa Touch 多語言

2012-04-19 11:40:21

Titanium

2025-06-23 10:15:00

VSCodeMaple Mono編程

2021-06-29 21:48:32

開源語言架構

2021-09-07 10:17:35

iOS多語言適配設計

2013-07-04 10:54:27

Windows 8.1系統升級

2024-05-09 08:14:09

系統設計語言多語言

2013-01-09 16:21:56

醫療護理成功案例
點贊
收藏

51CTO技術棧公眾號

男女做爰猛烈刺激| 欧美一级免费在线观看| 亚洲伊人成人网| 精品国产一区二区三区小蝌蚪| 在线免费不卡电影| 中文字幕乱码一区二区三区| 超碰在线播放97| 亚洲综合日韩| 色妞久久福利网| 欧美性猛交乱大交| 超级碰碰久久| 中文字幕日本不卡| 狠狠色噜噜狠狠狠狠色吗综合| 四虎影院在线免费播放| 偷拍欧美精品| 日韩精品欧美激情| 思思久久精品视频| 五月天av在线| 亚洲欧美激情插| 欧美精品一区二区视频| 国产成人av免费看| 日韩高清在线一区| 久久久久久成人精品| 最近中文字幕在线mv视频在线| 精品一区二区三区免费看| 欧美日韩一区二区精品| 中文字幕第50页| 国产福利第一视频在线播放| 国产.欧美.日韩| 国产精品专区第二| 国产精品777777| 欧美日韩福利| xvideos国产精品| 可以直接看的无码av| 免费精品一区二区三区在线观看| 色狠狠桃花综合| 日韩精品在线观看av| 老司机免费在线视频| 久久久久久99精品| 久久99精品久久久久久秒播放器| 精品国产av一区二区三区| 琪琪一区二区三区| 国产精品91久久| 日韩精品一区二区亚洲av| 欧美色图麻豆| 久久6免费高清热精品| 黄色裸体一级片| 狠狠做深爱婷婷综合一区| 亚洲精品720p| 91久久精品国产| wwwwww国产| 91久久中文| 欧美激情视频三区| 国产精品成人免费观看| 91精品啪在线观看国产81旧版| 国产亚洲欧美视频| 无码 人妻 在线 视频| 最新亚洲精品| 亚洲欧美日韩区| 欧美丰满少妇人妻精品| 欧美一区二区三区红桃小说| 亚洲成人免费在线视频| 男男一级淫片免费播放| aiss精品大尺度系列| 日韩色在线观看| 国产吃瓜黑料一区二区| 91麻豆精品国产91久久久久推荐资源| 欧美久久婷婷综合色| 日本免费观看网站| 国产成人精品一区二区三区免费| 欧美亚洲高清一区二区三区不卡| 午夜国产一区二区三区| 国产精品高潮久久| 制服丝袜在线91| 深夜做爰性大片蜜桃| 人交獸av完整版在线观看| 亚洲欧洲精品一区二区精品久久久| 亚洲欧美丝袜| 呦呦在线视频| 婷婷国产v国产偷v亚洲高清| 日日鲁鲁鲁夜夜爽爽狠狠视频97| av有声小说一区二区三区| 日本乱码高清不卡字幕| 欧美午夜aaaaaa免费视频| 欧美成人福利| 日韩欧美一区中文| 一区二区免费在线观看视频| 在线日韩一区| 色999日韩欧美国产| 亚洲国产123| 亚洲午夜精品久久久久久app| 992tv成人免费影院| 一级久久久久久| 国产一区二三区好的| 国产精品二区三区| 青青草观看免费视频在线| 中文字幕av资源一区| 日韩中文在线字幕| 丝袜老师在线| 7777女厕盗摄久久久| 日韩无码精品一区二区| 黄色不卡一区| 欧美精品999| 欧美特级黄色片| 国产成人日日夜夜| 日韩jizzz| 日本大片在线播放| 欧美性受极品xxxx喷水| 欧美一级片在线免费观看| 久9久9色综合| 欧美风情在线观看| 五月激情丁香网| kk眼镜猥琐国模调教系列一区二区| 日韩欧美亚洲在线| 91福利在线免费| 欧美久久一二区| 色一情一交一乱一区二区三区 | a一级免费视频| 一区二区高清| 91视频免费进入| 国产精品毛片一区二区三区四区| 亚洲一区二区三区美女| 五月天亚洲视频| 婷婷成人综合| 欧美精品videos另类日本| 夜夜嗨aⅴ一区二区三区| 91网址在线看| 很污的网站在线观看| 日韩一区二区三区四区五区| 亚洲男人天堂视频| 国产无精乱码一区二区三区| 久久精品72免费观看| 欧美日韩一区综合| 青青青免费在线视频| 欧美变态tickling挠脚心| 黄色香蕉视频在线观看| 美女精品视频在线| 国产精品影院在线| 青草av.久久免费一区| 国产综合欧美在线看| 在线免费观看a视频| 欧美三区在线视频| 亚洲国产av一区| 国内一区二区三区| 2014亚洲精品| 久久日韩视频| 欧美精品777| 欧美性生交大片| 男女视频一区二区| 亚洲欧洲日本国产| 欧美成人毛片| 播播国产欧美激情| 国产又粗又大又爽| 国产精品狼人久久影院观看方式| 爆乳熟妇一区二区三区霸乳| 最近国产精品视频| 国产精品久久久久久久久借妻 | 日韩激情在线播放| 福利一区二区在线| 国产精品成人久久电影| 大奶一区二区三区| 97视频在线免费观看| 熟妇人妻中文av无码| 精品国产乱码久久久久久天美| 精品久久久久久无码人妻| 亚洲国产99| 久久99精品久久久久子伦| 中文字幕影音在线| 国产一区二区三区在线看| 免费精品一区二区| 国产精品剧情在线亚洲| 91视频这里只有精品| 亚洲精品小说| 国产成人精品一区二区三区福利| 丁香花在线高清完整版视频| 亚洲精品成人av| 黄瓜视频在线免费观看| 中文字幕av资源一区| 樱花草www在线| 精品二区视频| 欧洲精品码一区二区三区免费看| 草莓视频成人appios| 久久精品免费电影| 好吊色在线观看| 91福利国产成人精品照片| 天堂а√在线中文在线鲁大师| 国产麻豆91精品| 国产视频一视频二| 成人在线国产| av在线不卡一区| 亚洲人体影院| 不卡中文字幕av| 五月婷婷六月丁香| 欧美日韩精品一区二区天天拍小说| 成人观看免费视频| 久久久久久久久99精品| www.久久com| 亚洲资源av| 亚洲最新免费视频| 亚洲日本三级| 亚洲一区中文字幕| 电影一区二区三| 久国内精品在线| 高清av在线| 欧美一区二区三区白人 | 色综合天天在线| 中国女人特级毛片| 成人一区二区三区中文字幕| 男女啪啪网站视频| 在线日韩中文| a级网站在线观看| 国产一区二区三区电影在线观看| 亚洲综合国产精品| 成人四虎影院| 青青久久av北条麻妃海外网| av小次郎在线| 少妇久久久久久| 色播色播色播色播色播在线 | 色婷婷中文字幕| 欧美一级片在线看| 国产成人av免费| 欧美日韩在线视频观看| 玖玖爱免费视频| 亚洲欧洲精品成人久久奇米网| 熟女少妇一区二区三区| 顶级嫩模精品视频在线看| 老司机久久精品| 日韩不卡手机在线v区| 欧美二区在线视频| 激情综合网址| 激情成人开心网| 一区二区三区午夜视频| 亚洲欧美精品| 青草国产精品| 日韩亚洲不卡在线| 蜜桃a∨噜噜一区二区三区| 操一操视频一区| 精品一区二区三区中文字幕| 国产日韩中文字幕在线| 国产综合av| 青青a在线精品免费观看| 98色花堂精品视频在线观看| 久久久久久久一| 黄页网站在线观看免费| 欧美激情2020午夜免费观看| 超碰人人在线| 美女av一区二区三区 | 久久不见久久见中文字幕免费| 好看的日韩精品| 欧美激情极品| 久久久久久亚洲精品不卡4k岛国| 国产图片一区| 久久久99爱| 免费欧美一区| 亚洲国产精品久久久久婷婷老年 | 欧美交换配乱吟粗大25p| 欧美freesex交免费视频| 9色视频在线观看| 欧美精品一级| 日本丰满少妇xxxx| 在线综合视频| 韩国日本美国免费毛片| 久久成人综合网| 99视频在线观看视频| 国产成人亚洲综合a∨婷婷| 99riav国产精品视频| 成人美女视频在线观看| 亚洲色图14p| 国产三级欧美三级| 亚洲熟女毛茸茸| 亚洲一区二区视频在线观看| 日韩无码精品一区二区三区| 在线视频国产一区| 国产精品乱码一区二区| 亚洲成人av资源网| 欧美日本韩国一区二区| 亚洲夜晚福利在线观看| 国产1区在线| 97激碰免费视频| 日本在线中文字幕一区二区三区| 91久久精品国产91性色| 国产成人tv| 日本在线播放不卡| 一区二区蜜桃| 国产三区在线视频| 国产一区二区影院| 国产 中文 字幕 日韩 在线| 日本一区二区在线不卡| 亚洲一二三在线观看| 亚洲一二三级电影| 亚洲精品91天天久久人人| 日韩女优制服丝袜电影| 日本国产在线| 欧美成aaa人片免费看| 中文字幕这里只有精品| 成人黄色av播放免费| 全国精品免费看| 日本女人高潮视频| 久久婷婷一区| 亚洲欧美激情一区二区三区| 久久综合九色综合97婷婷女人| 免费看一级大片| 色综合久久中文综合久久97 | 亚洲老司机av| 怡红院在线播放| 国产精品久久久久久久av大片 | 日韩久久一区二区三区| julia一区二区中文久久94| 久久av免费| 日本福利视频网站| 美女诱惑一区二区| 国产人妻人伦精品1国产丝袜| 亚洲欧洲av色图| 免费黄色一级大片| 亚洲激情 国产| av在线播放国产| 成人黄色免费片| 久久不见久久见免费视频7| 免费看黄在线看| 国产精品一区二区久久不卡| 9.1片黄在线观看| 精品久久中文字幕| www.桃色av嫩草.com| 色妞欧美日韩在线| 国产在线|日韩| 久久一区二区三区欧美亚洲| 激情综合电影网| 成人在线短视频| 亚洲日穴在线视频| 一区二区www| 原创国产精品91| 婷婷午夜社区一区| 精品国产一区二区三区免费| 欧美视频福利| 又黄又爽又色的视频| 一区在线中文字幕| 亚洲手机在线观看| 中文字幕成人在线| 亚洲www啪成人一区二区| 欧美午夜免费| 天堂精品中文字幕在线| 国产色视频一区二区三区qq号| 五月天精品一区二区三区| 狠狠综合久久av一区二区| 欧美激情亚洲视频| 日韩一区二区三区精品视频第3页| 在线综合视频网站| 狠狠色丁香久久婷婷综| 永久免费看片视频教学| 欧美日韩一区中文字幕| 天堂资源在线中文| 91精品久久久久久久久| 婷婷综合社区| 亚洲色图欧美自拍| 亚洲视频1区2区| 精品国产av一区二区三区| 欧美激情免费在线| 精品国产乱子伦一区二区| 免费成人午夜视频| 久久久青草青青国产亚洲免观| 男人天堂2024| 亚洲最新在线视频| 青草综合视频| 国产香蕉一区二区三区| 成人三级伦理片| 久久久久亚洲av成人毛片韩| 亚洲午夜久久久影院| 久久天天久久| 狠狠噜天天噜日日噜| gogogo免费视频观看亚洲一| 国内精品福利视频| 伊人久久久久久久久久久久久| 久久三级毛片| 国产黄色激情视频| 91在线观看视频| 久久这里只有精品9| 久久成人综合视频| 精品成人自拍视频| 亚洲天堂av线| 亚洲美女精品一区| 手机看片一区二区| 国产精品久久久久久久av电影| 亚洲色图欧美| 国产精品伦子伦| 欧美日韩激情一区二区| 三级资源在线| 人禽交欧美网站免费| 国产一区二区在线观看免费| 国产又爽又黄的视频| 日韩中文字幕av| 国产一区二区三区不卡av| 午夜免费高清视频| 一级做a爱片久久| 裸体xxxx视频在线| 91香蕉视频在线下载| 久久高清国产| 久久久无码精品亚洲国产| 亚洲香蕉成人av网站在线观看| 亚洲精品字幕在线观看| 韩国v欧美v亚洲v日本v|