Я переключаю культуру на странице global.asax следующим образом
protected void Application_AcquireRequestState(object sender, EventArgs e)
{
CultureInfo culture = Settings.UserCultureFromSession();
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
}
Статический метод UserCultureFromSession извлекает кэшированную культуру для текущего пользователя. Конечно, вам нужно установить это первым.
Кроме того, этот метод должен гарантировать, что сеанс доступен при первом вызове сайта (например, после сброса), когда сеанс не был создан, поэтому вам потребуется язык по умолчанию, возвращаемый в этом экземпляре.
Это довольно просто после этого. Использование вышеуказанного означает, что каждый элемент управления и каждая страница будут подбирать правильную культуру для каждого запроса.
Возможно, вы захотите иметь стандартную культуру для CurrentCulture, если вы используете культурно-зависимый код в бэкэнде, например, при разборе даты. Однако вы действительно должны были написать свой код, дату или другое, чтобы быть независимыми от культуры.
Обновление 1
Что касается маркировки сайта на сайте, вы можете использовать метод, описанный выше, чтобы посмотреть, существует ли код языка. Схема, которую вы выберете, действительно зависит от вас. Вы можете использовать домены страны '.co.uk, .co.nz, .co.jp'
и сделать вывод о культуре из этих или вы можете указать папки идентификаторов культуры на базе вашего сайта, например
www.example.com/en-NZ
www.example.com/en-GB
www.example.com/ja-JP
Кроме того, вы можете настроить субдомены. На самом деле существует множество способов решить, как это можно сделать.
Обновление 2
Точно так же, как вы выбираете переменные маршрутизации в обработчиках маршрута mvc, вы можете просто установить их для культуры. Если вы решите сделать это в последнем примере, тогда я начну примерно так:
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
);
}