Most of the time this is some variant of LZ compression, which you can Google to get a basic idea of.
Rewriting the decompression routine out in C++ should let you get a dump of the raw text.
If you have a good enough understanding of the compression routine you can then recompress and reinsert these.
Alternatively, if you're confident in ASM you can try to modify the subroutine to load and read the text uncompressed (just loading raw text as though it went through the routine).
Depending on how much you need to translate you might be able to directly copy the decompressed text out of the game's memory.
I'm new to this myself, but I think you figured out the two options. Researching MIPS ASM and LZ compression techniques should help you reverse-engineer the compression algorithm.