精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久久久国产一区二区| 中文字幕 91| 国产麻豆天美果冻无码视频 | 在线午夜精品| 在线综合+亚洲+欧美中文字幕| 欧美激情精品久久久| 15—17女人毛片| 色视频在线观看| 欧美18免费视频| 一区二区三区在线视频观看58| 国产成人一区二| 国产美女精品久久| 天堂√8在线中文| av一二三不卡影片| 午夜精品福利电影| 国产人妻精品午夜福利免费| 九义人在线观看完整免费版电视剧| 肉丝袜脚交视频一区二区| 日韩电影免费在线观看中文字幕| 欧美又粗又长又爽做受| 国语对白做受69按摩| 亚洲va久久久噜噜噜久久| 亚洲不卡一区二区三区| 国产精品麻豆免费版| 久草视频在线资源| 中文字幕一区二区三区四区久久| 亚洲人一二三区| 亚洲综合日韩在线| 久草国产在线视频| 久久在线播放| 欧美精品乱码久久久久久按摩| 一区二区视频国产| 一级特黄录像免费看| 99精品视频精品精品视频| 91精选在线观看| 情侣黄网站免费看| 风间由美一区| 国模少妇一区二区三区| 欧美精品日韩三级| 看全色黄大色黄女片18| 伊人色综合一区二区三区影院视频| 2020国产精品| 国产精品偷伦免费视频观看的| 超碰人人人人人人人| 韩国三级大全久久网站| 一区二区三区不卡视频在线观看| 国产一区免费| 中文字幕自拍偷拍| 久久精品亚洲人成影院| 精品久久人人做人人爰| 91猫先生在线| 91在线高清| 福利电影一区二区| 日韩美女视频免费看| 一本色道久久88| 日本午夜一区| 欧美久久久久中文字幕| 日韩av片网站| 本网站久久精品| 一区二区三区精品在线观看| 天堂av免费看| 青青青免费视频在线2| 99久久精品一区二区| 国产亚洲精品自在久久| 成人爽a毛片一区二区| 天堂久久一区二区三区| 欧美老妇交乱视频| 亚洲国产日韩一区无码精品久久久| 亚洲国产精选| 色一情一伦一子一伦一区| 99中文字幕在线观看| 国产在线91| 成人午夜免费视频| 国产欧亚日韩视频| 久久99国产综合精品免费| 一区二区三区四区电影| 亚洲色图17p| caopor在线| 久久伊人国产| 一本色道久久加勒比精品| 久草福利视频在线| 99thz桃花论族在线播放| 国产精品三级视频| 九九九久久久| 国产成人精品无码高潮| 蜜臀av国产精品久久久久| 97香蕉久久超级碰碰高清版 | 亚洲最新色图| 久久久久久久久久久免费 | 欧美精品videos另类日本| 日韩成人av毛片| 亚洲精品极品少妇16p| 欧美精品999| 无码人妻丰满熟妇精品区| 悠悠资源网久久精品| 不卡av在线播放| 免费看一级黄色| 狠狠做深爱婷婷综合一区| 亚洲国产91色在线| 精品伦一区二区三区| 一道在线中文一区二区三区| 久久精品国产99国产精品澳门| 在线看片中文字幕| 亚洲va久久久噜噜噜久久| 色偷偷888欧美精品久久久| 真实乱视频国产免费观看| 日韩精品免费一区二区三区竹菊| 亚洲国产精品va在线看黑人动漫| 色哟哟精品观看| 欧美日本精品| 欧美日产国产成人免费图片| 特级毛片www| 国产乱码精品一区二区三区av| 成人免费午夜电影| 国产精品久久影视| 国精产品一区一区三区mba视频| 国产精品毛片一区视频| 在线播放麻豆| 亚洲你懂的在线视频| 尤物国产精品| 黄在线观看免费网站ktv| 五月开心婷婷久久| 99999精品视频| 日韩一二三区在线观看| 精品国产一区二区三区久久影院 | 日韩国产一级片| 97久久精品一区二区三区的观看方式 | 日本一级淫片色费放| 美女高潮久久久| 国产日韩欧美视频| 黄色网址在线播放| 狠狠躁夜夜躁久久躁别揉| 欧美韩国日本在线| 91国内精品| 欧美精品在线免费观看| 国产在成人精品线拍偷自揄拍| 中文字幕欧美国产| 伊人久久在线观看| 国模私拍国内精品国内av| 亚洲欧美精品在线| 羞羞在线观看视频| 丝袜美腿亚洲一区| 欧美三日本三级少妇三99| av电影在线网| 日韩欧美在线免费| 一级在线免费视频| 精品72久久久久中文字幕| 亚洲日本欧美中文幕| 粉嫩aⅴ一区二区三区| 丝瓜av网站精品一区二区| 国产美女精品久久久| 欧美人与性动交α欧美精品图片| 欧美日韩在线影院| 在线天堂www在线国语对白| 国产一区二区三区四区五区传媒| 97香蕉久久夜色精品国产| 婷婷五月综合久久中文字幕| 中文字幕高清不卡| 成人亚洲视频在线观看| 国产精品欧美一区二区三区不卡 | 亚洲午夜在线电影| 热久久精品国产| japansex久久高清精品| 久久精品91久久香蕉加勒比| 97人妻精品一区二区三区视频| 亚洲色图第一区| 日本wwwwwww| 国产精品久久久久久模特| 国产精品一二三视频| 91青青在线视频| 在线不卡a资源高清| 日本天堂中文字幕| 青青草国产精品97视觉盛宴| 丁香婷婷久久久综合精品国产| 成人在线免费观看| 欧美日韩国产黄| 欧美黑人欧美精品刺激| 青青草97国产精品免费观看无弹窗版| 亚洲国产一区二区精品视频| 九色porny丨入口在线| 91精品欧美综合在线观看最新| 国产av 一区二区三区| 欧美aaaaaa午夜精品| 手机成人av在线| 超碰成人免费| 美女撒尿一区二区三区| 日韩有码第一页| 亚洲夂夂婷婷色拍ww47| 黄色a一级视频| 久久国产三级精品| 日本福利视频一区| 国产精品嫩草影院在线看| 91日本在线观看| 成人免费高清在线播放| 91精品国产高清一区二区三区 | 一区二区三区波多野结衣在线观看| 无码任你躁久久久久久老妇| 日韩黄色在线观看| 精品人妻大屁股白浆无码| 经典三级久久| 欧美一级在线亚洲天堂| 熟妇高潮一区二区三区| 欧美午夜理伦三级在线观看| av中文字幕免费观看| 国产一区中文字幕| 黄色网络在线观看| 激情视频亚洲| 国产精品69av| av2020不卡| 精品国产一区二区三区久久久狼 | 日韩亚洲欧美成人一区| 182在线观看视频| 毛片av一区二区三区| 日韩精品在线视频免费观看| 日韩综合在线| 久久精品日韩| 成人搞黄视频| 成人免费淫片视频软件| 精品成人免费一区二区在线播放| 亚洲欧美变态国产另类| www.av网站| 亚洲国产成人tv| 无码精品一区二区三区在线播放| 国产精品视区| 亚洲爆乳无码精品aaa片蜜桃| 精品一区二区三区免费看| 国产成人一区二区在线| 亚洲插插视频| 久久久久久久久久久久久久久久久久av | av在线com| 1024精品久久久久久久久| 日韩久久久久久久| 欧美电影在线观看网站| 欧美亚洲国产成人精品| 97蜜桃久久| 久久久久五月天| 黄色大片在线看| 亚洲精品白浆高清久久久久久| 日本熟妇色xxxxx日本免费看| 亚洲另类春色国产| 午夜三级在线观看| 国产精品久久久久久久久动漫| ass极品水嫩小美女ass| 亚洲区国产区| 日韩偷拍一区二区| 亚洲精品进入| 日本不卡一区二区三区视频| 亚洲成人高清| 成人午夜在线观看| 国产精品1区在线| 91最新国产视频| 亚洲国产视频二区| 91一区二区三区| 日本免费久久| 欧美日韩国产成人在线| 影音先锋男人资源在线| 亚洲视频999| 久草福利在线| 少妇高潮久久77777| 看女生喷水的网站在线观看| 久久精品国产久精国产一老狼 | 欧美一级特黄aaaaaa大片在线观看| 欧美成人三级电影在线| 天天射,天天干| 亚洲最新av在线网站| 亚洲欧美高清视频| 亚洲国产精品电影在线观看| 同心难改在线观看| 欧美一区二区三区日韩| xxxx国产精品| 日韩激情视频在线播放| 国产鲁鲁视频在线观看免费| 日韩亚洲欧美中文高清在线| 天天色天天射天天综合网| 国产亚洲人成网站在线观看| 男人天堂手机在线观看| 日韩精品视频在线| 九色视频在线观看免费播放 | 国内在线免费视频| 日韩亚洲精品视频| 美足av综合网| 国产91色在线| 久久九九精品视频| 国外成人免费视频| 成人羞羞视频在线看网址| 超碰97在线看| 久久久久91| 亚洲综合123| 九一久久久久久| 91热这里只有精品| 国产精品自在欧美一区| 成年人在线观看av| jlzzjlzz亚洲日本少妇| 99久久久无码国产精品衣服| 伊人婷婷欧美激情| 日韩精品一区二区亚洲av| 亚洲www啪成人一区二区麻豆| 99久久久久久久久| 日韩视频一区二区三区在线播放 | 久久99精品国产99久久6尤物 | 午夜影院在线观看欧美| 中国老头性行为xxxx| 亚洲成人激情视频| 18免费在线视频| 2018日韩中文字幕| 老司机深夜福利在线观看| 国产日韩欧美中文在线播放| 国产精品高潮呻吟久久久久| 成人欧美一区二区三区视频| 综合伊思人在钱三区| 久久一区二区精品| 日韩精品导航| 奇米777四色影视在线看| 日本在线不卡视频| 亚洲av成人精品一区二区三区| 成人免费在线观看入口| 五月天av网站| 在线亚洲一区二区| 中国精品一区二区| 日韩成人在线播放| 天堂8中文在线| 成人啪啪免费看| 日韩久久久久| 18岁视频在线观看| 91视频在线看| 欧洲性xxxx| 色哟哟国产精品| 日韩国产福利| 国语自产精品视频在线看抢先版图片 | 国内在线精品| 欧美中文字幕在线视频| 精品免费av在线| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 亚洲日本va中文字幕| 亚洲AV无码成人精品一区| 久久精品国内一区二区三区| 中国美女黄色一级片| 欧美日韩另类一区| 国产美女三级无套内谢| 亚洲高清免费观看高清完整版| 国产区在线观看| 91久久精品日日躁夜夜躁国产| 久久中文亚洲字幕| 免费看涩涩视频| 国产精品乱子久久久久| 中文字幕第99页| 色偷偷亚洲男人天堂| 欧美美女福利视频| 男人天堂成人网| 国产成人精品免费网站| 欧美一级高潮片| 欧美日韩精品三区| 天堂中文а√在线| 91在线观看免费高清| 亚洲最新色图| 国产伦精品一区二区三区88av| 亚洲成a人片在线不卡一二三区| 免费看黄色一级视频| 91精品国产色综合| 亚洲精品合集| 色www免费视频| 亚洲视频在线一区二区| 精品国产乱码一区二区三 | 黄色一级片在线| 亚洲精品一区二区三区四区高清 | 欧美亚洲综合在线| www.久久热.com| 亚洲综合中文字幕在线| 雨宫琴音一区二区在线| 亚洲精品乱码久久久久久久久久久久 | av电影一区二区| 亚洲黄网在线观看| 色琪琪综合男人的天堂aⅴ视频| 国产一区二区视频在线看| 国产毛片久久久久久国产毛片| 91一区二区在线| 亚洲国产精品久| 亚洲精品国精品久久99热 | 在线观看网站黄不卡| а√天堂官网中文在线| 国产精品678| 一区二区三区在线| 精品人妻一区二区三区香蕉| 欧美日韩在线播放三区四区| 免费人成黄页在线观看忧物| 久久久久久久久久久人体 | 伊人久久大香线蕉精品| 国产成人综合亚洲网站| 日韩欧美在线视频播放| 日韩欧美在线1卡| 黄色精品免费看| 久久大香伊蕉在人线观看热2| 美女网站在线免费欧美精品| 国产精选第一页| www.亚洲免费视频| 久久国产精品免费精品3p| 分分操这里只有精品| 国产欧美视频在线观看| 日日夜夜狠狠操| 久久成人av网站|