我正在试图在VB NET中构建一个语言字典,以便能够在应用程序中使用多种语言。
这个字典有一个init方法,它从数据库加载整个字典并将其存储在内存中。
在项目的其余类中,我添加了引用,我可以直接使用该对象而无需创建新实例,因为它们的方法是共享的。
我的问题是我如何加载字典内容,以便其他只访问Language.GetWord方法的类获得集合的正确记录,与My.Settings类相同。
当从任何类使用My.Settings时,将加载值。我正在寻找同样的效果。
这是该类的代码:
Public Class LanguageProvider
Private Shared CurrentLanguage As Collection
Public Shared ReadOnly Property GetWord(ByVal Label As String)
Get
Try
Return CurrentLanguage.Item(Label)
Catch ex As Exception
Return Label
End Try
End Get
End Property
Public Shared Sub LoadLanguage(ByVal CultureId As Integer)
Dim SQLController As New SqlDataAccessController
SQLController.SQLSentence = "SELECT DNF_CULTURE_LANGUAGE_LABELS.LABEL, DNF_CULTURE_LANGUAGE_LABELS.VALUE FROM DNF_CULTURE_LANGUAGE_LABELS WHERE DNF_CULTURE_LANGUAGE_LABELS.CULTUREID = " & CultureId & " ORDER BY LABEL;"
SQLController.OpenConnection()
Dim dr As SqlClient.SqlDataReader
dr = SQLController.GetData()
CurrentLanguage = New Collection
While dr.Read()
CurrentLanguage.Add(dr.Item("Value"), dr.Item("Label"))
End While
dr.Close()
SQLController.CloseConnection()
End Sub
End Class
函数LoadLanguage必须在应用程序加载时调用,以便访问数据库一次。
在该属性之后,GetWord必须使用单词访问集合并返回结果。问题是实例不一样,并且在类使用时不加载字典。
感谢。
答案 0 :(得分:0)
的内容
Public Shared ReadOnly Property GetWord(ByVal Label As String)
Get
Try
If CurrentLanguage Is Nothing then
LoadLanguage(theDefaultCultureIdYouWant)
' Now CurrentLanguage is not Nothing any more,
' so LoadLanguage won't be called again
end if
Return CurrentLanguage.Item(Label)
Catch ex As Exception
Return Label
End Try
End Get
End Property
当然,您必须为theDefaultCultureIdYouWant
提供一个值,具体取决于您在没有明确提及特定文化的情况下调用GetWord
时您想要发生的事情。