Version 4.0

Quite a bit, actually. Although my original intention was simply to add VB5 support, this fell by the wayside as I studied the many thoughtful comments and suggestions that users have sent in since the last major rewrite. In fact, V4's release slipped a month+ because there were so many good ideas that I wanted to implement. Although it remains functionally similar to previous versions, V4 incorporates a lot of new stuff, particularly relating to build options. Most of the new stuff comes from user wishlists, though I'll take credit for some, and for implementation. As always, hats off to the users who provided feedback!

Full VB5 Support

VBLM4 supports all of the new features, file formats, language elements, etc. in VB5. If you can build it in VB5, you can localize it with VBLM4. Of course, some judgement is required: you shouldn't, for example, generate a runtime-switched control (at least, I don't think so...). Of course, VBLM4 also remains fully compatible with VB2, VB3, and both flavors of VB4.

Persistent, Project-Specific Build Options

VBLM now retains all build option settings independently with each project, storing them with other project data in LMP files. VBLM now handles build options in the same manner that previous versions handled string extraction options: new projects inherit VBLM's default settings at the time they are created, but they are then manipulated and stored independently. See Build Options Overview for more info.

Command Line Control for Automation & Batch Processing

VBLM can now be driven completely from the command line to create, load, update, build, and even have VB compile localized projects without user intervention. This capability, desired by both users and myself for quite some time, was made possible in part because LMP files now contain the build option settings. See Command Line Operation for more info about how to have localized executables waiting for you in the morning.

Improved & Expanded Build Options

V4 has many new and improved build options, as well as an improved interface for configuring them. The old separate windows for RSV options, dimensioning options, and supplied font options are gone; replaced with a single tabbed page. New main build options include target directory aliasing, command line control of VB, and the ability to toggle overwrite prompting on and off. New RSV options include the ability to rebuild the language database without rebuilding the code, and the ability to customize property initialization events. Dimensioning options haven't changed, but the supply fonts capability is WAY better; VBLM can now supply font name, size, weight (ie bold/not bold), and charset information, and it can supply it to all controls in a project as well as just to ones without font info. Finally, you can stop VBLM from inserting its "VBLM Version" comment into builds, and turn off those annoying queries when build logging is active and finds a previous log file.

SX Option Tweaks

V4 has a few tweaks but no major changes in string extraction options. V4 can extract/rebuild more string properties stored in binary stash (eg, frx) files. It can be configured to only extract (and replace during builds) the property strings stored in the definition sections of control-containing files (ie, forms, controls, docobjects, and property pages). And as with build logging, you can turn off those annoying queries when extraction logging is active and finds a previous log file.

Miscellany

Hmmm, little things here and there:

> V4's import/export (LMX) files can now be used to transfer excluded-string information between projects.

> During import, V4 doesn't query you about replacement translations if the current translation and the imported one are identical.

> You can change the parent VB project referenced by a VBLM project file simply by right-clicking its name on the main window (previously, you could only get VBLM to reference a different/relocated copy of the parent VB project by hiding the original).

> V4 persists the Code Window always-on-top setting

> Other small improvements that I can't recall right now

A Handful of Bug Fixes

V4 fixes the following bugs found in previous versions of VBLM:

> VBLM3 wouldn't translate VB4+ font name properties unless you removed "Name" as well as "FontName" from the excluded properties list.

> In two cases, VBLM3 used VBLM's default SX options settings instead of the project specific settings when extracting strings and doing builds. The two options were Extract Menu Shortcuts and Extract FRX properties.

> Under very specific and rare circumstances (conditionally declared procedure headings, relative string counts between procedures, etc), VBLM3 reported a subscript out of range error in BuildNewProject.

> When building an RSV with a project that already included a file with the same name as one of the RSV support files that VBLM adds, VBLM3 would rename the support file in the VBP/MAK project file, but NOT the actual support file. When loading the built project, VB would report something like "VBLM_RTA.BA1 does not exist."

 

I think that about covers what's new in VBLM 4.0. Again, many thanks to the users who suggested new features and helped me find and fix bugs!

Ben Whipple

What's New in Version 4.02

VBLM Pro Version 4.02 ships in early March 1998 with some new and improved features, and fixes for all bugs reported since the release of V4.01.

Update Logging

The new update log allows you to keep track more easily of the string table changes that occur when you File/Update VBLM projects. See Update Logging for details.

Supply Font Improvements.

When you supply fonts to a project and instruct VBLM to overwrite existing font info, it now preserves those font attributes that you leave unspecified. V4.02 also lets you specify whether overwritten font info should be removed or commented out. See Supply Fonts for more info, and Hats off to Mark Petronic for the suggestion.

Subscripted Property Handling

Handling enumerated string properties (column headings, for example) has always been a challenge for VBLM. At first, many control vendors tended to store them in FRX files, where they were unaccessible to VBLM (see String Properties and Binary Stash Files for details). More recently, vendors have resumed storing them in FRM files (where they belong, to my way of thinking). The format in which they do so has been evolving, and VBLM has had to keep up. The current standard (to the extent that there is one in the wild world of VB add-ons) seems to be subscripts; for example, Sheridan stores tab properties as follows:

TabCaption(0) = "&Beam" 

TabPicture(0) = "OptnForm.frx":0000 

Tab(0).ControlEnabled= 0 'False 

Tab(0).Control(0)= "ComboSpacing" 

Tab(0).Control(1)= "Picture2" 

Tab(0).Control(2)= "Picture1" 

In previous versions of VBLM, you needed wild cards to match subscripted properties; "Control" would not match the control names as shown, but "Control*" would (as long as pattern matching as active). As of V4.02, however, VBLM recognizes this format for subscripted properties and no wild cards are needed.

Because VBLM finds and extracts all strings unless explicitly configured to exclude them, the real benefit of this change is identifying properties that you DON'T want extracted. The control names stored on Sheridan's tabs are a very good example of this, because a) you don't want to translate them, and b) VBLM users with lots of tabs and controls tended to get "Out of Memory" errors until they put "Control*" on the SX properties list and turned on pattern matching (this is easily the most cause for recent tech support calls). As of V4.02, "Control" is on the default list and pattern matching is unnecessary.

Runtime Switching Improvements

There are several changes to give users greater flexibility while using VBLM to create custom runtime-switched versions:

> If any of a project's RSV support file fields are left blank, VBLM will a) not report an error, b) not make entries for them in the MAK/VBP file, and c) not attempt to copy or edit them. This accommodates users like Tim Simpson and Richard Hardman at Crisp Computing Ltd, currently localizing the UK's market-leading insurance point of sales system: they decided to place RSV support files in the original VB apps and hence don't want VBLM adding them again (and while I suspect that this change is of limited interest to most users, they promised me a bottle of Glenfiddich!).

> There is now a user-specifiable placeholder for excluded-strings in language database files. See Excluded Strings and LANGUAGE.DAT for details, and hats off to Rich Merrill, Gerard Wendling and the team at Unisys-Plymouth for the suggestion.

Power users who wish to supply their own string-replacement function can now override VBLM's default VBLM_RTString with a function name of their choice.

New Command line switches

The /NOVB switch instructs VBLM to ignore the VB Interaction setting stored in the LMP file and have NO interaction with VB.

The /LGU switch instructs VBLM to ignore the update log setting in the LMP file and document string table changes caused by an update in the update log.

Bug Fixes

> The /TD and /LT command line switches now work as advertised (previously, the /TD switch would not override LMP setting, and the /LT switch only invoked the first language table in a multiple language list).

> Reserved words used to name elements of user-defined types no longer cause problems (previously , element names like Function, Sub, and Type could cause VBLM to attempt to read past the end of a file).

> V4.02 now checks all RSV support files for write-protection before attempting to edit them, and unprotects them if necessary.

> V4.02 will create non-existent directories when commanded to build a new language database.

> New default SX excluded properties: Control, DefaultUser,DefaultPassword, SystemDB

> New default SX excluded Function: OpenRecordSet

> The edit control on the Add Table dialog has been changed to more appropriate static label.

> The minimize and maximize buttons have been removed from the LTE Search Dialog

 

That's it. As always, many thanks to those of you who encountered problems with VBLM and took the time and trouble to report them and help me figure them out.

Ben Whipple

Version 4.01

VBLM Pro Version 4.01 ships in mid November 1997. It fixes the handful of bugs reported since V4.0's September release, and adds a few minor enhancements.

V4.01 is also known in-house as the "Hitchings edition," in honor of Tim Hitchings at Sheridan Software. I was delighted when Tim chose VBLM to create the Japanese version of Sheridan's best-selling VBAssistTM 5 product. I was even more delighted when he subsequently filled my mailbox with comments, suggestions, complaints and bug reports as he put VBLM4 through its paces on a very large localization project. Tim thus becomes only the second user in WhippleWare's 6 year history to rate his own popup on the hats off list. Thanks, Tim!

Runtime-Switching Problems and Property Blocks

Those of you familiar with the structure of VB form definitions know that MSFT introduced BeginProperty/EndProperty blocks in VB4 to accommodate the increasing complexity of the properties and controls that forms can contain. These blocks have grown more common yet less syntactically consistent over time. Syntax inconsistencies pose a challenge for VBLM when it builds runtime-switched versions and creates and inserts property initialization code. V4.01 compensates for the most common inconsistencies and generates correct initialization code even for controls that are as weirdly structured as the ImageList. Also, inconsistent property blocks no longer cause VBLM to null any excluded string properties defined within them.

FontProperty vs Font.Property

On a related issue, V401 now uses version-appropriate syntax when adding runtime-switching code to initialize font properties. V4.0 always used VB3's FontProperty (no separating dot) syntax when initializing fonts, a syntax for which some control vendors are phasing out support. V4.01 now inserts the dot when generating VB4+ code.

Broken /INI Option

VBLM's command line switch for using alternate INI files must not be too popular, because nobody reported the fact that I broke it in V4.0 when I added all those other command line switches. If you care, it's fixed; V4.01 properly loads and uses INI files specified on the command line, and does not try to load them as LMP files.

Failure to Copy Write-Protected Binary Stash Files

Due to a bug in the Win32 API, V4.0 running under Win32 would quietly fail to copy FRX and other binary stash files if a write-protected version already existed in the target directory. Fixed (as long as you have equal or greater file privileges as the existing files' owner).

Code Window On Top Adjustment

The code window that pops up when you click the More button in the language table editor (LTE) has an always-on-top setting to keep it visible when the LTE is maximized. Tim pointed out that this caused it to hide the Search dialog, and for that matter, any/all of the various dialogs that can be opened from the LTE. As of V4.01, all LTE dialogs appear in front of the code window even when it's set topmost.

Import Improvements

V4.01 has several enhancements to its import functions, all suggested/requested by Tim. First, VBLM now persists your import options settings, and replaces the series of msgboxes with a single options dialog. Second, the "Replace" dialog has been reformatted to make it easier to read. Finally, VBLM now tracks and reports the number of translations found in the import file that match those already present in the language table; V4.0 counted them as imported.

New 'VBLM SKIP Feature

Just as I wrapping up V401, I got an email from Richard Hardman in the UK, asking how he could exclude strings in single lines of code arbitrarily, without bracketing each one with 'VBLM OFF and 'VBLM ON comments. The answer was that he couldn't, at least not in V40. However, this seemed like a reasonable request that could benefit many users and was easy to implement, so now he can in V401 (and so can you). When the Respect Toggling option is on, VBLM now looks for trailing 'VBLM SKIP comments. This comment causes VBLM to ignore any strings on the line during extraction and build.

Anything Else?

Yes, a handful of minor things, like the fact that VBLM won't push the build options window off-screen when the main window is moved to the bottom edge, and all message boxes now have icons. Nothing earth-shattering, though.

As always, many thanks to those of you who encountered problems with VBLM and took the time and trouble to report them and help me figure them out.

Ben Whipple

Version 4.02

VBLM Pro Version 4.02 ships in early March 1998 with some new and improved features, and fixes for all bugs reported since the release of V4.01.

Update Logging

The new update log allows you to keep track more easily of the string table changes that occur when you File/Update VBLM projects. See Update Logging for details.

Supply Font Improvements.

When you supply fonts to a project and instruct VBLM to overwrite existing font info, it now preserves those font attributes that you leave unspecified. V4.02 also lets you specify whether overwritten font info should be removed or commented out. See Supply Fonts for more info, and Hats off to Mark Petronic for the suggestion.

Subscripted Property Handling

Handling enumerated string properties (column headings, for example) has always been a challenge for VBLM. At first, many control vendors tended to store them in FRX files, where they were unaccessible to VBLM (see String Properties and Binary Stash Files for details). More recently, vendors have resumed storing them in FRM files (where they belong, to my way of thinking). The format in which they do so has been evolving, and VBLM has had to keep up. The current standard (to the extent that there is one in the wild world of VB add-ons) seems to be subscripts; for example, Sheridan stores tab properties as follows:

TabCaption(0) = "&Beam" 

TabPicture(0) = "OptnForm.frx":0000 

Tab(0).ControlEnabled= 0 'False 

Tab(0).Control(0)= "ComboSpacing" 

Tab(0).Control(1)= "Picture2" 

Tab(0).Control(2)= "Picture1" 

In previous versions of VBLM, you needed wild cards to match subscripted properties; "Control" would not match the control names as shown, but "Control*" would (as long as pattern matching as active). As of V4.02, however, VBLM recognizes this format for subscripted properties and no wild cards are needed.

Because VBLM finds and extracts all strings unless explicitly configured to exclude them, the real benefit of this change is identifying properties that you DON'T want extracted. The control names stored on Sheridan's tabs are a very good example of this, because a) you don't want to translate them, and b) VBLM users with lots of tabs and controls tended to get "Out of Memory" errors until they put "Control*" on the SX properties list and turned on pattern matching (this is easily the most cause for recent tech support calls). As of V4.02, "Control" is on the default list and pattern matching is unnecessary.

Runtime Switching Improvements

There are several changes to give users greater flexibility while using VBLM to create custom runtime-switched versions:

> If any of a project's RSV support file fields are left blank, VBLM will a) not report an error, b) not make entries for them in the MAK/VBP file, and c) not attempt to copy or edit them. This accommodates users like Tim Simpson and Richard Hardman at Crisp Computing Ltd, currently localizing the UK's market-leading insurance point of sales system: they decided to place RSV support files in the original VB apps and hence don't want VBLM adding them again (and while I suspect that this change is of limited interest to most users, they promised me a bottle of Glenfiddich!).

> There is now a user-specifiable placeholder for excluded-strings in language database files. See Excluded Strings and LANGUAGE.DAT for details, and hats off to Rich Merrill, Gerard Wendling and the team at Unisys-Plymouth for the suggestion.

Power users who wish to supply their own string-replacement function can now override VBLM's default VBLM_RTString with a function name of their choice.

New Command line switches

The /NOVB switch instructs VBLM to ignore the VB Interaction setting stored in the LMP file and have NO interaction with VB.

The /LGU switch instructs VBLM to ignore the update log setting in the LMP file and document string table changes caused by an update in the update log.

Bug Fixes

> The /TD and /LT command line switches now work as advertised (previously, the /TD switch would not override LMP setting, and the /LT switch only invoked the first language table in a multiple language list).

> Reserved words used to name elements of user-defined types no longer cause problems (previously , element names like Function, Sub, and Type could cause VBLM to attempt to read past the end of a file).

> V4.02 now checks all RSV support files for write-protection before attempting to edit them, and unprotects them if necessary.

> V4.02 will create non-existent directories when commanded to build a new language database.

> New default SX excluded properties: Control, DefaultUser,DefaultPassword, SystemDB

> New default SX excluded Function: OpenRecordSet

> The edit control on the Add Table dialog has been changed to more appropriate static label.

> The minimize and maximize buttons have been removed from the LTE Search Dialog

 

That's it. As always, many thanks to those of you who encountered problems with VBLM and took the time and trouble to report them and help me figure them out.

Ben Whipple

See Also

Complete Revision History