Yeah, Off, Unicode,and Ascii is like a state machine and can be changed at anytime reducing the overhead of translating the character.
Multiple keyDown messages is the best way to handle repeats if enabled. Because, this is also the only place that the tranlation should be done (on Windows and Linux it is a little extra oevrload to tranlates the charcter, so it is only done once).
A thing to note about key events, they were not originally part of OIS. DirectInput (used on Windows) does not send repeated key events for held done keys. But, on Linux using X11, you will continue getting X Events when holding down a key. Though, you get a keyDown/keyRelease pair multiple times, which makes detecting it as a repeated key difficult, it could be the user hitting the key really fast. So, by default, it is disabled, the extra param is just in case the user did want to made there code a little OS specific behavior for X Repeats.
I think, in the next release of OIS, that there will be an added setAutoRepeat( int someTime = 0 for off ) where the user can turn off, or set a time value for when repeated keys will be sent. Which would result in multiple keyDown events, not a keyDown and then keyup (since the key would never be up). This would be useful of course for text enry where the user wants to hold down the key (usually the arrow keys are used mostly for repeated keys). However, on Linux, I will not use the standard X events, as they would result in keyUp messages, and DirectInput does not send repeated keys. So, on those platforms it would be a library internal method that would be done in the Capture method if enabled. Though, it would also mean more code and the use of system timers. So, i think a 0.6.0 release is better for that.