日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Silverlight國(guó)際化實(shí)現(xiàn)方式詳解

作為一個(gè)合格的開發(fā)人員,應(yīng)該是對(duì)Silverlight這款工具是相當(dāng)熟悉的。它的應(yīng)用可以幫助我們輕松的實(shí)現(xiàn)一些基于多媒體相關(guān)的功能需求。在這里,我們將會(huì)了解到有關(guān)Silverlight國(guó)際化的實(shí)現(xiàn)方法。#t#

  1. < TextBlock Text="{Binding alabel, 
    Source={StaticResource myStrings}}" />

如果界面上每個(gè)文本部分都要手工輸入這么長(zhǎng)串東西,遲早得把寫代碼的人搞瘋掉。就算真的有毅力全部輸入,這么一大坨的XAML對(duì)看代碼的人無(wú)疑也是一種折磨。附帶一提,有些文章提出的國(guó)際化方案似乎意猶未盡,在Binding后面還要再加上一個(gè)ConvertParameter,難道這些人對(duì)裹腳布有特殊的偏好?

我在項(xiàng)目中為了減少Silverlight國(guó)際化的工作量,同時(shí)也為了讓代碼變得干凈清爽一點(diǎn),采用了另外一種基于約定的國(guó)際化方案。其實(shí)背后的道理說穿不值一文錢,就是讓界面上所有待翻譯的文字輸入時(shí)遵循一定的格式,比如“rs:alabel”,程序使用VisualTreeHelper這個(gè)方便的類遍歷界面上所有組件,找到所有符合規(guī)則的文字,然后翻譯成對(duì)于當(dāng)前語(yǔ)言的內(nèi)容。這個(gè)方案簡(jiǎn)單而且工作得很好,因?yàn)槲覀兊慕缑嬷行枰獓?guó)際化的部分90%以上不脫TextBlock、Button和DataGrid這三種組件,如果有特殊的控件不能用此方式進(jìn)行國(guó)際化也沒有關(guān)系,畢竟絕大部分工作都能夠很簡(jiǎn)單的完成了。

換言之,現(xiàn)在添加控件的時(shí)候只要這樣寫:

 
 
 
  1. < TextBlock Text="rs:alabel" />

這樣是不是簡(jiǎn)單多了?

遍歷組件并進(jìn)行Silverlight國(guó)際化的代碼也很簡(jiǎn)單,基本上就是對(duì)VisualTreeHelper的遞歸調(diào)用:

 
 
 
  1. void MainPage_Loaded(object sender, 
    RoutedEventArgs e)
  2. {
  3. LocalizeRecursive(this);
  4. }
  5. void LocalizeRecursive(UIElement elem)
  6. {
  7. GetLocalizer(elem.GetType()).
    Localizer(elem);
  8. int childCount = VisualTreeHelper.
    GetChildrenCount(elem);
  9. for (int i = 0; i < childCount; i++)
  10. {
  11. var child = VisualTreeHelper.
    GetChild(elem, i) as UIElement;
  12. if (child != null)
  13. LocalizeRecursive(child);
  14. }
  15. }
  16. ILocalizer GetLocalizer(Type type)
  17. {
  18. ILocalizer localizer = null;
  19. if (!_localizers.TryGetValue
    (type, out localizer))
  20. localizer = new NullLocalizer();
  21. return localizer;
  22. }
  23. static void RegisterLocalizers()
  24. {
  25. _localizers.Add(typeof(TextBlock), 
    new TextBlockLocalizer());
  26. _localizers.Add(typeof(Button),
     new ButtonLocalizer());
  27. _localizers.Add(typeof(DataGrid), 
    new DataGridLocalizer());
  28. }

幾種Localizer的代碼因?yàn)樯婕暗揭恍I(yè)務(wù)上的東西這里就不給出了,基本上無(wú)非就是字符串的查找替換而已。

這樣處理以后,Silverlight國(guó)際化界面的XAML代碼變得比以前整潔多了。


當(dāng)前題目:Silverlight國(guó)際化實(shí)現(xiàn)方式詳解
文章URL:http://www.5511xx.com/article/cooosdh.html