讀寫資源檔範例

我在「多語系網站建置計畫」這一篇文章裡面已經介紹過多語系網站的建置方法。在這裡我要介紹的則是個別資源檔的讀取和修改的方法。為什麼需要去修改資源檔?不是從 VS2005 就可以直接編輯了嗎?是的,但是如果你要讓客戶自己編輯資源檔的內容,怎麼辦?難道你會安裝 VS2005 給客戶使用嗎...

我在「多語系網站建置計畫」這一篇文章裡面已經介紹過多語系網站的建置方法。在這裡我要介紹的則是個別資源檔的讀取和修改的方法。為什麼需要去修改資源檔?不是從 VS2005 就可以直接編輯了嗎?

是的,但是如果你要讓客戶自己編輯資源檔的內容,怎麼辦?難道你會安裝 VS2005 給客戶使用嗎?

在我的構想中,我希望製作一個網頁,讓客戶可以同時編輯包括正體中文、簡體中文和英文,甚至日文等資源檔,而且這些資源檔都必須能輸入 HTML 碼。可以想見,要達成這些功能,你非自行處理資源檔的讀寫不可。

幸好在 ASP.NET 中處理資源檔的讀寫甚至巡覽,都簡單的出乎想像之外。

如果你把 .resx 資源檔用 NotePad 讀出來,你一開始可能會覺得有點陌生。不過如果你把前面一長串註解拿掉之後,你就會發現它只是個很簡單的 XML 檔案。因此,我們就使用標準的 XML 處理方式(通通交給 DataSet)來處理就可以了。

讀取資源檔的程式如下:

Protected Sub BindGrid()
        Dim ds As New DataSet
        ds.ReadXml(MapPath("~/App_GlobalResources/AppResource.resx")) '指定讀取某個資源檔
        GridView1.DataSource = ds.Tables("data")
        GridView1.DataBind()
End Sub

修改並寫入資源檔的程式如下:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        ds.ReadXml(MapPath("~/App_GlobalResources/AppResource.resx"))
        ds.Tables(0).Rows(1)(0) = TextBox1.Text '指定修改某一欄某一列
        ds.WriteXml(MapPath("~/App_GlobalResources/AppResource.resx"))
        BindGrid()
End Sub

要能正確的寫入資源檔,你必須給予 Network Service 或 ASPNET 對 App_GlobalResources 資料夾適當的權限。

此外,經由程式寫入的資源檔,如果和原始的資源檔比較起來,它的內容只能使用「面目全非」來形容,因為其排列已經完全不一樣了。不過令人高興的是,DataSet 物件顯然可以正確無誤的保留資源檔內不可缺少的 resheader 資料(這是資源檔的識別資訊,少了這個資訊,就變成普通的 XML 檔案而已,而不是資源檔了),所以它的內容格式雖然已經和原來不同了,但是應用在多語系網頁依然是沒有問題的。


Dev 2Share @ 點部落