You can actually change the strings in the EXE with the help of a decompiler of some sorts (I use OllyDbg on Windows, for example). Only ASCII strings are allowed though, and the string length is not to be changed.
Here's the decompiled Lugaru (Windows) text strings:
004 is the type. The address of the string that's being PUSHed here is 0xB2304.
It is imperative that the length is preserved so that the addresses still match after alteration. You also don't know how the string's being processed. Always preserve the string length!
Now, I open XVI32 and go to 0xB2304:
I change the text:
(Strings end with \0, by the way, so make sure the \0 stays where it is - fill the string up with spaces or something)
I start the game tutorial with this changed EXE and voila:
This works on all operating systems, of course, although there are some differences (mainly tools to use, addresses and endianness).
First and foremost, you want to be extra-careful. Only use ASCII letters:
Never exceed the original string length. Never cut anything out. Overwrite the string letter for letter, from the first char to the last.
Never overwrite the string-ending \0.
Do not change variables in strings (%d and stuff like that). Change their position, but not the order and not the type.
In short, it's probably best if you keep your hands off it if you don't know what you're doing, to be honest.
Edit: Also, some menu texts are plain images.