2007年10月8日 星期一

POST上去之後無法在文章中顯示的字

POST上去之後無法在文章中顯示的字,
可以用代碼:


  • < 用 &lt; 取代

  • > 用 &gt; 取代

  • & 用 &amp; 取代


2007年10月7日 星期日

如何將繁體ASP.Net WebSite轉成繁簡體?

如何將繁體ASP.Net WebSite轉成繁簡體?
不管開始寫網頁或已完成的ASPX繁體網站,
要轉簡體版都是一件"繁"人的工作.

早期並不是沒想到國際化, 只因為案子在趕
只好用複製ASPX的方式, 所幸ASPX.VB程式邏輯
都一樣, 就這樣一個專案不知不覺寫到了快80MB,
一千多支程式維護起來己經不容易還要考慮簡體版同步更新......

這下子只好重新思考簡繁同體, 畢竟程式像個活體,
隨著商業流程一直在擴充及修改.
要同時支援繁簡體並不困難,
只是戲法人人會變,各有巧妙不同.

剛開始用正統的國際化寫法,
可是一下子就打退堂鼓了, 原因無他, 程式太大了,
如果都用資源檔Resource Files, 光讀取這個XML檔
並找到對應文字就不知Performance會降到什麼程度,
更別說要如何建立三組龐大的對應文字.
(如果你的專案不大, 而且有第三種以上的語言需求,
建立資源檔Resource Files倒不失為一個好方法).

如果在資料庫建對照表, 尋找對應的速度應該會比較快,
但維護對照表倒不是個很好的經驗. 而且會影响資料庫及網路效能.

言歸正傳, 我目前簡繁同體進行之方法如下:

適用環境:
VS.NET 2003 - VB.NET

1. ASPX Title 部份寫一支共用vb function :


Public Shared Function GetTile(ByVal v_til As String) As String

Dim Tile As String = v_til
Dim v_cult As String = System.Configuration.ConfigurationSettings.AppSettings("Location").ToString()
If v_cult = "zh-CN" Then
Tile = StrConv(Tile, VbStrConv.SimplifiedChinese, 2052)
End If
Return Tile

End Function


註: Web.config 中的appsettings增加:
繁體或簡體手動設定

<appSettings>
<add key="Location" value="zh-CN"/>
......
</appSettings>

在ASPX之HTML中TITLE改成:

<TITLE>
<% =myfuntion.GetTile("購物車明細資料")%>
</TITLE>

2. 把ASPX中不是runat="server"之繁體文字改為
label物件 並加 runat="server"

3. 在所有*.ASPX.VB程式中的Page_Load加入呼叫
Label, CheckBox 及DataGrid轉換Function:


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Decode_lab(Me.Controls.Item(0))
End If
End Sub


加一個共用轉換Function:

Public Shared Function Decode_lab(ByVal v_control As Object) As Boolean
Dim v_cult As String = System.Configuration.ConfigurationSettings.AppSettings("Location").ToString()
If v_cult = "zh-CN" Then
Dim iii As Integer
Dim v_labt As String
Dim v_labn As String
For iii = 0 To v_control.Controls.Count - 1
v_labt = v_control.Controls.Item(iii).GetType.Name
If v_labt = "Label" Then
v_labn = v_control.Controls.Item(iii).id
Dim v_lab As Label = CType(v_control.FindControl(v_labn), Label)
v_lab.Text = StrConv(v_lab.Text, VbStrConv.SimplifiedChinese, 2052)
End If
If v_labt = "DataGrid" Then v_labn = v_control.Controls.Item(iii).id
Dim v_grd As DataGrid = CType(v_control.FindControl(v_labn), DataGrid)
Dim iv As Integer
Dim v_grdtc As TemplateColumn
Dim v_grdbc As BoundColumn
For iv = 0 To v_grd.Columns.Count - 1
If v_grd.Columns(iv).GetType.Name = "TemplateColumn" Then
v_grdtc = CType(v_grd.Columns(iv), TemplateColumn)
v_grdtc.HeaderText = StrConv(v_grdtc.HeaderText, VbStrConv.SimplifiedChinese, 2052)
End If
If v_grd.Columns(iv).GetType.Name = "BoundColumn" Then
v_grdbc = CType(v_grd.Columns(iv), BoundColumn)
v_grdbc.HeaderText = StrConv(v_grdbc.HeaderText, VbStrConv.SimplifiedChinese, 2052)
End If
Next
End If
If v_labt = "CheckBox" Then
v_labn = v_control.Controls.Item(iii).id
Dim v_chk As CheckBox = CType(v_control.FindControl(v_labn), CheckBox)
v_chk.Text = StrConv(v_chk.Text, VbStrConv.SimplifiedChinese, 2052)
End If
Next
End If
Return True
End Function


至此轉換工作即可告一段落, 剩下的Crystal報表可以參考我用VFP寫的轉換
(
http://roxsu.blogspot.com/2007/06/crystal-reportrpt.html
)

至於圖檔方面就自己慢慢來吧...