In Weblate I find myself unable to edit the source strings in the GUI, because they are flagged as "read only". I imagine that a manual way would be to manually edit the source files and push them up, outside of Weblate. But that requires some understanding of the chosen format (gettext in my case).
Is there any way to do this in the GUI? I would prefer some way that propagates the change across all the languages.
Currently, there is no way to do this inside Weblate for bilingual translation files. In these, the strings are extracted from the source code while doing some transformations (in your case using xgettext), so editing the source code is not a task that would be easy to automate inside Weblate.