80
votes

What compelling reasons exist for using them?

5
If you've never used a resx file before, but have your own string tables and the like (or worse, strings scattered throughout the code, all locally defined) and haven't seen a reason to change that approach, then this is a legit question.mmr
I've never used resx before. That is the reason behind the question.Newbie

5 Answers

89
votes
  • Resource files give you an easy way to localize/internationalize your .net applications by automatically determining which language resx file to use based on the user's locale. To add more languages, simply add another translated resource file.

  • Resource files give you a central location to store your strings, files and scripts and refer to them in a strongly-typed manner (so the compile will break if you reference them improperly).

  • Resource files can be compiled into satellite assemblies, making it easy to change up the resources in a production application without having to recompile the whole thing.

29
votes

As a supplement to the other answers, string resources are for human-readable text, not constants that will be used programmatically. They're great for error messages, button labels and the like.

Very often, rather than the final string, we store a format string so that variables can be substituted in at the last moment. The nice thing about this method is that, unlike concatenation, it's not broken when a language has different word order requirements.

14
votes

Resource files enable you to change the text/graphics your program will display without editting the code of the program itself. For many reasons, it is often considered ideal to avoid needing to edit your program's source code in order to make changes that are not part of your application's logic.

13
votes

With resx you can have one per language (that is spoken language not programming language) enabling your program / system to be multilingual.

3
votes

In addition to the answers above, resource files can also provide you an place to store test files for performing Read/Write tests. That way, regardless of how other people's environment is set up, you can have a place to store logs or other files.

Keep in mind that what files you do place in resources must be serializable. Check below for more info:

https://msdn.microsoft.com/en-us/library/f45fce5x(v=vs.80).aspx