I don't think there is a "best way". It really will depend on the technologies and type of application you are building.
Webapps can store the information in the database as other posters have suggested, but I recommend using seperate resource files. That is resource files seperate from your source. Seperate resource files reduces contention for the same files and as your project grows you may find localization will be done seperatly from business logic. (Programmers and Translators).
Microsoft WinForm and WPF gurus recommend using seperate resource assemblies customized to each locale.
WPF's ability to size UI elements to content lowers the layout work required eg: (japanese words are much shorter than english).
If you are considering WPF: I suggest reading this msdn article
To be truthful I found the WPF localization tools: msbuild, locbaml, (and maybe an excel spreadsheet) tedious to use, but it does work.
Something only slightly related: A common problem I face is integrating legacy systems that send error messages (usually in english), not error codes. This forces either changes to legacy systems, or mapping backend strings to my own error codes and then to localized strings...yech. Error codes are localizations friend