One more example of duplicate hotkeys and then I'll let it go. Five is enough.

A lot of applications are distributed as MSI files. From the user's point of view, an MSI file is just a series of "Next" buttons just like any other wizard. From a localizer's point of view, they're a little bit different though.

Quick re-cap: A normal win32 wizard gets its Back and Next buttons from comctl32.dll. MSIs on the other hand contain their own Back and Next buttons. I'm not sure why this is so, but it's a good thing from a hotkey bug perspective. It's not uncommon to install an application in a different language than the operating system it'll run on. If the Back and Next buttons were taken from the operating system, the MSI localizer wouldn't know what hotkeys would be used for these buttons at runtime, and so couldn't possbily avoid duplications.

From a hotkey point of view, there are two different types of MSIs. The first one looks like this in my localization tool. It has a Back button and a Next button, complete with text, on each and every page. Like so:

This makes it easy both to visually ensure that there aren't any dupes or clippings and to automate a check that reports any problems. On the flip side, there's a risk that the localizer uses different hotkeys or translations for these bugs on each and every page. This isn't likely to happen if the localizer is experienced, but still - there's a risk.

The second type looks like this in my localization tool. It has a couple of buttons, but you can't read the text:

The text on these buttons reads "[ButtonText_Back]", "[ButtonText_Next]" and "[ButtonText_Cancel]". Just like "[ProductName]" in both examples, these are placeholders. The value for all of these placeholders are statically defined in the Property table inside the MSI. If I'd search in there, I'll find a resource with the ID "ButtonText_Next, and lo and behold, it has the text "&Next >" ("&Nästa >"). As you see, in this type of MSI the text of each button is defined in one single place, and this text is reused all over the place. This is good from a consistency point of view, but it makes it harder for me to avoid duplicate hotkeys and clippings.

Not too hard though, I'm no worse off than with normal wizards. In fact, I'm slightly better off since I can always look up the correct value within the MSI if I'm unsure. And since I can do it manually, I can write a check to do it automatically.

Them placeholders, by the way, they're kinda interesting too. I'll talk more about them later...


 This posting is provided "AS IS" with no warranties, and confers no rights.