2016-03-04 21 views
0

我有三個我在應用程序中使用的resx文件。默認情況下它是英語,但是當我想更改應用程序語言時,只會更改UI。控制者似乎對英語保持固定,我忽略了什麼?無法一直更改應用程序語言

資源文件屬性(設置爲公共)

enter image description here

我改變_ViewStart.cshtml語言是這樣的(語言EN或德國)

Culture = UICulture = language; 

我也試圖改變語言在控制器登錄後,但它沒有任何影響(如果我註釋掉ViewStart代碼,下面的行不做任何事情,應用程序仍然是英語)

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE"); 
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de-DE"); 

我在web.config atm沒有任何相關的語言。但是,如果我把德語的全球化屬性應用程序語言改變了,但我需要從應用程序內改變它,所以我不能使用全球化屬性。有任何想法嗎?

作爲一個例子,如果我在我的視圖中使用@Resource.Language,我將始終得到正確選擇的用戶語言,但是如果我在控制器中使用相同的行並將字符串發送到我的視圖時,它總是使用英語(忽略用戶選擇)

回答

1

我懷疑問題是你需要實現這個請求,而不僅僅是在登錄控制器。看看這裏的解決方案:https://stackoverflow.com/a/1561583/201648(你也可以讀一讀http://www.ryadel.com/en/setup-a-multi-language-website-using-asp-net-mvc/#Resource_Files_inMVC)。你需要創建一個屬性並用這個裝飾你的類或動作。如果您不想像這裏所做的那樣修改路由值,則可以在登錄時將culture-info值寫入cookie,然後從DataAnnotation中的cookie中獲取此值,例如,在登錄控制器:

HttpCookie iln8Cookie= new HttpCookie("iln8Cookie"); 
iln8Cookie["Language"] = "de"; //Replace with the user's language 
iln8Cookie["Culture"] = "DE"; //Replace with the user's culture 
iln8Cookie.Expires = DateTime.Now.AddDays(90); 
HttpContext.Response.SetCookie(iln8Cookie); 

然後,在數據註解,讀取cookie值,例如

public class InternationalizationAttribute : ActionFilterAttribute { 

    public override void OnActionExecuting(ActionExecutingContext filterContext) { 

     var cookie = filterContext.HttpContext.Request.Cookies["iln8Cookie"]; 

     string language = cookie != null ? cookie.Values["Language"] : "en"; 
     string culture = cookie != null ? cookie.Values["Culture"] : "AU"; 

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

    } 
} 

然後裝飾類或行動:

[Internationalization] 
public class HomeController : Controller { 

另外,根據登錄如何工作的這個應用程序,語言和文化的信息可能已經提供給您的用戶對象,即

filterContext.HttpContext.Request.UserLanguages[0] 

我已經證實了這一工程,並使用下面的測試項目,你可以從到位桶克隆:

https://bitbucket.org/mrblurgle/test-internationalisation

+0

謝謝它幫助我找到解決方案;)我用我的基本控制器來檢查當前的語言並在那裏改變語言。 –

+0

沒問題 - 快樂我可以幫忙。 –

相關問題