初次體驗在Windows Form裡加入多語系支援,照著MSDN上的詳細說明,將Form.Localizable設為true,接著切換Form的Language為不同語系,其餘操作與標準做法完全相同: 點選按鈕、標籤->在屬性視窗輸入文字,便能為同一個Form設定不同語系的文字內容,十分方便。

接下來要為程式碼中的訊息也加入多語版本,文件上說要新增一個resx檔,項目樣版眾多,我就用VS2010最新的關鍵字查詢功能輸入"res”,很快找到了Resource File,加入專案。

高高興興要編譯,系統卻傳出錯誤:
The type or namespace name 'ResourcesAttribute' could not be found (are you missing a using directive or an assembly reference?)    C:\Projects\WebConfigEncryptor\Resource1.cs

仔細一看,Resource1.resx下多附了一個Resource1.cs,而其中有個[Resources]的Attribute被判定為未經宣告。

//------------------------------------------------------------------------------
// <auto-generated>
// Resource1.cs
//
// Do not edit directly. This file has been generated by ResXFileScriptGenerator v0.6.0.0.
// </auto-generated>
//------------------------------------------------------------------------------
 
using System;
using System.CodeDom.Compiler;
using System.Runtime.CompilerServices;
 
namespace WebConfigEncryptor.Resources {
 
    /// <summary>Resource1 resources class</summary>
    [GeneratedCodeAttribute("ResXInternalScriptGenerator", "0.6.0.0")]
    [Resources]
    internal static class Resource1 {
    }
}

咦? 明明是系統自動產生提供強型別存取資源設定的程式,怎麼會包含無法被編譯的Attribute? 這種瑕疵通過VS2010軟體上市前測試的機率微乎其微,整件事很不合邏輯!!

用程式出現的關鍵字ResXFileScriptGenerator, ResXInternalScriptGenerator在網路上查詢,能查到的資料極少甚至完全沒有! 因此我推論這應不是VS2010的標準機制。如不是VS2010內建功能,那應是外掛或額外加裝的東西導致問題。

忽然想起,昨天裝了Script#來玩(就像GWT可以寫Java後轉Javascript,Script#讓開發者用C#寫前端邏輯,再自動轉成Javascript),才裝完隔天就被害到,該不會這麼帶賽吧? 重做一次加入resx的步驟,定神一看(參見第一張圖),輸入res後,中央清單中有兩個Resource File,而我選了第一個。這回改選最下方的Resource File,發現自動產生的是Resource1.designer.cs,不再是Resource1.cs,所以,我選錯檔案了? 將分類切到Script#,果不其然...

由這次的經驗,我覺得VS2010的項目樣版的查詢功能應再增加分類顯示(或者應該在發現名稱相同項目時加註警語)。在介面改良前,就靠大家眼睛睜大一點囉!


Comments

# by CP

阿... 黑大的標題... 打錯了= ="

# by Jeffrey

to CP, 糗~~ 感謝指正! (我好像可以報名角逐部落格錯字冠軍了)

# by CP

我只是要切換頁面的時候... 看到奇怪的字= = 我還以為我看錯了XD

Post a comment