создание сайта, поддерживающего множество языков / культур - PullRequest
2 голосов
/ 20 сентября 2010

Я создаю свой первый сайт ASP.NET MVC, и этот сайт должен быть на 2 языках.

Когда пользователь выбирает язык из меню, сайт будет отображаться на этом языке.

Скорее всего, контент будет загружен из файлов ресурсов. Могу ли я ответить на изменение определения культуры во время выполнения, чтобы он загрузил правильный файл ресурса?

Я хочу разные URL для обоих языков. Возможно что-то вроде mysite.com/en/home/index.

Возможно ли это? Пользователи должны иметь возможность пересылать и сохранять ссылки, и сайт будет загружаться на их языке.

Как это можно сделать с помощью ASP.NET MVC?

1 Ответ

2 голосов
/ 20 сентября 2010

Я переключаю культуру на странице 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
     );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...