Currently, when you need a message you call wfMsg() or any one of its (I just counted) nine fellow functions. These tend to overlap very heavily, especially with wfMsgExt(). They also have the rather ridiculous property that the caller decides how the message is treated, including whether things like whether wikitext is parsed or HTML is escaped, so the message itself has no idea how it's going to be treated by the caller, and thus no idea whether it can include plain text only, wikitext, HTML, etc.
Instead, I suggest we have one method exactly for all this: Language::getMsg(). To use content instead of interface language, you can just call from a different language object. Other decisions currently handled by our multiplicity of functions, such as whether the message is escaped or parsed or so on, will be made by the message itself, not the caller. Thus pages in the MediaWiki namespace can be appropriately marked as to how they'll be treated, obviating the need for sysops either reading the source code or running tests with live messages to figure out whether their changes will work. The caller should receive all messages as raw text to be output literally with no escaping.