2008-12-17 62 views
1

我試圖本地化的應用程序是一個WinForms應用程序,它具有一些託管的WPF用戶控件(在ElementHost WinForms控件中託管的WPF用戶控件)。使用嵌入式WPF用戶控件本地化WinForms應用程序

我使用resx文件來本地化WinForms,VS2008管理得非常好。

當我嘗試使用LocBaml方法來本地化WPF部件時,問題就開始了。

以下是發生了什麼事情: 當我構建解決方案時,Visual Studio會自動爲我生成附屬程序集,但僅適用於resx文件中的WinForms資源。 然後,當我使用LocBaml命令行工具時,它爲我生成附屬程序集,但僅用於xaml文件中的WPF資源。

我還沒有想出如何將兩個生成的DLL(WPF & WinForms)合併到一個衛星程序集中。

回答

3

Blech ... WPF團隊肯定會留下一些他們的本地化解決方案。那麼,爲了什麼是值得的,這裏是我一直在做的事(公平地說,我已經從CodeProject上的Jecho Jekov借用了這個想法):

首先,您需要創建(或借用)本地化MarkupExtension類。傑喬稱他的LocExtension,我稱之爲我的i18nExtension沒有任何理由,除了我覺得它比Loc更具描述性。這個標記擴展將做什麼是在你的資源文件中查找給定的資源鍵。如果您想要位於Properties/Resources.resx文件中的所有資源,則這是一個非常簡單易行的代碼。

你最終得到的是這樣的事情在你的XAML:

<UserControl ... > 
    ... 
    <TextBox Text="{i18n HelloWorld}"/> 
    ... 
</UserControl> 

如果你想爲每個用戶控件/窗口單獨的resx文件作爲的WinForms設計師允許你做,你必須在你的MarkupExtension中獲得更多的創意,以便能夠找出它的上下文。

最終,你最終會得到一個每個文化的衛星集合,這是它看起來像你之後的東西。想到的一個警告是,我不確定這是如何處理即時文化/語言變化的。至少,窗口/控制將需要重新加載。

+0

還有這裏的Jecho Jekov文章的新版本有很多的改進:[高級WPF本地化2011年9月10日](http://www.codeproject.com/KB/WPF/AdvancedWPFLocalization2.aspx) – JoanComasFdz 2011-12-09 10:24:48

0

爲了獲得the method dustyburwell posted在WinForms嵌入的WPF用戶控件中工作,需要在WinForms窗體構造函數的InitializeComponent()調用之後將文化設置爲usercontrol,然後更新這些值。

  1. 聲明WinForms窗體。
  2. 添加ElementHost(elementHost1)。
  3. 在elementHost1(userControl1)中添加您的WPF UserControl。
  4. 打開表格的代碼。寫入以下代碼:
public Form1() 
    { 
     InitializeComponent(); 

     WpfLocalization.LocalizationScope.SetCulture(userControl1, System.Threading.Thread.CurrentThread.CurrentCulture); 
     WpfLocalization.LocalizationScope.SetUICulture(userControl1, System.Threading.Thread.CurrentThread.CurrentCulture); 
     WpfLocalization.LocalizationManager.UpdateValues(); 
    } 

每當的CurrentCulture改變,這3條線必須被調用用於每個的WinForms嵌入WPF的用戶控制。

0

如何將多個資源集合合併到單個衛星組件

正確的方法是使用AL.exe(組裝接頭工具)嵌入兩個窗口形式.resources文件,並通過所產生的的.resources LocBaml集成到單個衛星程序集(默認情況下替換原始版本僅包含WinForms資源)。

建立一個混合的應用程序的步驟將是:

  1. 構建解決方案(產生的WinForms只.resource文件和衛星DLL)。
  2. 使用locBaml工具
  3. 利用Al.exe工具使用這兩套.resource文件鏈接到一個新的混合衛星DLL,並從第1步替換原來的重建項目將需要2步生成的XAML文件.resource和3重複合併xaml資源,因此您可能希望通過將其添加爲構建步驟或目標來實現自動化。

實例應用:

Al.exe /out:MyApp.resources.dll /culture:es-ES /embed:MyApp.Form1.es-ES.resources /embed:MyAppWpf.g.es-ES.resources 

的更多信息(本地化混合應用程序)http://msdn.microsoft.com/en-us/library/ms754231.aspx

相關問題