如何从所有语言VB6的资源文件中检索字符串

时间:2012-11-06 17:39:41

标签: vb6

有没有办法检索资源文​​件中所有可用语言的字符串?我只要求同时以2种语言显示标签。

1 个答案:

答案 0 :(得分:2)

如果要使用标准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  

你这样使用它:

'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)

希望有所帮助!

相关问题