A related but annoying issue is some of (I say "some of" because while I've encountered one so far, I'm sure there's more) the hardcode limits on strings. For example, go to the following string in English.str:
StringInfo
ID "IDS_GAMEMESSAGE_PLAYERCAPITALSHIPLOSTDETAILS"
Value "Intelligence reports the loss of the level %d %s near %s"
While many other strings can be edited, sometimes removing the variables, this one can't. In fact, if you try to edit this string to the following:
StringInfo
ID "IDS_GAMEMESSAGE_PLAYERCAPITALSHIPLOSTDETAILS"
Value "Intelligence reports the loss of %s near %s"
..the game will instantly crash with a dump upon destroying a capital ship. Since these sort of things usually happen with GameInfo, only Beyond Compare saved me from a lot of busywork - once I had used an old copy of my mod to sub the String directory in, it was narrowed down with some difficulty.
While the fact that certain variables are passed into these strings and removing them might be a little troublesome at least makes a little sense (although it's kind of stupid, because people should have the flexibility to edit these sort of things), interestingly there's another quirk. Even if you keep the variable but place it elsewhere in an attempt to obfuscate it:
StringInfo
ID "IDS_GAMEMESSAGE_PLAYERCAPITALSHIPLOSTDETAILS"
Value "Intelligence reports the loss of %s near %s (%d)"
The game will crash. This seems like a hard-code problem to me in the way these things are being passed, probably specific to this one string. I'm a pretty rudimentary programmer, but I assume a function is passing these things in order as a integer, then two strings (%d, %s, %s), and so when they're rearranged, the integer is being passed as a string, and (more importantly) the string is being passed as an integer, causing a crash. What's weird though is that this string seems to behave a lot weirder than any others in this respect, because a lot will let you remove %s or %d and function with no problems.
It's difficult to make mods intuitive when you can't stop them from blasting base strings, and it's more difficult when troubleshooting them is an hour of trial and error.