中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

Silverlight 2中多語言支持實(shí)現(xiàn)(上)

引言

最近項(xiàng)目要在Silverlight 2應(yīng)用程序中實(shí)現(xiàn)本地化,原以為這個(gè)過程非常簡單,卻沒想到實(shí)現(xiàn)的時(shí)候一波三折,好在結(jié)果還算不錯(cuò)。需求是這樣的,用戶第一次訪問的時(shí)候,默認(rèn)為英文,當(dāng)用戶選擇一種顯示語言后,記錄在本地,下次用戶訪問時(shí)直接顯示已經(jīng)選擇的語言。現(xiàn)在我把整個(gè)實(shí)現(xiàn)的過程記錄下來,希望對大家有所幫助。

本文為Silverlight 2中多語言支持實(shí)現(xiàn)第一部分。

準(zhǔn)備工作

我們發(fā)現(xiàn)在Silverlight 2中提供了ResourceManager類,這意味著可以通過資源文件來實(shí)現(xiàn),首先在Silverlight項(xiàng)目中建立一個(gè)文件夾,命名為Resources,添加一個(gè)資源文件Strings.resx,并添加幾個(gè)值,如下圖所示:

TerryLee_0007

該文件將作為默認(rèn)資源文件,設(shè)置Access Modifier為Public,它將會生成Strings.Designer.cs文件,如下圖所示:

TerryLee_0008 

現(xiàn)在再創(chuàng)建幾個(gè)其它語言的資源文件,如中文、法語、挪威語等,注意資源文件的命名方式,都是以Strings+語言文化構(gòu)成,有關(guān)每一種語言文件的代碼,大家可以查閱MSDN。

TerryLee_0009

其它這些文件的Access Modifier的設(shè)置為No Code generation。有了前面這些準(zhǔn)備工作,接下來進(jìn)行實(shí)現(xiàn)。

 

 

實(shí)現(xiàn)

有了上面這些資源,我們很容易想到利用Silverlight中的靜態(tài)資源來綁定到UI控件上面,首先定義資源文件:

TerryLee_0011

綁定到UI控件上,如我們放置三個(gè)按鈕:

TerryLee_0012

最后我們只剩下一步工作,就是指定當(dāng)前線程的語言文化和UI語言文化,這一點(diǎn)我們可以在Application_Startup事件中來實(shí)現(xiàn),我們設(shè)置為zh-CN,如下代碼所示:

TerryLee_0010

至此工作完成,可是當(dāng)我們編譯時(shí)卻發(fā)現(xiàn)有這樣的錯(cuò)誤:

Type 'Strings' is not usable as an object element because it is not public or does not define a public parameterless constructor or a type converter

很明顯Strings類型的構(gòu)造函數(shù)訪問性不是public,打開Strings.Design.cs文件可以看到,它的構(gòu)造函數(shù)是internal的,這一點(diǎn)好辦,手工修改為public(也許該問題將會在RTM中解決)。但是要注意,每次當(dāng)修改完Resource文件后,它會再次變?yōu)閕nternal類型。

TerryLee_0013

問題出現(xiàn)

現(xiàn)在編譯成功,可是當(dāng)運(yùn)行時(shí)卻并沒有出現(xiàn)我們想要的結(jié)果。我們首先會想到,資源文件編譯后是否下載到了本地,也就是是否打包到了xap文件中,這一點(diǎn)很好證實(shí),我們可以解壓xap文件來看看,果然不出所料,如下圖所示:

TerryLee_0014

在xap文件中,除了Silverlight項(xiàng)目程序集之外,并沒有任何與資源文件有關(guān)的東西。有一種“暴力”的辦法可以解決這個(gè)問題,那就是我們拷貝Silverlight項(xiàng)目bin/Debug文件夾下的資源文件,手工進(jìn)行打包xap文件,并且需要在xap文件的AppManifest.xaml文件夾中手工加入AssemblyPart,如下代碼所示:

TerryLee_0015

事實(shí)證明,這樣確實(shí)可以得到多語言的支持,問題在于每次編譯后,xap文件都會重新生成一次。總是這樣手工打包也不是長久之計(jì),所以必須想辦法徹底解決問題,也許到了Silverlight 2.0 RTM,這個(gè)問題已經(jīng)不存在了。

問題解決

我們打開Silverlight項(xiàng)目文件(.csproj),可以看到有SupportedCultures這樣一項(xiàng),如果在這里進(jìn)行了設(shè)置,再編譯Silverlight項(xiàng)目時(shí)將會自動打包資源文件,如下圖所示,我們添加一項(xiàng)zh-CN:

TerryLee_0016

現(xiàn)在再解壓xap文件看看效果,可以看到,現(xiàn)在zh-CH資源文件已經(jīng)打包在了xap文件中:

TerryLee_0017

運(yùn)行程序,可以看到已經(jīng)顯示為中文了:

TerryLee_0018 

到這里,終于可以松一口氣了,下面接著實(shí)現(xiàn)其它功能。

添加本地存儲

現(xiàn)在我們要實(shí)現(xiàn)本地存儲功能,這個(gè)不是什么難事,可以通過Silverlight 2中的隔離存儲來實(shí)現(xiàn)。在用戶選擇一種語言后保存到本地:

TerryLee_0019

然后在應(yīng)用程序啟動時(shí),讀取該配置:

TerryLee_0020

好了,現(xiàn)在我們來看一下效果:

英文

TerryLee_0021

中文:

TerryLee_0018 

總結(jié)

至此,簡單的多語言支持算是實(shí)現(xiàn)了,其實(shí)還有其它的問題沒有解決,我將在下一篇分析。最后再啰唆一句:Silverlight 2 Beta 2對于多語言支持的支持實(shí)在是...

NET技術(shù)Silverlight 2中多語言支持實(shí)現(xiàn)(上),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 大象一区 | 久久中文视频 | 免费av观看 | 日韩免费成人av | 久久成人精品一区二区三区 | 日本超碰| 国产精品精品视频一区二区三区 | 亚洲高清视频一区二区 | 97中文视频 | 亚洲一区播放 | 欧美二级| 国产成人精品一区 | 免费一区| 福利在线观看 | 久久男人| 在线一级片 | 久久99网站 | 精品国产一级 | 亚洲色图婷婷 | 日韩精品a在线观看图片 | 欧美在线视频一区二区 | 五月天婷婷综合 | 成人精品鲁一区一区二区 | 日韩高清一区 | 国产精品国产a级 | 99精品在线免费观看 | 男人的天堂在线视频 | 99re热精品视频 | 激情综合五月 | 精品网| 美女网站视频免费黄 | 国产成人精品一区二区三区在线 | 免费亚洲一区二区 | 国产精品久久久久久52avav | 国产美女在线看 | 久久免费精品 | 日韩二三区| 伊人伊人 | 免费国产视频在线观看 | 99精品99 | 国产精品精品视频一区二区三区 |