First of all, using file IO actually will decrease the current code size, cause there will be less code instructions filling the mapping.
Also, the current mapping is not really just a simple enumeration, and combinations already work... Ie. Shift & f = F, Shift & 3 = #, etc. And this can differ from language as it is determined by the current mapping.
Additionally, the KeyCode enum is what DirectInput returns from the keyboard (and it is not really the KeyCode, but a ScanCode). Not sure what you would want to with typedef'ing a ScanCode variable. In fact, language selection should happen at runtime, not compile time, so I do not think a typedef would work... For, you should be able to build your app in (for instance) the US, and distribute it to any country and have it just work. Of course, this does mean that (a) the lib may need to determine current locale, or (b) the app has a user dialog that the user can select langauge from.