See the question and my original answer on StackOverflow

You should use .NET (and ASP.NET) native localization feature, and just change the culture of the thread that's executing the page. You can still store that culture in the Session if you want (or somewhere else: in a database, in a cookie, in the rendered page, in view state, etc.).

Here are some links on ASP.NET localization:

Best practices for ASP.NET web application localization multilingual web application - localization