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 = "" Const C_PRODUCTVERSION = "" Const C_NEXTPRODUCTVERSION = "" Const C_NEWLINE = "" ' 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