Я понимаю, что это очень старо, но я нашел его, когда искал ответ, и подумал, что поделюсь тем, что я сделал. Я использую Umbraco 7.5 и MVC.
Сначала я создал фильтр:
public class LanguageFilterAttribute : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext filterContext)
{
var httpContext = filterContext.RequestContext.HttpContext;
if (!string.IsNullOrEmpty(httpContext?.Request.QueryString["lang"]))
{
if (httpContext.Request.QueryString["lang"].ToLower().StartsWith("en"))
httpContext.Session["lang"] = "en";
else if (httpContext.Request.QueryString["lang"].ToLower().StartsWith("fr"))
httpContext.Session["lang"] = "fr";
}
if (httpContext.Session["lang"] != null)
{
switch (httpContext.Session["lang"].ToString())
{
case "en":
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
break;
case "fr":
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
break;
}
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
Затем добавлен фильтр в OnApplicationStarted
public class MyUmbracoApplication : Umbraco.Web.UmbracoApplication
{
protected override void OnApplicationStarted(object sender, EventArgs e)
{
base.OnApplicationStarted(sender, e);
GlobalFilters.Filters.Add(new LanguageFilterAttribute());
}
}
Всякий раз, когда я хочу изменить язык / локаль, я просто добавляю ?lang=en
или ?lang=fr
к любому URL. Это также меняет текст, который я отображаю. Каждое из моих текстовых полей имеет префикс простого кода языка, например. 'fr_pageTitle' и 'en_pageTitle'. Затем у меня есть метод расширения, чтобы извлечь правильный текст из моего представления MVC
public static class PublishedContentExtensions
{
public static T GetPropertyLangValue<T>(this IPublishedContent content, string fieldName)
{
var lang = CoreHelper.GetSessionLanguage();
if (string.IsNullOrEmpty(lang))
return content.GetPropertyValue<T>(fieldName);
return content.GetPropertyValue<T>($"{fieldName}_{lang}");
}
}
Надеюсь, это кому-нибудь поможет