Как показать культуру на домашней странице? - PullRequest
0 голосов
/ 29 февраля 2020

Я бы хотел, чтобы культура была доступна на URL домашней страницы. Для всех моих страниц у меня это хорошо отображалось как: "http://www.mywebsite.com/fr-be/about/" Но если зайти на сайт в первый раз на главной странице, URL-адрес "http://www.mywebsite.com/", я бы хотел бы иметь "http://www.mywebsite.com/fr-be/".

Дайте мне знать, если это не хорошо для индексации Google.

Спасибо.

Мои маршруты :

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");
        routes.IgnoreRoute("robots.txt");

        routes.LowercaseUrls = true;
        routes.AppendTrailingSlash = true;

        routes.MapRoute(
           name: "Localization", // Route name
           url: "{lang}/{controller}/{action}/{id}", // URL with parameters
           new { controller = "Static", action = "Index", id = UrlParameter.Optional } // Parameter defaults
       );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Static", action = "Index", id = UrlParameter.Optional }
        );
    }
}

BaseController

 public class BaseController : Controller
{
    // GET: Base
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        if (requestContext.RouteData.Values["lang"] != null &&
         !string.IsNullOrWhiteSpace(requestContext.RouteData.Values["lang"].ToString()))
        {
            // modification de la culture dans les données de la route
            var lang = requestContext.RouteData.Values["lang"].ToString();
            Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang);
        }
        else
        {
            // chargement de la culture depuis un cookie
            var cookie = requestContext.HttpContext.Request.Cookies["EM6Worldwide.CurrentUICulture"];
            var langHeader = string.Empty;
            if (cookie != null)
            {
                // modification de la culture avec la valeur dans le cookie
                langHeader = cookie.Value;
                Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
            }
            else
            {
                // utilisation de la langue par défaut du navigateur si la culture n'est pas spécifiée
                langHeader = requestContext.HttpContext.Request.UserLanguages[0];
                Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
            }
            // modification de la culture dans les données de la route
            requestContext.RouteData.Values["lang"] = langHeader;
        }

        // sauvegarde de la culture dans un cookie
        HttpCookie _cookie = new HttpCookie("EM6Worldwide.CurrentUICulture", Thread.CurrentThread.CurrentUICulture.Name);
        _cookie.Expires = DateTime.Now.AddYears(1);
        requestContext.HttpContext.Response.SetCookie(_cookie);

        base.Initialize(requestContext);
    }
}

StaticController

public class StaticController : BaseController
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Services()
    {
        ViewBag.Message = "Your services page.";

        return View();
    }
}
...