Just a quick thought, but wouldn't it make sense to actually use the ISO language codes to keep track of the languages? You don't have to worry about defining what languages mean what, because it's already taken care of, and you can provide a fallback to matching on the first 2 letters of the language code if there's no exact match. (For example, if you have an en_US, and someone's system is set to use en_GB, you can detect that and match on the en until someone works up an en_GB translation.