2012-01-09 1 views
2

У меня есть два корневых узлов в моем веб-сайте Umbraco .. один установлен на английский и другой установлен на немецком языке с помощью Manage .. имен хостовProgramatically локали изменения (язык) страницы

|- en 
|---- english page1 
|---- english page2 

|- de 
|---- german page1 
|---- german page2 

http://mywebsite.com установлен в ru Узел и http://mywebsite.de Установлен в de узел.

Мне нужно изменить язык немецкого узла на английский язык в определенных условиях. Возможно ли это и как?

Например, если кто-то называет английскую страницу с помощью немецкого имени хоста, мне нужно изменить локаль на английский

Например http://mywebsite.de /english-page1.aspx должны быть на английском языке локали .. так словарь и т.д. должен быть загружен с английского
http://mywebsite.com /german-page1.aspx должен быть на немецком языке локал .. поэтому словарь и т.д. должен быть загружено из немецкого

Я написал HttpModule к сп Анж локаль на PreRequestHandlerExecute, но без каких-либо успехов

void context_PreRequestHandlerExecute(object sender, EventArgs e) 
{ 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-CH"); 
     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-CH"); 
} 

Может кто-нибудь, пожалуйста, помогите мне с этим ...

Спасибо, Анз

+0

я не получаю точку. как изменение культуры изменяет домен от en до de? ваш код кажется прекрасным, он должен установить культуру –

ответ

0

Я думаю, что PreRequestHandler слишком рано в цикле страницы. При вызове страницы default.aspx культура устанавливается Umbraco. Я сам добавил изменение культуры в конструктор моей базовой MasterPage, главной страницы, которая всегда вызывается на любой странице. Вы также можете изменить культуру в Page Init или Page Load.

С наилучшими пожеланиями,

Corné Hogerheijde

0

Вы можете проверить хост на Session_Start и перенаправить их на конкретную страницу языка без особых хлопот

void Session_Start(object sender, EventArgs e) 
{ 
    // Your logic will go here 

} 
0

Я понимаю, что это очень старая, но Я нашел его, когда искал ответ и думал, что поделюсь тем, что сделал. Я использую 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}"); 
    } 

} 

Надеется, что это помогает кому-то

 Смежные вопросы

  • Нет связанных вопросов^_^