Another area where we see entirely too many duplicate hotkey bugs is in the MMC snap-ins.
MMC, Microsoft Management Console, is pretty cool. It was implemented to give developers a handy frame work for building management tools, which in turn makes it easier for administrators to do their job since different components can be configured in similar ways in one single UI. While MMC is a common framework for all snap-ins, it still gives the developer a lot of flexibility in how they design their snap-ins. Just look at how different the Enterprise Manager is from the Disk Defragmenter, for instance.
Developers have full control over how their snap-ins look and work. They can customize pretty much everything. For instance, every time a menu is about to be displayed, an event is raised that allows the developer to add the menu entries that make sense depending on the context in which the menu is shown. In fact, all context menus in MMC work like this, and that’s what’s hurting localization.
MMC provides a set of common menu items, such as Refresh, New, Properties, and Help. These aren’t normal Win32 menus though. Instead, they’re created at runtime from resources in the string table in mmcbase.dll. These common items are then merged with the snap-in specific menu items in whatever fashion the developer wants at runtime. The snap-in specific menu items are typically defined in the string table in the snap-in DLL.
As a localizer, I can see a string in a snap-in and figure out that it’s used as a menu item, but because the menus are built at runtime I can not at localization time know what fits together with what. When I’m localizing a particular snap-in, I can’t even know which of the menu items in mmcbase.dll the string I’m localizing will be combined with.
To illustrate what I mean, here’s the context menu from Enterprise Manager running on Swedish Windows. Here you can fairly easily see what’s from mmcbase.dll [the stuff in Swedish] and what comes from the Enterprise Manager snap-in. You can also see a couple of duplicate hotkeys that are caused by the mixed-language environment, but these issues can happen regardless of language:
Here’s what I do:
- On my wall, I have a sticky-note with a list of the seven most common entries, and whenever I’m localizing snap-ins I try to avoid using those characters as hotkeys. Just as always avoiding N(ext), B(ack) and A(pply), this helps reducing bugs up front.
- I always try to have a build installed next to me, so when I’m localizing a snap-in I can try to find where each string is used. This isn’t always easy though as you might not be able to reproduce all scenarios.
I don’t like localizing snap-ins. However careful I am, I can’t predict what will happen in runtime. Also, as you see above, it’s entirely possible that your snap-in will run on a machine with a different base language, which means a different language in mmcbase.dll which in turn means different hotkeys for the most common options. I’m not very confident that we’ll ever be able to fully prevent these duplicate hotkeys. Whatever we do, some users will see duplicate hotkeys…
This posting is provided “AS IS” with no warranties, and confers no rights.