In ASP.NET 2.0, the use of resource files actually does not suck any more.  In fact it is pretty cool and will allow us to do everything we have done in the past plus probably more.  The first thing is that resources are now strongly typed.  For example if you create a new resource file called MyResources with a key of HelloWorld, the resource can be accessed programmatically by the line below.
MyTextBox.Text  = Resources.MyResources.HellowWorld;
The value of resources can also be accessed by using an expression inside your markup.
<%$ Resources:MyResources,HelloWorld %>
On top of that if you want to bind the value of a resource to a control, you can use the meta:resourcekey attribute.
<asp:Label ID="Label1" runat="server" 
meta:resourcekey="resource-key-prefix" /> 
The limitation there is that it only works with local resources (lame).  There are two types of resources global and local.  Local are specific to a particular page (i.e.: index.aspx.resx) and are contained in the App_LocalResources folder.  Global Resources can be used anywhere and are stored in the App_GlobalResources folder.
Cultures can be autodetected by using a compiler directive or can be overridden and set manually by overriding the InitializeCulture event.  In this event you can set the culture with a statement like this.
Thread.CurrentThread.CurrentCulture = 
CultureInfo.CreateSpecificCulture(UserCulture);
There is a good chance we will start using resources in ASP.NET 2.0 as opposed to our own proprietary solution.  We sitll may have to do some tweaking but I think it will provide us a good foundation.

Read the complete post at http://www.dotnettipoftheday.com/blog.aspx?id=57