2016-01-13 18 views
0

我在一個Asp.net mvc網站上工作,其中需求是用戶應該能夠更改語言和頁面內容應該自動翻譯。 問題是:我在我的模型中使用了自定義屬性來顯示本地化,如下所示:[CommonCustomAttributes.LocalizedDisplayName(「Register」,「UserEmail」)]。更改Asp.net MVC項目的當前本地化

LocalizedIdsplayname實現像以下內容:[AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter,=的AllowMultiple假)] 公共密封類LocalizedDisplayNameAttribute:DisplayNameAttribute { 公共LocalizedDisplayNameAttribute(串resourceFileName,串的keyName) :基座(GetMessageFromResource(resourceFileName,註冊表項目)) {}

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

     } 
    } 

因此,當我語言之間切換它不會改變.I意味着示範WHE的顯示名它使用像@ Html.LabelFor(m => m.UserEmailAddress,new {@class =「col-md-3 control-label」})。

但是,在我使用@placeholder = @ CustomLocalizationUtility.GetKeyValue(「Register」,「EnterEmail」)的.cshtml中,當我更改語言時正常工作。我錯過了什麼嚴重?我已經使用Cookie來設置當前文化,並且我還在基礎控制器中提供了BeginExecuteCore方法。我從Action方法中設置了當前文化的Cookie。我們是否需要爲基於當前文化變化的JQuery Obstrusive驗證和模型顯示名稱更改添加額外的JavaScript?

回答

0

它不會工作,除非您在更改lang時以及在調用上述標籤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

更新

<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