1
有沒有辦法檢索資源文件中所有可用語言的字符串?我剛剛獲得了以兩種語言同時顯示標籤的要求。如何從資源文件中檢索所有語言的字符串VB6
有沒有辦法檢索資源文件中所有可用語言的字符串?我剛剛獲得了以兩種語言同時顯示標籤的要求。如何從資源文件中檢索所有語言的字符串VB6
如果你想使用標準的VB6資源文件,你有兩種方法。
第一個是通過資源文件中的範圍來定義字符串的每種語言版本。所以說,你有一個類來包裝起來的字符串是這樣的:
'In Class clsLocalizedStrings
Public Enum StringIds
UserNameCaption = 1
PasswordCaption
OkayCaption
CancelCaption
End Enum
Public Enum LocaleIds
English = 1000
French = 2000
Spanish = 3000
End Enum
Private mLangId As LocaleIds
Public Property Get CurrentLanguge() As LocaleIds
CurrentLanguge = mLangId
End Property
Public Property Let CurrentLanguge(ByVal newVal As LocaleIds)
mLangId = newVal
End Property
Public Function GetLocalString(ByVal id As StringIds)
Dim lResStrId As Long
lResStrId = mLangId + id
GetLocalString = LoadResString(lResStrId)
End Function
然後,您可以設置CurrentLanguge隨意並獲取字符串值。
其中每種語言都有自己的資源文件的替代方法是爲每種語言創建一個ActiveX dll項目。這些項目中的每一個都只會公開一個與上面類似的類。理想情況下,你必須爲基地,使用默認的語言,和其他參考它來實現類:
'In Class LocalizedStrings in Project DefaultResources (with its own English resource file)
Public Enum StringIds
UserNameCaption = 1
PasswordCaption
OkayCaption
CancelCaption
End Enum
Public Function GetLocalString(ByVal id As StringIds)
GetLocalString = LoadResString(id)
End Function
'In Class FrenchStrings in Project FrenchResources (with its own French resource file)
Implements DefaultResources
Public Function DefaultResources_GetLocalString(ByVal id As DefaultResources.StringIds)
DefaultResources_GetLocalString= LoadResString(id)
End Function
然後在你的主應用程序,您引用這些DLL,讓他們在一個類或模塊可供選擇:
'In Class clsLocalization in main app project
Public Enum LocaleIds
English = 1
French = 2
Spanish = 3
End Enum
Private mLangId As LocaleIds
Private mResources() as DefaultResources
Private Sub Class_Initialize()
Redim mResources (1 to 3)
Set mResources(1) = DefaultResources.LocalizedStrings 'assumes english is default, easy to change though
Set mResources(2) = FrenchResources.FrechStrings
Set mResources(3) = SpanishResources.SpanishStrings
End Sub
Public Property Get CurrentLanguge() As LocaleIds
CurrentLanguge = mLangId
End Property
Public Property Let CurrentLanguge(ByVal newVal As LocaleIds)
mLangId = newVal
End Property
Public Function GetLocalString(ByVal id As StringIds)
GetLocalString = mResources(mLangId).GetLocalString(id)
End Function
Public Propert Get Langauge(ByVal langId As LocaleIds)
Return mResources(langId)
End Property
這一個模塊中:
Global Localization As clsLocalization
THN你使用這樣的:
'show caption for current languge
MsgBox Localization.GetLocalString(StringIds.UserCaption)
'show caption for explicit languge
MsgBox Localization.Langauge(French).GetLocalString(StringIds.UserCaption)
MsgBox Localization.Langauge(Spanish).GetLocalString(StringIds.UserCaption)
希望有幫助!
您是否試圖從內置的VB6嵌入式資源中讀取數據,該數據通常是通過Resource插件編輯的? – tcarvin
是的。我開始使用資源編輯器編輯.Res文件,添加了幾個字符串表。 – Omar