1. You never will run out of keys.
2. Makes code much easier to read with a real language on messages instead of keys that can't possibly describe the whole message.
3. While writing code, you don't need to stop to think in a new key to add your message, go to the key->value list file and add it there. You just wrap you message with _('') and it's done.
4. Easier to write messages that have variables inside using sprintf or similar.