The most important rule for localization is to never mix functional code with strings, messages, or any other information that has to be modified to localize your application.
Hard-coded strings (strings mixed with functional code) make localization more difficult. In most Windows applications, all menus, strings and messages should be placed in the resource-definition (.RC) file. All the dialog box information should be placed in the dialog box script (.DLG) file. If you do this, you just need to run the Resource Compiler (RC) to obtain a new, localized version of the product instead of recompiling the executable file.
Strings that are not meant to be modified (filenames, WIN.INI setting names, and so on) can be placed in the .RC file, but the file should contain comments documenting that the names are permanent and should not be modified. It is a good idea also to mark what should be translated (explaining limitations, if any). The better you make the documentation, the easier the localization will be.
The .RC files and .DLG files should contain anything that can be a localization item. It is better to have extra information in these files than to have too little. In cases where an .RC or a .DLG file cannot be used, place all the information in a file, such as an include file, that is separate from any functional code.