At first I was going to suggest that we could do some kind of more clever localization where we used parameters in the locale file, but I actually like the simplicity of this approach that every value for every setting can have its own individually customizable message.

The property name 'message' isn't a good choice.  "notification" would be more specific than "message". And since these are actually localization ids and not actual strings, how about calling this 'notificationID' instead of 'message'?