I have had two problems with resource files, both about performance of the translators (People), rather then the speed of string lookup.
The sales staff at the oversee office
that did the translators could not
cope with editing XML or learning any
new tool.
So they just used Excel to edit the translations. Therefore we might as well have stored the translated strings as a CVS file, so avoiding having to copy the translated strings into the resource files.
A new build needs to be done so as to
need the effect of any translations.
Once again if the translated strings were stored as a CSV file, we could have cached them in the ASP.NET cache. Then any changes to the translations would show up on the next page load.
So we could have used a custom implementation of the resource provider and keep to the standard asp.net resource lookup system. Or just ignore the standard resource lookup system if it does not help in your case – depends on how your pages are written.
You may find at some point that you wish to be able to override strings for a single customer, if so you will need a multi stage lookup system. Otherwise you have to merge the customer’s custom strings with the translated string each time you ship a new version of the system.