Extract TUI binding descriptions into base.pot and translate raw widget bindings#4587
Extract TUI binding descriptions into base.pot and translate raw widget bindings#4587Softer wants to merge 1 commit into
Conversation
…indings (archlinux#4584) xgettext only knew the tr keyword, so binding descriptions - translated at runtime via tr(b.description) in _translate_bindings() - never made it into base.pot. The strings added manually in archlinux#4363 were wiped by the regeneration in archlinux#4557. Teach the generator two more keywords: Binding:3 picks up our own binding definitions, and tr_noop marks strings that only exist inside the textual package, listed in the new tui/binding_descriptions.py. The list walks the full MRO of the textual classes used in components.py, since _translate_bindings() operates on the merged bindings map (e.g. Scroll Up comes from ScrollView and carries live translations in 18 locales today). Raw Input and Button widgets never went through _translate_bindings(), so their help-panel descriptions stayed English regardless of .po content - subclass them (_Input/_Button) following the _OptionList pattern to make those translations real. test_tooling/check_binding_descriptions.py verifies the list against the installed textual after upgrades (manual, not wired into CI).
|
The mypy job died on infra - Docker Hub timed out while pulling the container, mypy itself never ran (it passes locally). Could someone with the button re-run the failed job? |
|
Yeah the infra somewhat often dies and runner results geta screwed. Those are fine, I manually check them usually or re-run from admin panel on GH. |
|
This looks quite gnarly. I need to figure out if this is really the best way of doing this |
Any updates? :) |
|
I haven't forgotten about it, but I had some personal things ongoing so I'll get to it hopefully shortly |
|
I played around with this today and it seems your approach is the only working way I encountered as well. As textual doesn't have any support for translations we are forced to extract the default bindings out and do the fake translation calls. Could you fix the mypy action and add a small entry in the |
Fixes #4584.
The help bar and F1 panel strings never made it into base.pot: they are binding descriptions translated at runtime from a variable (tr(b.description)), and xgettext only knew the literal tr("...") form. #4363 worked around that by adding the strings to base.pot manually, but the regeneration in #4557 wiped them again (and with the freshness check gone since #4576, nothing noticed).
What's here:
Note: the pot regen also picks up the three Plymouth strings from #4555 - master's pot simply hadn't been regenerated since that merge.