Ignore anyone telling you your t wrapper is calling itself. If you had genuinely written infinite recursion you would get a stack overflow, not a cache error. Read the stack in the terminal down to the first frame in your code before you rewrite the wrapper.
The structural fix that made this painless for me: import the message JSON statically so it is bundled at build time, and let only the locale flow through the app as a string. Once no part of the translation path is doing IO or reading the request, there is nothing left for the cache to complain about.