日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

纠结于wpf 多国语言方案,希望各位指点-softbar

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 纠结于wpf 多国语言方案,希望各位指点-softbar 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近糾結于wpf 多國語言處理的問題,先說說找到的以下幾種方案。

1.借用vc的處理方式,編譯完了以后每個語言產生一個dll,分別放在語言文件夾里面,

Wpf 使用dllImport調用win32 api中的loadstring方法提取MUI資源,然后賦值為ui。

微軟自己去判斷該用哪個語言,不用自己操心。

優點:可靠,畢竟那么多地方都這么干的。

缺點:麻煩了點

2. 微軟給出的解決方案,地址如下:

softbar

?http://www.softbar.com/?

其中里面有一句,讓我很失望:

用 XAML 編寫 UI;避免在代碼中創建 UI。當您使用 XAML 創建 UI 時,應通過內置的本地化 API 來對其進行公開。

避免在代碼中創建 UI !!!我的代碼里面確實有創建UI的地方,這個可以避免,但是有時候避免不了。

而且編譯過程太復雜了,我用這里面提供的方法,主語言沒問題,第二語言沒有成功過,也可能是我自己的問題了。

優點:微軟給的,可能比較靠譜

缺點:限制多,也有些麻煩。

3.采用資源引用的方法。

Xaml里面這么寫:

?? <MenuItem ?Header="{DynamicResource MAINWINDOW_HELP}" Name="miHelp" ? Command="Help"/>

資源文件這樣子的:

<s:String x:Key="MAINWINDOW_HELP">Help</s:String>

每個語言一個xaml,然后放在一個類庫項目里面,編譯為dll。

啟動時,獲取操作系統語言,加載相應的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;

?? ? ? ? ? ?}

我采用的是第三種辦法,遇到了一個問題:

香港地區,

System.Threading.Thread.CurrentThread.CurrentUICulture 獲取到zh-HK,但是香港是繁體中文,應該是zh-TW, 所以我加了Parent,為:System.Threading.Thread.CurrentThread.CurrentUICulture.Parent 獲取到zh-TW.

如果 做MUI的時候,香港地區的翻譯和臺灣的翻譯不一樣,咋辦?不加Parent?如果一樣呢?

或許可以這么做:如果有zh-HK,就用zh-HK,如果沒有,使用zh-TW,再沒有,就En。

這是目前發現的問題,鬼知道世界上那么多國家和語言,會不會有別的問題?況且這辦法不是微軟推薦的,領導說你能保證沒問題嗎?不敢…..

另外,每增加或刪除一種語言,都要重新編譯資源dll,不可能一個語言建一個項目吧?

不知道第一種方案里面的MUI處理邏輯,如果知道,照著做就放心了。

希望各位指點一下,謝謝。

總結

以上是生活随笔為你收集整理的纠结于wpf 多国语言方案,希望各位指点-softbar的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。