我們在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 = "";
資源項具有原始語言的值,但不在另一箇中,因此爲空字符串。如果我刪除資源條目,它將默認恢復爲原來的語言,這也是錯誤的。 – 2009-01-27 20:58:19
你是否自己使用了空字符串(例如作爲UI元素的文本),還是與其他字符串連接形成短語?如果是後者,我只會分散純粹主義者一秒鐘的時間,並將不規則資源硬編碼爲區域感知屬性。 – Ishmaeel 2009-01-28 07:16:33