When writing libraries, I've taken to moving all my string literals to the resource file, even if they are something end users never see, and I don't have a need for translating the literal for other developers benefit (as the libraries are only developed by one team).
Recently someone doing a code review asked why I had put some strings for an exception message (which the end user will never see) into the resource file. I assume because we know this string won't need to be translated.
I personally like it because I've found often times the string will be needed multiple places, and it ends up functioning the same way as a constant as the resx has a code file generated for me, so I don't need to maintain it myself.
I'd like to know if there are any standard conventions, best practices or offical guidelines. Bear in mind that this is only for message like string, other strings that would be more appropriate as constants I do create as constants, so I'm only talking about exception messages or messages logged to something like log4net.
There are many benefits to using resources for string literals. I have often found out that they are great for aggregating error/success/validation messages. When a product is going to be completed, it is common practice to collect all the messages so you can train helpdesk to answer questions based on what users see.
To this end, resources provide an easy to access centralized resource to manage all your messaging to the end user.
Also, if you want to change the language used on a particular condition, it is much easier to change one resource location and affect the whole library/app. Otherwise you will need to do a find/replace, and a new developer thrown into a project may just update one place and miss the other locations.