2

リソースファイルで利用可能なすべての言語の文字列を取得する方法はありますか?2つの言語で同時にラベルを表示する必要がありました。

4

1 に答える 1

2

標準のVB6リソースファイルを使用する場合は、2つの方法があります。

1つは、リソースファイル内の範囲によって文字列の各言語バージョンを定義することです。したがって、次のように文字列をラップするクラスがあったとします。

'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を自由に設定して、文字列値をフェッチできます。


各言語が独自のリソースファイルを取得する別の方法は、言語ごとにActiveXdllプロジェクトを作成することです。これらの各プロジェクトは、上記と同様の1つのクラスのみを公開します。理想的には、ベースとして使用するデフォルトの言語があり、他の言語はそれを参照してクラスを実装します。

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

お役に立てば幸いです。

于 2012-11-09T15:01:08.073 に答える