摘要:懶人用的多國語言實現之方法
目前手上的案子,多國的方式是都直接寫在 App.config 裡面的 appSettings section,要用時直接調用
ConfigurationManager.AppSettings("ABC"), 這方法沒錯,有達成目的。。。
然而距離我所定義的"懶人之法", 可是差太遠了~
1. 好維護 (X)
2. 易於使用 (O)
單單第一點就不合格了,可以想像在一個 section 裡有 3xxx 行的 <add key, 找一個關於 A form 所引用到
的文字時,是多麼痛苦的一件事,而新增時,所取的 key 值也擔心是否有其他 form 用到。。。
ConfigurationManager.AppSettings("ABC"), 這方法沒錯,有達成目的。。。
然而距離我所定義的"懶人之法", 可是差太遠了~
1. 好維護 (X)
2. 易於使用 (O)
單單第一點就不合格了,可以想像在一個 section 裡有 3xxx 行的 <add key, 找一個關於 A form 所引用到
的文字時,是多麼痛苦的一件事,而新增時,所取的 key 值也擔心是否有其他 form 用到。。。
利用 vb form 的 localizable 的特性,直接加入 resource 裡,一個 resource 對一個 form,也不會搞混,
易於查找修改,然而 runtime 時,怎麼取出字串呢? 懶人的方法就是寫個 function 去取回所要的字申
易於查找修改,然而 runtime 時,怎麼取出字串呢? 懶人的方法就是寫個 function 去取回所要的字申
Public Function GetResString(ByVal obj As Object, ByVal Tag As String) As String
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(obj.GetType())
Dim str As String = resources.GetString(Tag)
If (str Is Nothing) Then
str = ""
End If
Return str
End Function
使用方法:
GetResString(Me, "ABC")
注意一點的是英文訊息決不能丟入 xxxx.resx 裡,那麼只要 UI 有變更時 xxxx.resx 會重新做一份
而自訂的訊息是都會消失,因此一定要擺入 xxxx.en-US.resx 裡
我很懶,但也要懶的有格調 XD