VERSION 1.0 CLASS | |
BEGIN | |
MultiUse = -1 'True | |
END | |
Attribute VB_Name = "StringDataManager" | |
Attribute VB_GlobalNameSpace = False | |
Attribute VB_Creatable = False | |
Attribute VB_PredeclaredId = False | |
Attribute VB_Exposed = True | |
'************************************************************************* | |
' | |
' Licensed to the Apache Software Foundation (ASF) under one | |
' or more contributor license agreements. See the NOTICE file | |
' distributed with this work for additional information | |
' regarding copyright ownership. The ASF licenses this file | |
' to you under the Apache License, Version 2.0 (the | |
' "License"); you may not use this file except in compliance | |
' with the License. You may obtain a copy of the License at | |
' | |
' http://www.apache.org/licenses/LICENSE-2.0 | |
' | |
' Unless required by applicable law or agreed to in writing, | |
' software distributed under the License is distributed on an | |
' "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
' KIND, either express or implied. See the License for the | |
' specific language governing permissions and limitations | |
' under the License. | |
' | |
'************************************************************************* | |
Option Explicit | |
Private langDict As Scripting.Dictionary | |
Private mFileName As String | |
Const C_PRODUCTNAME = "<PRODUCTNAME>" | |
Const C_PRODUCTVERSION = "<PRODUCTVERSION>" | |
Const C_NEXTPRODUCTVERSION = "<NEXTPRODUCTVERSION>" | |
Const C_NEWLINE = "<CR>" | |
' Load strings from the data file (in the form "id=string") into | |
' dictionary object. | |
Function InitStringData(fileName As String) As Boolean | |
On Error GoTo HandleErrors | |
Dim stringFile As TextStream | |
Dim aLine As String | |
Dim valueOffset As Long | |
Dim id, Str As String | |
Dim fso As FileSystemObject | |
'Make sure the string data file exists before opening. | |
Set fso = New Scripting.FileSystemObject | |
If Not fso.FileExists(fileName) Then | |
InitStringData = False | |
Exit Function | |
End If | |
Set stringFile = fso.OpenTextFile(fileName, ForReading, False, TristateTrue) | |
If IsEmpty(stringFile) Then | |
'WriteDebug | |
End If | |
mFileName = fileName | |
'Read each line and parse the id and string, then put into dictionary | |
Do While Not stringFile.AtEndOfStream | |
aLine = stringFile.ReadLine | |
valueOffset = InStr(aLine, "=") | |
id = Left(aLine, valueOffset - 1) | |
Str = Right(aLine, Len(aLine) - valueOffset) | |
langDict.Add id, Str | |
Loop | |
stringFile.Close | |
Dim aProductName As String | |
Dim aProductVersion As String | |
Dim aNextProductVersion As String | |
Dim aKey As Variant | |
Dim aItem As String | |
Dim aOldItem As String | |
aProductName = langDict.item("RID_STR_COMMON_PRODUCTNAME") | |
aProductVersion = langDict.item("RID_STR_COMMON_PRODUCTVERSION") | |
aNextProductVersion = langDict.item("RID_STR_COMMON_NEXTPRODUCTVERSION") | |
For Each aKey In langDict | |
aOldItem = langDict.item(aKey) | |
aItem = ReplaceTopicTokens(aOldItem, C_PRODUCTNAME, aProductName) | |
aItem = ReplaceTopicTokens(aItem, C_PRODUCTVERSION, aProductVersion) | |
aItem = ReplaceTopicTokens(aItem, C_NEXTPRODUCTVERSION, aNextProductVersion) | |
aItem = ReplaceTopicTokens(aItem, C_NEWLINE, vbLF) | |
If (Not (aOldItem = aItem)) Then | |
langDict.item(aKey) = aItem | |
End If | |
Next | |
InitStringData = True | |
FinalExit: | |
Exit Function | |
HandleErrors: | |
WriteDebug "InitStringData : " & Err.Number & " " & Err.Description & " " & Err.Source | |
InitStringData = False | |
End Function | |
'Set String Data from an existing dictionary | |
Public Property Set StringData(data As Scripting.Dictionary) | |
Set langDict = data | |
End Property | |
'Get String Data dictionary | |
Public Property Get StringData() As Scripting.Dictionary | |
Set StringData = langDict | |
End Property | |
'Initialize a given string variable by id | |
Function InitString(ByRef resRef As String, resName As String) | |
resRef = langDict.item(resName) | |
End Function | |
Private Sub Class_Initialize() | |
Set langDict = New Scripting.Dictionary 'Allocate the string dictonary | |
End Sub | |
Private Sub Class_Terminate() | |
langDict.RemoveAll | |
Set langDict = Nothing 'Empty the dictionary and remove the instance | |
End Sub |