[keyboardlayouts] change from named layout to a locale+variant system

This change keyboard layouts from using names by conversions to using locale and variant name.

Allows to:
1. In the future, tie keyboard layout to other locale setting.
2. Display a shorter name in the keyboard dialog. Currently kept unchanged, but it's very easy to change to a lang code (or flag like the original PR) now that display name is decoupled.
I'd use a temporary variable of type `const char*` to get the attribute value, then make the comparison on the temp variable and use it again in the assignment. Otherwise the lookup of the attribute has to be performed twice. You can use the same temporary variable for both attributes.