2011-04-02 77 views
7

我知道所有關於老派的方式:使用帶.resx擴展名的資源文件,提供NeutralResourcesLanguage屬性,中性資源是編譯在程序集中,您可以從其他本地化資源(blahblah.de-DE.resx)編譯附屬程序集。 Visual Studio也從資源生成強類型的.cs,因此可以很容易地從代碼中使用(Properties.Resources.Default.WhateverStringResource)。.net本地化:舊式.resx和新學校並存wpf .baml

我剛剛學到了新的WPF方法:將資源放在.xaml文件中,使用.csproj中的UICulture標記將.baml資源放入附屬程序集中,或者不放入.baml資源主要裝配。這些資源易於在.xaml中使用,但易於在AFAIK中使用,而不是從代碼中使用,因爲不會自動生成.cs文件。

所以也許我錯了,但我有幾個問題。 「說真的,現在該怎麼辦?」是第一個。爲了讓我的聲明有效,只需在Visual Studio 2010中創建一個新的WPF應用程序即可:您將獲得.xaml文件,並且還會在其中放置一個空的Properties \ Resources.resx。你有它,所以他們確實需要共存。

首先,無論如何,我是否需要新舊學校?我看不到從代碼隱藏中使用強類型化.xaml資源的簡單方法。爲什麼不?也許有一種方法可以將它們生成爲.cs文件,但我不知道它。

現在更大的問題是我無法使用.xaml的.resx資源。爲什麼?! Visual Studio 2010的設計人員確實沒有看到他們,但同樣,這可能是我的錯。

MSDN建議使用UICulture標籤。它確實將.baml資源放在附屬程序集中,因此程序集甚至不包含中性程序集。但是對於一個老派的中立資源來說這並不起作用,AFAIK,一個非本地化的.resx需要進入主要程序集。所以如果我想在同一個項目中使用新舊學校,我不能使用UICulture標籤,我需要在主要程序集中的所有中立資源。我是唯一一個被這個困擾的人嗎?

所以問題:

  • 我可以使用的資源從在名爲.xaml代碼的強命名方式與.resx文件?
  • 有沒有辦法在.xaml中使用.resx資源中的Silverlight不會中斷?
  • 它只是我還是.baml本地化比.resx本地化更復雜很多? (dll解析,重新編譯,csv編輯,而不是編輯.resx文件)
  • 我可以編譯一箇中性的.resx到一個衛星組件,就像wpf中的UICulture一樣嗎?

回答

2

實際上,您可以在WPF中使用RESX文件,而在本地化中它可以輕鬆實現。

看: http://www.codeproject.com/KB/WPF/WPF_Resx_Localization.aspxGet values from *.resx files in XAML

+0

謝謝,這在WPF中有效。但不是在Silverlight中,這讓我更加難過。 – fejesjoco 2011-04-02 16:48:36

+0

我知道,我沒有在我的帖子中提到過這一點,但就在前幾天我發現在Silverlight中,資源生成的代碼始終是內部的,所以您需要黑客。所以我甚至沒有嘗試從.xaml讀取.resx,直到你說它會起作用。很高興知道它,但由於SL,它不是我想要的那樣乾淨。 – fejesjoco 2011-04-02 17:06:50

+0

是啊... SL仍sux :)但總是有解決方法。你正在使用SL還是WPF? cuz你的問題被標記爲WPF – 2011-04-02 23:18:38

0

你可以用的資源文件很容易地在SL工作。

每次更改資源文件時,您都必須將默認構造函數的可見性從內部更改爲公共。