Yang pertama-tama kita lakukan adalah membuah sebuah html helper kalau mau tahu tentang html helper bisa dibaca disini, kita buat class baru kita beri nama SwitchLanguageHelper
public static class SwitchLanguageHelper { public class Language { public string Url { get; set; } public string ActionName { get; set; } public string ControllerName { get; set; } // public string Area { get; set; } public RouteValueDictionary RouteValues { get; set; } public bool IsSelected { get; set; } public MvcHtmlString HtmlSafeUrl { get; set; } } public static Language LanguageUrl(this HtmlHelper helper, string cultureName, string languageRouteName = "lang", bool stringSelected = false) { //set the input language to lower cultureName = cultureName.ToLower(); //retrive the route values from the view context var routeValues = new RouteValueDictionary(helper.ViewContext.RouteData.Values); //copy the query string into route values to generate the link var queryString = helper.ViewContext.HttpContext.Request.QueryString; foreach (string key in queryString) { if (queryString[key] != null && string.IsNullOrWhiteSpace(key)) { if (routeValues.ContainsKey(key)) { routeValues[key] = queryString[key]; } else { routeValues.Add(key, queryString[key]); } } } var actionName = routeValues["action"].ToString(); var controllerName = routeValues["controller"].ToString(); // var areaName = routeValues["area"].ToString(); //set language into route values routeValues[languageRouteName] = cultureName; //generate the language specify url var urlHelper = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection); var url = urlHelper.RouteUrl("Localization", routeValues); //check whether the current thread ui culture is set to language var current_lang_name = Thread.CurrentThread.CurrentUICulture.Name.ToLower(); var isSelected = stringSelected ? current_lang_name == cultureName : current_lang_name.StartsWith(cultureName); return new Language() { Url = url, ActionName = actionName, ControllerName = controllerName, // Area = areaName, RouteValues = routeValues, IsSelected = isSelected }; } public static MvcHtmlString LanguageSelectorLink(this HtmlHelper helper, string cultureName, string selectedText, string unselectedText, IDictionary htmlAttributes, string languageRouteName = "lang", bool stringSelected = false) { var language = helper.LanguageUrl(cultureName, languageRouteName, stringSelected); var link = helper.RouteLink(language.IsSelected ? selectedText : unselectedText, "Localization", language.RouteValues, htmlAttributes); return link; } } public class LocalizationDisplayNameAttribute : DisplayNameAttribute { private DisplayAttribute display; public LocalizationDisplayNameAttribute(string resourceName, Type resourceType) { this.display = new DisplayAttribute() { ResourceType = resourceType, Name = resourceName }; } public override string DisplayName { get { return display.GetName(); } } }Class ini berfungsi untuk menyimpan informasi dari language links, LanguageUrl method mempunyai fungsi untuk men-generate informasi yang digunakan pada selector seperti URL, RouteValues, dsb. method ini memuat RuteData dan query string dari request yang datang dan kemudian men-generate URL pada current page dengan bahasa yang dipilih.
Bagaimana menggunakan html helper tersebut, tinggal kita tambahkan saja di halamana _Layout.cshtml
sekarang sumber air sudekat, eh sekarang untuk mengganti halaman kita hanya perlu memilih.menekan link yang baru kita buat. Mungkin cukup sekian tulisan kali ini terima kasih.
source code https://dl.dropboxusercontent.com/u/62442361/MultiLanguage.rar
0 komentar :
Posting Komentar