纠结于wpf 多国语言方案,希望各位指点-softbar
最近糾結(jié)于wpf 多國語言處理的問題,先說說找到的以下幾種方案。
1.借用vc的處理方式,編譯完了以后每個(gè)語言產(chǎn)生一個(gè)dll,分別放在語言文件夾里面,
Wpf 使用dllImport調(diào)用win32 api中的loadstring方法提取MUI資源,然后賦值為ui。
微軟自己去判斷該用哪個(gè)語言,不用自己操心。
優(yōu)點(diǎn):可靠,畢竟那么多地方都這么干的。
缺點(diǎn):麻煩了點(diǎn)
2. 微軟給出的解決方案,地址如下:
softbar
?http://www.softbar.com/?
其中里面有一句,讓我很失望:
用 XAML 編寫 UI;避免在代碼中創(chuàng)建 UI。當(dāng)您使用 XAML 創(chuàng)建 UI 時(shí),應(yīng)通過內(nèi)置的本地化 API 來對(duì)其進(jìn)行公開。
避免在代碼中創(chuàng)建 UI !!!我的代碼里面確實(shí)有創(chuàng)建UI的地方,這個(gè)可以避免,但是有時(shí)候避免不了。
而且編譯過程太復(fù)雜了,我用這里面提供的方法,主語言沒問題,第二語言沒有成功過,也可能是我自己的問題了。
優(yōu)點(diǎn):微軟給的,可能比較靠譜
缺點(diǎn):限制多,也有些麻煩。
3.采用資源引用的方法。
Xaml里面這么寫:
?? <MenuItem ?Header="{DynamicResource MAINWINDOW_HELP}" Name="miHelp" ? Command="Help"/>
資源文件這樣子的:
<s:String x:Key="MAINWINDOW_HELP">Help</s:String>
每個(gè)語言一個(gè)xaml,然后放在一個(gè)類庫項(xiàng)目里面,編譯為dll。
啟動(dòng)時(shí),獲取操作系統(tǒng)語言,加載相應(yīng)的xaml,如下:
var threadUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture.Parent;
string language = @"pack://application:,,,/ MUIRes;component/" + threadUICulture.EnglishName + ".xaml";
?? ? ? ? ? ?var currentLanguageResource = App.Current.Resources.MergedDictionaries.FirstOrDefault(o => o.Source.ToString().Contains("Language"));
?? ? ? ? ? ?try
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?ResourceDictionary resourceDictionary = new ResourceDictionary();
?? ? ? ? ? ? ? ?resourceDictionary.Source = new Uri(language);
?? ? ? ? ? ? ? ?currentLanguageResource.Source = new Uri(language);
?? ? ? ? ? ?}
?? ? ? ? ? ?catch (System.Exception ex)
?? ? ? ? ? ?{
?? ? ? ? ? ? ? ?Debug.Write(ex);
?? ? ? ? ? ? ? ?return;
?? ? ? ? ? ?}
我采用的是第三種辦法,遇到了一個(gè)問題:
香港地區(qū),
System.Threading.Thread.CurrentThread.CurrentUICulture 獲取到zh-HK,但是香港是繁體中文,應(yīng)該是zh-TW, 所以我加了Parent,為:System.Threading.Thread.CurrentThread.CurrentUICulture.Parent 獲取到zh-TW.
如果 做MUI的時(shí)候,香港地區(qū)的翻譯和臺(tái)灣的翻譯不一樣,咋辦?不加Parent?如果一樣呢?
或許可以這么做:如果有zh-HK,就用zh-HK,如果沒有,使用zh-TW,再?zèng)]有,就En。
這是目前發(fā)現(xiàn)的問題,鬼知道世界上那么多國家和語言,會(huì)不會(huì)有別的問題?況且這辦法不是微軟推薦的,領(lǐng)導(dǎo)說你能保證沒問題嗎?不敢…..
另外,每增加或刪除一種語言,都要重新編譯資源dll,不可能一個(gè)語言建一個(gè)項(xiàng)目吧?
不知道第一種方案里面的MUI處理邏輯,如果知道,照著做就放心了。
希望各位指點(diǎn)一下,謝謝。
總結(jié)
以上是生活随笔為你收集整理的纠结于wpf 多国语言方案,希望各位指点-softbar的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VTK修炼之道29:图像统计_彩色直方图
- 下一篇: 门户网站的免费写手我们可怜的SEOer