Before, there was only a "def all(namespace: Option[String], messages: Map[String, Map[String, String]])", but now there is also a "def all(namespace: Option[String], messages: String)". The second one is the real one, returning the full messages from the cache.

I kept the first one only in regard of "subset" method. Since we don't know in advance which keys will be asked, there is no safe way to cache the resulting string. So I'm using the cache to get the escaped messages but I can format them as a string only at the very end.