Quantcast
Channel: MVC Çoklu Dil Desteği
Viewing all articles
Browse latest Browse all 12

MVC Çoklu Dil Desteği

$
0
0


Merahabar;
MVC ile çok dil desteiği yapmanın bir kaç yolu var ancak ben URL Routing ile yapmak istiyorum. Bunun için baya bi araştırdım bir şeyler buldum ancak sorunumu çözemedim. Yaptıklarım;

public class CultureConstraint : IRouteConstraint
    {
        private string[] _values;
        public CultureConstraint(params string[] values)
        {
            this._values = values;
        }

        public bool Match(HttpContextBase httpContext, Route route, string parameterName,
                            RouteValueDictionary values, RouteDirection routeDirection)
        {
            string value = values[parameterName].ToString();
            return _values.Contains(value);

        }
    }
    public enum Culture
    {
        tr = 1,
        en = 2
    }

 public class MultiCultureMvcRouteHandler : MvcRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            var culture = requestContext.RouteData.Values["culture"].ToString();
            var ci = new CultureInfo(culture);
            Thread.CurrentThread.CurrentUICulture = ci;
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
            return base.GetHttpHandler(requestContext);
        }
    }

Sitenin Layout'un da bulanan kodlar.

@Html.ActionLink("eng", "ChangeCulture", "AnaSayfa", new { lang = (int)Test.Models.Culture.en, returnUrl = this.Request.RawUrl }, new { @class = "culture-link" }) @Html.ActionLink("tr", "ChangeCulture", "AnaSayfa", new { lang = (int)Test.Models.Culture.tr, returnUrl = this.Request.RawUrl }, new { @class = "culture-link" })

public class Layout { [Display(ResourceType = typeof(lang), Name = "Menu_AnaSayfa")] public string AnaSayfa { get; set; } }


<a class="active " href="#">@Html.LabelFor(c=>c.AnaSayfa)</a>

RouteConfig

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

foreach (Route r in routes) { if (!(r.RouteHandler is SingleCultureMvcRouteHandler)) { r.RouteHandler = new MultiCultureMvcRouteHandler(); r.Url = "{culture}/" + r.Url; if (r.Defaults == null) { r.Defaults = new RouteValueDictionary(); } r.Defaults.Add("culture", Culture.tr.ToString()); if (r.Constraints == null) { r.Constraints = new RouteValueDictionary(); } r.Constraints.Add("culture", new CultureConstraint(Culture.en.ToString(),Culture.tr.ToString())); } }

lang.resx

 public static string Menu_AnaSayfa {
            get {
                return ResourceManager.GetString("Menu_AnaSayfa", resourceCulture);
            }
        }
Projeyi derlediğimde RessourceCulture parametresi boş geliyor sorunu çözemedim Url routing yöntemi ile anlatan bir kaynak varsa paylaşırsanız memnun olurum.




Viewing all articles
Browse latest Browse all 12

Latest Images