See D9791. This is pretty rough, but the basic idea is to fully separate display name/context (e.g., original function/class/method/namespace names, as written, or full titles for articles) from the name/context of the atoms, which are normalized so they can be represented in URIs and on filesystems, and sometimes shortened for readability.
I probably missed some cases here, but the idea is that every level of the stack gets name and context (normalized atom name/context) and displayName and displayContext (most preferred representation for rendering to the user). Arguably these should be the other way around, but this was a slightly smaller change and I think it's reasonable to think of name and context being the values of the Atom, which has a reduced number of possible symbols.
Also adds language to LiveSymbol since we reasonably need to know this to render things.
I think this makes D9791 easier, since we don't have to do any of the string replacement stuff anymore, and particularly should not need to restore the original namespace from the normalized one.
Maybe easiest to wait for D9792 first, and then put this on top of that? Not sure if D9792 has any effects on its own.