2016-01-13 3 views
0

Я работаю над веб-сайтом Asp.net mvc, где требование заключается в том, что пользователь должен иметь возможность изменять язык, а содержимое страницы должно быть переведено автоматически. Проблема: я использовал Custom Attribute в моей модели для отображения локализации, например: [CommonCustomAttributes.LocalizedDisplayName («Регистрация», «UserEmail»)].Изменение текущей локализации проекта MVC Asp.net

LocalizedIdsplayname реализуется как следующее: [AttributeUsageAttribute (AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = ложь)] общественного запечатанный класс LocalizedDisplayNameAttribute: DisplayNameAttribute { общественного LocalizedDisplayNameAttribute (строка resourceFileName, строка KEYNAME) : основание (GetMessageFromResource (resourceFileName, KEYNAME)) {}

 private static string GetMessageFromResource(string resourceFileName, string keyName) 
     { 
      try 
      { 
       return CustomLocalizationUtility.GetKeyValue(HttpContext.Current, resourceFileName, keyName); 
      } 
      catch (Exception) 
      { 
       return ""; 
      } 

     } 
    } 

Так что, когда я переключаться между языками он не меняет .I означает DisplayName от модели WHe re используется как @ Html.LabelFor (m => m.UserEmailAddress, новый {@class = "col-md-3 control-label"}).

Но в .cshtml, где я использовал @placeholder = @ CustomLocalizationUtility.GetKeyValue ("Register", "EnterEmail"), который отлично работает при смене языка. Я что-то потерял Серьезно? Я использовал Cookie для настройки текущей культуры, и я также переопределил метод BeginExecuteCore в базовом контроллере. Я установил Cookie для текущей культуры из метода Action. Нужно ли добавлять дополнительный javascript для проверки JQuery Obstusive и изменения имени модели в зависимости от текущего изменения культуры?

ответ

0

Это не сработает, если вы не измените культуру в своем приложении при смене lang и до вызова вышеуказанной метки i.e UserEmailAddress. Вы можете создать атрибут actionfilter и вызвать его в своем контроллере.

Это код из моего приложения

public static List<languages> Availablelanguages = new List<languages>() 
    { 
     new languages{ LangFullNmae="English" , LangCultureName="en" }, 
     new languages{ LangFullNmae="دری" , LangCultureName="prs-AF" }, 
     new languages{ LangFullNmae="پښتو" , LangCultureName="ps-AF" } 
    }; 

    public static string GetDefaultlanguage() 
    { 
     string lang = Availablelanguages[0].LangCultureName; 
     var cultureInfo = new CultureInfo(lang); 
     Thread.CurrentThread.CurrentUICulture = cultureInfo; 
     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name); 
    // HttpCookie langCookie = new HttpCookie("culture", lang); 
    // langCookie.Expires = DateTime.Now.AddDays(2); 
     return lang; 
    } 

Эти ресурсы могут быть дальнейшей помощи

Это обсуждают все места, где вы можете установить свою культуру

Best place to set CurrentCulture for multilingual ASP.NET MVC web applications

другой один

Set Culture in an ASP.Net MVC app

Update

<tr> 
      <td> 
       @Resource.DeputyMinisterText 
      </td> 
      <td> 

       @Html.EditorFor(model => model.DeputyMinister 
    , new { htmlAttributes = new { style = "dir:ltr;text-align:left" } }) 
       @Html.ValidationMessageFor(model => model.DeputyMinister) 
      </td> 
     </tr> 
+0

Я изменил культуру при смене языка. Локализованный вызов в бритве отлично работает, но сообщения об отображении имени модели и проверки не изменяются, хотя культура была изменена. – Sumon154

+0

. Вы должны проверить файл ресурсов для конкретного пользователя для UserEmailAddress – maztt

+0

Если культура изменена, вы пройдете первый шаг. второй шаг - вы должны иметь все переводы в файле ресурсов – maztt

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