The main (only?) way to get keyboard input when in the grub2 menu system is via the read command.
The terminal_input at_keyboard + keymap commands causes severe reliability issues with grub2, and it cannot be used.
Dealing with French (AZERTY) and German (QWERTZ) and other keyboards is still not working in grub2. This is a big problem!
Would it be possible to add simple keyboard support to the read command (or perhaps to whatever 'getkey' call is used by the read command) to 'translate' the keyboard characters. This may not solve the problem for entering commands at the terminal, but it would solve the problem of user input using the read command (e.g. name, password, etc.).
e.g. Add a new command to change a keyboard character on input so the read command returns the correct character.
Here is an example for grub4dos which uses a batch file for a german qwertz keyboard:
!BAT
#GERMAN
errorcheck off
#clear all settings
setkey
#setkey [new character] [QWERTY-USA character]
setkey z y
setkey Z Y
setkey y z
setkey Y Z
setkey doublequote at
setkey ampersand caret
setkey slash ampersand
setkey parenleft asterisk
setkey parenright parenleft
setkey equal parenright
setkey question underscore
setkey backslash minus
setkey plus bracketright
setkey asterisk braceright
setkey semicolon less
setkey colon greater
setkey minus slash
setkey backslash Aminus
setkey underscore question
setkey caret backquote
setkey quote equal
setkey backquote plus
setkey bracketleft semicolon
setkey braceleft colon
setkey bracketright quote
setkey braceright doublequote
setkey bar bracketleft
setkey at braceleft
setkey numbersign backslash
setkey at Aq
setkey less oem102
setkey greater shiftoem102
setkey braceleft A7
setkey bracketleft A8
setkey bracketright A9
setkey braceright A0
setkey tilde Abracketright
setkey backslash Aminus
#key names
#escape, exclam (!), at (@), numbersign (#), dollar ($), parenright ()), caret (^), ampersand (&), asterisk (*), plus (+), percent (%)
#minus (-), underscore (_), equal (=), parenleft [(], backspace (backspace), tab (Tab), bracketleft ([), braceleft ({), bracketright (])
#braceright (}), enter (carriage return), semicolon (;), colon (:), quote (') , doublequote ("), slash (/), backquote (`), tilde (~)
#backslash (\), bar (|), comma (,), less (<) period (.) , greater (>), question (?)
#space, home, uparrow, pageup, leftarrow, center, rightarrow, end, downarrow, pagedown, insert, delete, F1-F10, shiftF1-shiftF10, ctrlF1-ctrlF10
#Use prefix A for Alt+, e.g. Aequals, Aq, Aslash, A0, etc. Also oem102 and shiftoem102.