2014-02-20 3 views
0

Я пытаюсь сделать страницу на 3 языках.Переопределить значения по умолчанию Файлы MVC4 resx

Английский, датский, испанский.

Я использую файлы resx для языков, и я сделал это, чтобы теперь я мог видеть, что если моя система настроена на английский язык, я получу английский язык или датский язык даст датский язык. однако я пытаюсь реализовать функцию переопределения, поэтому я могу вручную изменить язык на странице с помощью кнопки. Я предполагаю, что это будет 3 кнопки флажков для изменения языков. Однако, похоже, я не могу переопределить язык. и у меня больше проблем с попытками, чем просто придерживаться настроек по умолчанию.

вот как я создал некоторые из моих вещей:

Я настроил мои маршруты, как это:

routes.MapRoute(
      name: "DefaultLocalized", 
      url: "{language}-{culture}/{controller}/{action}/{id}", 
      defaults: new 
      { 
       controller = "Home", 
       action = "Index", 
       language = "da", 
       culture = "DK", 
       id = UrlParameter.Optional } 
     ); 
     routes.MapRoute(
      name: "DefaultInternationalized", 
      url: "{language}-{culture}/{controller}/{action}/{id}", 
      defaults: new 
      { 
       controller = "Home", 
       action = "Index", 
       language = "en", 
       culture = "UK", 
       id = UrlParameter.Optional 
      } 
     ); 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

, когда я пытаюсь это я, кажется, не быть в состоянии для использования последнего маршрута по умолчанию. И когда я пытаюсь переопределить свой язык, который установлен по умолчанию для датчан, поэтому я могу видеть страницы на английском языке, что URL-адрес достаточно уверен, что читает en-UK/Home, но язык по-прежнему остается моим языком браузеров по умолчанию.

Я попытался сделать фильтр как этот

public class InternationalizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

     string language = (string)filterContext.RouteData.Values["language"]; //?? "da"; 
     string culture = (string)filterContext.RouteData.Values["culture"];// ?? "DK"; 

     Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 

    } 

моя надежда была, что это будет активировать и решить язык, но, кажется, он никогда не делает.

Мои файлы resx по этому пути.

View/Languages/ 

с этими именами

Resources.resx 
Resources.da-DK.resx 
Resources.es-ES.resx 

я хотел бы знать, где я уезжаю или то, что я пропавшими без вести. моя идея состояла в том, что я мог бы получить доступ к нормальной странице на

mydomain/Home 

локализованных на языке по умолчанию пользователя. , а затем получить доступ к перегруженным языкам по адресу:

mydomain/en-UK/Home 
mydomain/da-DK/Home 
mydomain/es-ES/Home 

однако это, кажется, не работает. Я еще не добавил, чтобы испанец мог работать, потому что я думал, чтобы он сначала работал с датским и английским.

Кто-то Пожалуйста, скажите мне, что мне не хватает. или спросите, не предоставил ли я достаточно подробностей относительно моей проблемы.

+0

Я пытался исправить мое решение в соответствии с пост Ах сделал. он действительно разрешил некоторые вещи, которые теперь всегда появляются на веб-сайте. однако он всегда появляется на моем языке, а не на переопределенном языке. и маршрут по умолчанию, где он должен быть браузером, который решает автоматически направлять другие страницы к URL-адресу da-DK, а не оставаться там, если страница решила для себя, она должна просто оставаться со стандартным URL-адресом домена. если пользователь хочет переопределить его, он должен перейти к да-DK или любому другому. есть еще одна проблема, когда я пытаюсь переопределить с помощью en-GB, тогда она все еще отображается на датском языке – Helbo

ответ

1
routes.MapRoute(
     name: "DefaultInternationalized", 
     url: "{language}-{culture}/{controller}/{action}/{id}", 
     defaults: new 
     { 
      controller = "Home", 
      action = "Index", 
      language = "en", 
      culture = "UK", 
      id = UrlParameter.Optional 
     } 
    ); 

1-я проблема с кодом en-UK - неправильная культура для Великобритании. это en-GB.

2nd вы не устанавливаете культуру по умолчанию в route.MapRoute. использовать этот код

 routes.MapRoute(
      "DefaultLocalized", 
      "{language}-{culture}/{controller}/{action}/{id}", 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       language = "da", 
       culture = "DK", 
       id = UrlParameter.Optional 
      } 
     ); 
     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new 
      { 
       controller = "Home", 
       action = "Index", 
       language = "en", 
       culture = "US", 
       id = UrlParameter.Optional 
      } // Parameter defaults 
     ); 

Или вы можете изменить свой фильтр для культуры по умолчанию, как это: -

public class InternationalizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

     string language = (string)filterContext.RouteData.Values["language"]; //?? "da"; 
     string culture = (string)filterContext.RouteData.Values["culture"];// ?? "DK"; 
     language = language == null ? "en" : language; 
     culture = culture == null ? "US" : culture; 

     Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 
     Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(string.Format("{0}-{1}", language, culture)); 

    } 
} 

для информации культуры проверить это link

+0

Спасибо за ответ. кажется, сейчас он работает. проблема заключается в том, что я выбираю язык по умолчанию, я хочу, чтобы браузер выбрал язык по умолчанию и пользователь мог его переопределить. Другое дело, что язык никогда не меняется в en-GB, он просто остается на датском языке, даже если URL-адрес меняется. и когда я нахожусь в маршруте по умолчанию, когда я нажимаю ссылку, он изменится на префикс da-DK в URL-адресе. Мне просто нужно, чтобы поведение маршрута по умолчанию оставалось как есть. не изменяя ни одного другого URL-адреса. – Helbo

+0

Я сделал это сейчас, и мне показалось, что мне просто нужно было прочитать ваше сообщение и то, что я сделал несколько раз, прежде чем я понял это. Большое спасибо. – Helbo

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