Localized keyboard layouts

The lv_keyboard widget currently supports custom keymaps which is great. Unfortunately, though the number of layers is limited by the lv_keyboard_mode_t enum:

enum {
    LV_KEYBOARD_MODE_TEXT_LOWER,
    LV_KEYBOARD_MODE_TEXT_UPPER,
    LV_KEYBOARD_MODE_SPECIAL,
    LV_KEYBOARD_MODE_NUMBER,
};
typedef uint8_t lv_keyboard_mode_t;

This is quite limiting, especially for non-English layouts. German, for instance, has additional characters such as ä, ö, ü, and ß and also symbols such as @, § and €.

When comparing to squeekboard, their default US layout has 4 layers and the Czech layout even has 6.

It would be great if the keyboard widget supported a larger number of layers so that suitable keymaps for different locales can be created.

For instance, the enum could be extended to

LV_KEYBOARD_MODE_TEXT_LOWER,
LV_KEYBOARD_MODE_TEXT_UPPER,
LV_KEYBOARD_MODE_TEXT_NUMBER,
LV_KEYBOARD_MODE_TEXT_SYMBOL,
LV_KEYBOARD_MODE_TEXT_CUSTOM_1,
LV_KEYBOARD_MODE_TEXT_CUSTOM_2,
LV_KEYBOARD_MODE_NUMBER,

where the two custom layers could just be configured blank / unused in the default layout.

I like this idea. We can add more, e.g. 8 custom modes. IMO by default we should assign e.g. the lower case map to the custom modes.

Great! I opened https://github.com/lvgl/lvgl/pull/2651 to add the extra modes.