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