gnome-shell/data/cldr2json
Florian Müllner da673639ca cldr2json: Do not overwrite existing files
We had various requests to improve existing OSK layouts, but
haven't accepted them so far as any changes would be overridden
when regenerating the layouts.

However as the upstream layouts at http://www.unicode.org are
extremely slow to update(*), we shouldn't block all improvements.

So instead of letting the update script override all existing
layouts, just make it import new layouts.

(*) not their fault, as the android layouts are a downstream to Google

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1136
2020-03-27 16:44:27 +00:00
..
test data: Move cldr2json fork into subdirectory 2020-03-27 16:44:27 +00:00
cldr2json.py cldr2json: Do not overwrite existing files 2020-03-27 16:44:27 +00:00
README.md data: Move cldr2json fork into subdirectory 2020-03-27 16:44:27 +00:00

cldr2json

This script converts Unicode CLDR android keyboard layouts to JSON usable by GNOME Shell.

CLDR keyboard layouts can be found at http://www.unicode.org/Public/cldr/latest/keyboards.zip

Usage

./cldr2json <input file or directory> <output directory>

example:

./cldr2json cldr/keyboards/android/ json_layouts/

Keyboard layout mapping

Unicode CLDR layout identifiers are language codes, while XKB layout identifiers are... something else. The mapping between the two currently uses heuristic based on the layout descriptions, in this order:

  • if the CLDR layout description matches an XKB layout description, chose its XKB identifier
  • if one word of the CLDR layout description matches an XKB layout description, chose its XKB identifier
  • if the CLDR layout description matches one word of an XKB layout description, chose its XKB identifier

That doesn't always work. For instance it fails for "en" language, that should match "us" XKB identifier. For such cases, there is a mapping in LOCALE_TO_XKB_OVERRIDES at the top of the script. If you discover a weird mapping of if you get a "failed to find XKB mapping for " warning then please consider adding an override there.