2012-11-09 67 views
3

我正在VS2012下開發一個WPF C#應用程序,我在解決方案中的不同項目中有不同來源的UserControls。如果可以,我想將整個解決方案中的所有UI字符串本地化。WPF字符串本地化 - 不同項目之間共享?

似乎locbaml並沒有真正爲這種事情設置,因爲它出現在每個類庫中,我需要爲每個類庫DLL創建一個單獨的資源DLL?

任何人都可以給我一些關於最佳實踐方式的指導嗎?我不知道如何將各種本地化技術應用於具有多個項目的解決方案。

感謝您的任何建議。 科裏。

+0

WPF本地化擴展可以開箱即用,只需在您的XAML中定義程序集就像這樣:'lex:ResxLocalizationProvider.DefaultAssembly =「MyTranslationAssembly」' –

回答

3

修訂我的文章有點更具包容性:

Overarching best practices are detailed on the MSDN here.

真的,你有三種選擇。

  1. 本地化它自己 - 手卷你自己的XML /文本文件/數據庫解決方案。
  2. 使用locbaml進行本地化。這不允許在應用內動態切換語言。
  3. 使用resx文件進行本地化。這確實允許在應用程序中動態切換語言,具體取決於所選的實現。

locbaml是最佳的場景,在最佳實踐頁面上列出,但resx文件是合理的可移植的(格式很簡單),並滿足動態語言交換的要求。

如果你決定和(1)一起去,那麼你就是你自己的。一帆風順! :)

如果您選擇使用locbaml(2),最好先解決問題,首先將您的字符串抽象爲ResourceDictionary,從而允許您將所有字符串放入一個用於本地化的文件中。請看這裏:How to: Use a ResourceDictionary to Manage Localizable String Resources

鏈接的文章詳細信息仍然使用locbaml,但您應該只需要使用它來本地化單個ResourceDictionary。以這種方式保持資源整齊分離應該會讓你的生活變得更容易。請注意,如果需要,ResourceDictionaries可以分割 - 只是一個單一文件還是多個較小的文件對您的項目更好。

如果您選擇使用resx文件(3)並且想要支持無痛的運行時語言切換,this short tutorial\example code provides an excellent starting point.它是用Prism編寫的,但可以在Prism之外使用,沒有任何困難。還有其他更簡單的方法也使用resx文件,但如果你想要的方法,恕我直言,你正在看它。一個(也許?)主要的警告是,這種方法不適用於Silverlight。這是一個WPF問題,但我意識到這可能是一些人的關注。

+0

如何處理多語言的本地化字符串?你需要從幾個資源詞典中進行選擇的能力? – cardinalPilot

+0

您是否正在嘗試構建不同的本地化軟件包(即:擁有您的程序的西班牙語,英語,德語等版本),還是在同一應用程序中啓用動態語言更改(因此一個應用程序具有多種語言包)?前者是如何使用locbaml,所以如果你需要使用locbaml(項目需求等),你幾乎堅持使用它。您是否需要在運行時動態地移動語言的能力? – ianschol

+0

其實,我繼續修改我的帖子。您應該能夠採取任何方法與新的信息! – ianschol

-1

WPF使用兩種資源格式:XAML和RESX。不幸的是,幾乎所有的最佳實踐以及這裏的所有答案都建議用複雜且難以維護的RESX字符串引用來替換XAML中的簡單字符串。

例如,如果你有

<TextBlock Text="Hello World"/> 

那麼「最佳實踐」建議擺脫XAML字符串,將其添加到RESX,最後參照

<TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedString }}"/> 

+ 

<data name="LocalizedString" xml:space="preserve"> 
    <value>Hello World</value> 
</data> 

更換XAML不要那樣做。將RESX僅用於您的代碼中使用的那些字符串。保持XAML的所有字符串不變。本地化RESX和XAML文件。最後編譯包含本地化RESX和XAML的衛星程序集文件。

Visual Studio或locbaml只能本地化RESX。您可以使用文本編輯器手動本地化XAML,但我不建議這樣做。本地化的XAML必須與原始相同。這意味着結構必須相同。它必須包含與原始XAML相同的所有組件,屬性和事件。本地化XAML的唯一可行方法是使用一些本地化工具。

您在選擇本地化工具時必須小心謹慎。它必須執行以下兩件事。

  1. 本地化XAML和RESX
  2. 編譯局部XAML和RESX到衛星組件文件。

一旦您使用這樣的本地化工具,您的本地化不僅會變得更加簡單,而且您還可以將您的用戶控件放置在自己的程序集中,或將其鏈接到所有使用它的項目。

+0

我未提及的主要問題是如何引用另一個項目中的xaml字符串,以及多項目場景中如何選擇不同語言的「字符串集」。這裏有很多很棒的信息,但沒有任何回答這兩個問題。 – cardinalPilot

相關問題