translated-dynamic-text is a general example of using jr:itext for translations.
If we were using raw XForms we could just create the translation block but using XLSForm the best approach is to create a choice list, as you've figured out. When there are translated strings for choices, pyxform adds a itextId reference to the translation block in the XForm. We can use that.
multilanguage itext is closer to what you've asked for. There are a couple of notes inline describing some aspects of the form which are mandatory because of implementation quirks.
This will only work in ODK Collect. Enketo does not currently implement jr:itext as a true function.