ASP.NET Язык переключения MVC, как это реализовать?

StackOverflow https://stackoverflow.com/questions/928053

  •  06-09-2019
  •  | 
  •  

Вопрос

Я начал конвертировать свой простой веб-сайт в ASP.NET MVC, просто чтобы с ним повозиться.У меня там есть функция переключения языка, которая в основном переводит сеанс ["language"] на другой язык и обновляет страницу.Пожалуйста, поправьте меня, если это можно было бы сделать лучше, но я создал два контроллера для этого и настроил там сеанс.Проблема заключается в маршрутизации в конце.Могу ли я обновить страницу каким-нибудь аккуратным способом, или я могу получить текущее действие и перенаправить его на это?Или это скорее сценарий для Ajax?

Благодарен за совет!

Это было полезно?

Решение

есть ли какая-либо причина, по которой вы используете переменную сеанса?более распространенным решением является включение языкового кода в маршрут, т.е.blah.com/en/info или blah.com/jp/info (для английского и японского языков)

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

в этой статье объясняется, как включить язык в домен, т.е.en.blah.com или jp.blah.com: http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

ОБНОВЛЕННЫЙ:Вот такой простой пример включения кода языка в маршрут URL.

Измените маршрут по умолчанию, чтобы включить языковой параметр:

routes.MapRoute(
"Default", 
"{language}/{controller}/{action}/{id}", 
new { language = "en", controller = "Home", action = "Index", id = "" }
);

Добавьте ссылки для каждого языка на свою главную страницу:

<li><%= Html.ActionLink(
    "Spanish", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "es" })%></li>
<li><%= Html.ActionLink(
    "French", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "fr" })%></li>
<li><%= Html.ActionLink(
    "English", 
    ViewContext.RouteData.Values["action"].ToString(), 
    new { language = "en" })%></li>    

Они будут отображаться как ссылки на страницу, на которой вы находитесь, только с измененным языком.

Другие советы

Следующий подход хорошо работает для меня:

Я использую файлы cookie и мой собственный движок для локализации Все, что вам нужно, это поместить на страницу какую-нибудь ссылку, которая перенаправит на что-то вроде этого:

public class LanguageController : Controller
{
    //
    // GET: /Language/

    public void Change(string id)
    {
        var cuka = new HttpCookie("lang", id + "");
        cuka.Expires = DateTime.Now.AddYears(10);
        System.Web.HttpContext.Current.Response.Cookies.Add(cuka);

        if (Request.UrlReferrer.IsNotNull())
            Response.Redirect(Request.UrlReferrer.AbsoluteUri);
        else
            Response.Redirect("/");
    }

}

}

Если вас заинтересует этот движок, дайте мне знать.

Вот простое решение, как включить выбор другого URL-адреса.

существует контроллер для управления языком

    public class LocalesController : Controller
{

    public ActionResult Index(string lang = "en_US")
    {
        Response.Cookies["CacheLang"].Value = lang;

        if (Request.UrlReferrer != null)
            Response.Redirect(Request.UrlReferrer.ToString());

        var message = Localization.Get("changedlng");

        return Content(message);
    }

}

вы можете вызвать его отдельно

new LocalesController().Index("fa");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top