I switch the culture in the global.asax page as follows
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
CultureInfo culture = Settings.UserCultureFromSession();
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
}
The static UserCultureFromSession method pulls out a cached culture for the current user. Of course you need to set this first.
Additionally, that method needs to ensure that the Session is available as the first time the site is called (eg after a reset) the session hasn't been built, so you'll need a default language returned in this instance.
It's pretty simple after that. Using the above means that every control and every page will pick up the right culture for every request.
You may wish to have a standard culture for CurrentCulture if you're using culture dependant code in the back end such as date parsing. However you should really have written your code, date or otherwise, to be culture independant.
Update 1
In terms of book marking the site you can have the method above look in the URL to see if a language code exists. The scheme you choose to do this is really up to you. You could use country domains '.co.uk, .co.nz, .co.jp'
and infer the culture from these or you could culture identifier folders at the base of your site such as
www.example.com/en-NZ
www.example.com/en-GB
www.example.com/ja-JP
Additionally, you could set up subdomains. There really are a multitude of ways of deciding how this could be done.
Update 2
Well the same way you pick up the routing variables within the mvc route handlers you can just set one for the culture. If you decide to do it in the last example then something like this is where I'd start:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{culture}/{controller}/{action}/{id}", // URL with parameters
new { culture = "en-NZ", controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}