2012-11-06 18 views
1

有沒有辦法檢索資源文​​件中所有可用語言的字符串?我剛剛獲得了以兩種語言同時顯示標籤的要求。如何從資源文件中檢索所有語言的字符串VB6

+0

您是否試圖從內置的VB6嵌入式資源中讀取數據,該數據通常是通過Resource插件編輯的? – tcarvin

+0

是的。我開始使用資源編輯器編輯.Res文件,添加了幾個字符串表。 – Omar

回答

1

如果你想使用標準的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) 

希望有幫助!

相關問題