[13] | 1 | Attribute VB_Name = "Internationalization" |
---|
| 2 | Option Explicit |
---|
| 3 | |
---|
| 4 | Dim Resources() As String |
---|
| 5 | Dim Languages() As String |
---|
| 6 | Dim LangPath() As String |
---|
| 7 | Dim lang_fname As String |
---|
| 8 | Dim isResLoaded As Boolean |
---|
| 9 | Dim isLangLoaded As Boolean |
---|
| 10 | Dim currLangPath As String |
---|
| 11 | Dim currLangIndex As Integer |
---|
| 12 | |
---|
| 13 | Public Declare Function GetUserDefaultLCID Lib "kernel32" () As Long |
---|
| 14 | Private clsSatellite As Object |
---|
| 15 | |
---|
| 16 | Public Function LoadLocalizedResources_dll() As Boolean |
---|
| 17 | Dim lLocalID As String |
---|
| 18 | |
---|
| 19 | ' Find the LocalID. |
---|
| 20 | lLocalID = Hex(GetUserDefaultLCID) |
---|
| 21 | |
---|
| 22 | ' Load the Satellite DLL that contains the local |
---|
| 23 | ' resource object to be used. If CreateObject |
---|
| 24 | ' fails, there is no local version of the |
---|
| 25 | ' resources. |
---|
| 26 | |
---|
| 27 | On Error GoTo NoLocalResource |
---|
| 28 | |
---|
| 29 | ' Create a local object containing resources. |
---|
| 30 | 'Set clsSatellite = CreateObject("Language" & lLocalID & ".clsResources") |
---|
| 31 | Set clsSatellite = CreateObject("Language.clsResources") |
---|
| 32 | ' Return true, then read local resources. |
---|
| 33 | LoadLocalizedResources_dll = True |
---|
| 34 | Exit Function |
---|
| 35 | |
---|
| 36 | NoLocalResource: |
---|
| 37 | |
---|
| 38 | ' There is no local satellite DLL. As a result, false is returned. |
---|
| 39 | |
---|
| 40 | LoadLocalizedResources_dll = False |
---|
| 41 | |
---|
| 42 | End Function |
---|
| 43 | |
---|
| 44 | ' GetString will access the object and return the string |
---|
| 45 | ' resources specific to the region. For this example, only |
---|
| 46 | ' basic error handling is implemented. |
---|
| 47 | |
---|
| 48 | Public Function GetString_dll(StringIndex As Long) As String |
---|
| 49 | |
---|
| 50 | ' Make sure there is a resource object. |
---|
| 51 | If Not (clsSatellite Is Nothing) Then |
---|
| 52 | ' Get the resource from the resource object. |
---|
| 53 | GetString_dll = clsSatellite.GetResourceString(StringIndex) |
---|
| 54 | Else |
---|
| 55 | ' For this example, if there is no resource |
---|
| 56 | ' object something is still returned. |
---|
| 57 | GetString_dll = "Error : No Local Data" |
---|
| 58 | End If |
---|
| 59 | End Function |
---|
| 60 | |
---|
| 61 | Public Function LoadLocalizedResources() As Boolean |
---|
| 62 | |
---|
| 63 | 'If isResLoaded Then |
---|
| 64 | 'Exit Function |
---|
| 65 | 'End If |
---|
| 66 | |
---|
| 67 | Dim isUniCode As Boolean |
---|
| 68 | |
---|
| 69 | If currLangPath = "" Or Not FileExists(currLangPath) Then |
---|
| 70 | LoadLocalizedResources = False |
---|
| 71 | Exit Function |
---|
| 72 | End If |
---|
| 73 | |
---|
| 74 | isUniCode = IsUnicodeFile(currLangPath) |
---|
| 75 | |
---|
| 76 | If isUniCode Then |
---|
| 77 | Resources = ParseUnicodeFile(currLangPath) |
---|
| 78 | Else |
---|
| 79 | Resources = ParseAsciiFile(currLangPath) |
---|
| 80 | End If |
---|
| 81 | |
---|
| 82 | LoadLocalizedResources = True |
---|
| 83 | isResLoaded = True |
---|
| 84 | |
---|
| 85 | End Function |
---|
| 86 | |
---|
| 87 | |
---|
| 88 | Public Function GetString(StringIndex As Long) As String |
---|
| 89 | |
---|
| 90 | If UBound(Resources) > StringIndex Then |
---|
| 91 | ' Get the resource from the resource array. |
---|
| 92 | GetString = Resources(StringIndex) |
---|
| 93 | Else |
---|
| 94 | ' For this example, if there is no resource |
---|
| 95 | ' array something is still returned. |
---|
| 96 | GetString = "Error : No Local Data" |
---|
| 97 | End If |
---|
| 98 | End Function |
---|
| 99 | |
---|
| 100 | |
---|
| 101 | |
---|
| 102 | Public Function ParseUnicodeLangFile(ByVal fname As String) |
---|
| 103 | |
---|
| 104 | Dim OutRec As String, uniCode As String, str() As String |
---|
| 105 | |
---|
| 106 | ReDim Languages(30) |
---|
| 107 | ReDim LangPath(30) |
---|
| 108 | |
---|
| 109 | Dim pos As Integer |
---|
| 110 | |
---|
| 111 | Open fname For Binary As #1 |
---|
| 112 | |
---|
| 113 | uniCode = InputB(2, #1) |
---|
| 114 | |
---|
| 115 | OutRec = "" |
---|
| 116 | pos = 0 |
---|
| 117 | |
---|
| 118 | Do While Not EOF(1) |
---|
| 119 | |
---|
| 120 | uniCode = InputB(2, #1) |
---|
| 121 | |
---|
| 122 | If EOF(1) Then |
---|
| 123 | Exit Do |
---|
| 124 | End If |
---|
| 125 | |
---|
| 126 | Select Case AscW(uniCode) |
---|
| 127 | Case AscW(vbNewLine) |
---|
| 128 | uniCode = InputB(2, #1) |
---|
| 129 | |
---|
| 130 | If Trim$(OutRec) <> "" Then |
---|
| 131 | str = Split(OutRec, "=") |
---|
| 132 | |
---|
| 133 | If UBound(str) > 0 Then |
---|
| 134 | |
---|
| 135 | If pos >= UBound(Languages) Or pos >= UBound(LangPath) Then |
---|
| 136 | ReDim Languages(pos + 10) |
---|
| 137 | ReDim LangPath(pos + 10) |
---|
| 138 | End If |
---|
| 139 | Languages(pos) = str(0) |
---|
| 140 | LangPath(pos) = str(1) |
---|
| 141 | pos = pos + 1 |
---|
| 142 | End If |
---|
| 143 | End If |
---|
| 144 | |
---|
| 145 | OutRec = "" |
---|
| 146 | Case Else |
---|
| 147 | OutRec = OutRec & uniCode |
---|
| 148 | |
---|
| 149 | End Select |
---|
| 150 | |
---|
| 151 | Loop |
---|
| 152 | |
---|
| 153 | |
---|
| 154 | |
---|
| 155 | If Trim$(OutRec) <> "" Then |
---|
| 156 | str = Split(OutRec, "=") |
---|
| 157 | |
---|
| 158 | If UBound(str) > 0 Then |
---|
| 159 | Languages(pos) = str(0) |
---|
| 160 | LangPath(pos) = str(1) |
---|
| 161 | End If |
---|
| 162 | End If |
---|
| 163 | |
---|
| 164 | Close #1 |
---|
| 165 | |
---|
| 166 | |
---|
| 167 | End Function |
---|
| 168 | |
---|
| 169 | |
---|
| 170 | Public Function ParseAsciiLangFile(ByVal fname As String) |
---|
| 171 | Dim OutRec As String |
---|
| 172 | Dim str() As String |
---|
| 173 | |
---|
| 174 | ReDim Languages(30) |
---|
| 175 | ReDim LangPath(30) |
---|
| 176 | Dim pos As Integer |
---|
| 177 | |
---|
| 178 | Open fname For Input Access Read Shared As #1 |
---|
| 179 | |
---|
| 180 | Do While Not EOF(1) |
---|
| 181 | |
---|
| 182 | Line Input #1, OutRec |
---|
| 183 | |
---|
| 184 | |
---|
| 185 | If Trim$(OutRec) <> "" Then |
---|
| 186 | str = Split(OutRec, "=") |
---|
| 187 | |
---|
| 188 | If UBound(str) > 0 Then |
---|
| 189 | If pos >= UBound(Languages) Or pos >= UBound(LangPath) Then |
---|
| 190 | ReDim Languages(pos + 10) |
---|
| 191 | ReDim LangPath(pos + 10) |
---|
| 192 | End If |
---|
| 193 | Languages(pos) = str(0) |
---|
| 194 | LangPath(pos) = str(1) |
---|
| 195 | pos = pos + 1 |
---|
| 196 | End If |
---|
| 197 | End If |
---|
| 198 | |
---|
| 199 | Loop |
---|
| 200 | |
---|
| 201 | Close #1 |
---|
| 202 | |
---|
| 203 | |
---|
| 204 | End Function |
---|
| 205 | |
---|
| 206 | Public Function LoadLanguages() As Boolean |
---|
| 207 | |
---|
| 208 | If isLangLoaded Then |
---|
| 209 | LoadLanguages = True |
---|
| 210 | Exit Function |
---|
| 211 | End If |
---|
| 212 | |
---|
| 213 | Dim isUniCode As Boolean |
---|
| 214 | |
---|
| 215 | If lang_fname = "" Then |
---|
| 216 | lang_fname = "languages\Language.txt" |
---|
| 217 | End If |
---|
| 218 | |
---|
| 219 | If Not FileExists(lang_fname) Then |
---|
| 220 | LoadLanguages = False |
---|
| 221 | Exit Function |
---|
| 222 | End If |
---|
| 223 | |
---|
| 224 | isUniCode = IsUnicodeFile(lang_fname) |
---|
| 225 | |
---|
| 226 | If isUniCode Then |
---|
| 227 | ParseUnicodeLangFile (lang_fname) |
---|
| 228 | Else |
---|
| 229 | ParseAsciiLangFile (lang_fname) |
---|
| 230 | End If |
---|
| 231 | |
---|
| 232 | LoadLanguages = True |
---|
| 233 | |
---|
| 234 | End Function |
---|
| 235 | |
---|
| 236 | Public Function GetLanguageName(StringIndex As Long) As String |
---|
| 237 | |
---|
| 238 | If UBound(Languages) > StringIndex And StringIndex >= 0 Then |
---|
| 239 | GetLanguageName = Languages(StringIndex) |
---|
| 240 | Else |
---|
| 241 | GetLanguageName = "Error : No Language Data" |
---|
| 242 | End If |
---|
| 243 | |
---|
| 244 | End Function |
---|
| 245 | |
---|
| 246 | Public Function GetLanguagePath(StringIndex As Long) As String |
---|
| 247 | |
---|
| 248 | If UBound(LangPath) > StringIndex And StringIndex >= 0 Then |
---|
| 249 | GetLanguagePath = LangPath(StringIndex) |
---|
| 250 | Else |
---|
| 251 | GetLanguagePath = "Error : No Language Data" |
---|
| 252 | End If |
---|
| 253 | |
---|
| 254 | End Function |
---|
| 255 | |
---|
| 256 | Public Function GetLanguages() As String() |
---|
| 257 | GetLanguages = Languages |
---|
| 258 | End Function |
---|
| 259 | |
---|
| 260 | Public Function SetCurrLangPath(ByVal path As String) |
---|
| 261 | currLangPath = path |
---|
| 262 | End Function |
---|
| 263 | |
---|
| 264 | Public Function GetCurrLangPath() As String |
---|
| 265 | GetCurrLangPath = currLangPath |
---|
| 266 | End Function |
---|
| 267 | |
---|
| 268 | Public Function GetCurrLangIndex() As Integer |
---|
| 269 | GetCurrLangIndex = currLangIndex |
---|
| 270 | End Function |
---|
| 271 | |
---|
| 272 | Public Function SetCurrLangIndex(ByVal index As Integer) |
---|
| 273 | currLangIndex = index |
---|
| 274 | End Function |
---|