2009-01-12 34 views
4

我們在Visual Studio 2008項目中有一些自動生成的資源文件,其中包含一些本地化版本,在其中一個本地化版本中,有一個字符串,在這種情況下爲空。VS2008中的項目文件中的資源由窗體設計器創造性地「重用」,可以避免?

更明確。我們有一個核心資源文件,有很多字符串資源。然後,我們有4個其他本地化版本的這個文件,並在其中一個其他本地化文件中,其中一個字符串被賦予一個空值。

現在的問題是,表單設計人員很高興爲字符串找到資源,並且顯然會停下來爲任何空字符串重用此資源,它將在生成的設計器代碼中爲其分配屬性形成。例如,如果由於某種原因,控件上的某個屬性沒有用默認值指定(所以即使它是空的,它也會被序列化爲代碼),那麼它會引用我們的資源,而不是寫出空的在C#代碼中的字符串文字。

問題是它引用了本地化的版本,而這些不會被編譯爲代碼。

下面是一個簡短的代碼示例:

this.rpAllFields.KeyTip = 
    global::namespaces.SystemMessagesResources_sv_SE. 
    dash_red_shift_info_description; 

在這種情況下,dash_red_shift_info_description沒有爲SV-SE區域設置的值,因此設計,當它看到在代碼中一個空字符串,將嘗試鏈接到該資源。但是SystemMessagesResources_sv_SE不是一個現有的類,但看起來是瑞典本地化版本的SystemMessagesResources資源文件的一個生成的類名,編譯爲一個類。

這是可以避免的嗎?每次我們在表單文件中改變某些內容時,我們都會對搜索/替換感到厭倦,而且我們確信我們已經做了一次巴掌 - 我的額頭 - 骨頭的事情,這會發生,但我們自然無法找到自己的原因。

上面的代碼會,如果我們去掉了資源,這樣寫的:

this.rpAllFields.KeyTip = ""; 

回答

2

您可以嘗試創建一個字符串資源empty_string,定義爲「」爲每個地區。如果您將其作爲第一個資源,表單設計人員(希望)會始終選擇該資源作爲通過表單投放的值。這樣至少你會使用爲此目的指定的字符串。

0

多少你需要的資源,它的值是一個空字符串?我可以想象一些多語言場景,其中某些資源鍵應該對應於某些受支持語言中的空白(如果對某些UI元素使用字符串連接),是的。

但是,如果我的情況不是這樣的話,我只會用空字符串廢棄資源項。我只是說,「無論如何,什麼獨立的UI文本翻譯爲空白?」。

如果我真的需要的資源是空白一些案件,(它代表的一篇文章中一種語言和地方在另一個不存在等價詞),我會嘗試看看我是否能產生同樣的影響其他方式。

+0

資源項具有原始語言的值,但不在另一箇中,因此爲空字符串。如果我刪除資源條目,它將默認恢復爲原來的語言,這也是錯誤的。 – 2009-01-27 20:58:19

+0

你是否自己使用了空字符串(例如作爲UI元素的文本),還是與其他字符串連接形成短語?如果是後者,我只會分散純粹主義者一秒鐘的時間,並將不規則資源硬編碼爲區域感知屬性。 – Ishmaeel 2009-01-28 07:16:33

0

生成的資源文件和代碼示例會很好。

你所說的是:你的命名空間中有一個空的字符串字面定義(第一個找到的),但是這導致了一些問題?在任何時候都不是空的嗎?當你編譯代碼時,它會做一些古怪的事情來節省空間。在生成帶有代碼隱藏的XAML文件時,我遇到了一個類似的問題,用於動態自動構建程序集文件:編譯器足夠聰明,可以知道「它沒有什麼區別,但對我們來說,它做到了,因爲它會重命名文字(在別處使用)。

爲了解決這個問題,我們在命名空間中爲這些原語使用了命名的類型,並將其作爲全局的。我在這裏看到的是,你的全局命名空間正在填充空白 - 你可能想要一個'下面'來評估所有的空字符串。

我還沒有在這一年多的工作,所以原諒我,如果我的措辭很差,但我的意思是:認爲XML。你需要明確地在屬性中使用命名空間,或者將它們分配得較低(如xaml中的附加屬性)。

我希望這有助於(和有意義)

+0

這是一個由資源編輯器完全管理和生成的資源文件,因此除非我想重寫整個資源系統,否則我懷疑我可以在這裏隨便引入命名空間。 – 2009-01-27 20:59:11

2

如果問題是由在資源文件中一個空字符串,將效果是使得它的空間是什麼原因造成。因此,而不是「」資源文件包含「」。我不知道這是否是最好的解決方案,但我很想知道它是否會阻止設計人員將該資源用作默認空字符串。然而,不知道它是如何使用的,我不確定具有應該未定義的值的影響應該被定義爲空間...

相關問題