C# Can';不要一路改变应用程序语言

C# Can';不要一路改变应用程序语言,c#,asp.net-mvc,resx,C#,Asp.net Mvc,Resx,我在应用程序中使用了三个resx文件。默认情况下,它是英文的,但当我想更改应用程序语言时,只会更改UI。管制员似乎对英语一成不变,我是不是忽略了什么 资源文件属性(设置为公共) 我在_ViewStart.cshtml上这样更改语言(语言为EN或DE) 我还尝试在登录时更改控制器中的语言,但并没有任何效果(若我注释掉下面几行的ViewStart代码,则应用程序仍然使用英语) 我在web.config atm中没有任何与语言相关的内容。但若我把全球化属性放在德语的应用程序上,那个么语言就改变了,但

我在应用程序中使用了三个resx文件。默认情况下,它是英文的,但当我想更改应用程序语言时,只会更改UI。管制员似乎对英语一成不变,我是不是忽略了什么

资源文件属性(设置为公共)

我在_ViewStart.cshtml上这样更改语言(语言为EN或DE)

我还尝试在登录时更改控制器中的语言,但并没有任何效果(若我注释掉下面几行的ViewStart代码,则应用程序仍然使用英语)

我在web.config atm中没有任何与语言相关的内容。但若我把全球化属性放在德语的应用程序上,那个么语言就改变了,但我需要从应用程序内部改变它,所以我不能使用全球化属性。有什么想法吗


例如,如果我在view@Resource.Language中使用此选项,我将始终获得正确选择的用户语言,但如果我在控制器中使用同一行并将字符串发送到我的视图,则始终使用英语(忽略用户选择)

我怀疑问题在于,您需要根据每个请求实现此选项,而不仅仅是在登录控制器中。看看这里的解决方案:(你可能还想看看)。您需要创建一个属性,并用它装饰您的类或操作。如果您不想像此处所做的那样修改路由值,可以在登录时将区域性信息值写入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]
我已经使用以下测试项目确认了这一点,您可以从BitBucket克隆该项目:


谢谢,它帮助我找到了解决方案;)我用我的基本控制器检查当前语言并在那里更改语言。没问题-很高兴我能帮上忙。
[Internationalization]
public class HomeController : Controller {
filterContext.HttpContext.Request.UserLanguages[0]