Asp.net net mvc全球化。你是怎么做到的?

Asp.net net mvc全球化。你是怎么做到的?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,学习asp.NETMVC,每当我工作时,我们都必须本地化我们的应用程序。看了几篇文章 (为每种语言创建一个视图)不适用于我 (使用Broswer默认语言,这对我来说永远不会起作用。你能想象我在西班牙度假时会说英语,需要使用该网站,而我不知道如何更改设置)否 (这一个通过URL,但查看他的baseController,在cookie中硬编码应用程序名称) 我很困惑。主要是因为我的知识不多!! 推荐的方法是什么?你在真实世界的应用程序中做过吗?你愿意分享代码吗?你如何解决这个问题的一个片段就行了吗

学习asp.NETMVC,每当我工作时,我们都必须本地化我们的应用程序。看了几篇文章

  • (为每种语言创建一个视图)不适用于我
  • (使用Broswer默认语言,这对我来说永远不会起作用。你能想象我在西班牙度假时会说英语,需要使用该网站,而我不知道如何更改设置)否

  • (这一个通过URL,但查看他的baseController,在cookie中硬编码应用程序名称)

  • 我很困惑。主要是因为我的知识不多!! 推荐的方法是什么?你在真实世界的应用程序中做过吗?你愿意分享代码吗?你如何解决这个问题的一个片段就行了吗

    我正在寻找一种类似asp.net的简洁方法。我需要让用户能够在运行时通过单击标志或其他方式更改语言

    是否有要重写的基本方法? 有没有合适的例子?您必须编写某种baseController类吗


    非常感谢您抽出时间

    您应该使用资源文件来处理本地化。这样,您就可以获得用户以前选择过或现在选择过的语言。这里有一个很好的博客如何做到这一点


    如果用户没有活动会话,意味着没有识别他的cookie,则应使用浏览器语言或地理跟踪服务来确定站点语言。这是由你提出一个简单的方式来改变目前的语言。。。如上所述,如果您使用的是Asp.Net MVC,resourcefiles将在这里帮助您。

    //A foreigner, has possibly brew a cookie for me
    public class SpeakNativeTongueAttribute : ActionFilterAttribute, IActionFilter
    {
        const string cookieName = "culture";
    
         void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
        {
            var cookieKeys = filterContext.RequestContext.HttpContext.Request.Cookies.AllKeys;
    
            if (cookieKeys.Contains(cookieName))
            {
                //eat the cookie
                var theCultureCookie = filterContext.RequestContext.HttpContext.Request.Cookies[cookieName];
                var theCulture = theCultureCookie.Value;
    
                //say thanks in native tongue
                System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo(theCulture);
                System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(theCulture);
            }
            else
            {
                //Didn't receive a cookie, don't speak their language
            }
        }
    }
    

    如果他们单击某一语言并在页面上重新加载,请使用Javascript设置cookie。

    您好,谢谢您的回复。我已经看过了链接。它看起来像是另一篇文章的副本,不确定原始作者是谁。我确实想使用资源文件,但正在寻找一种可靠的方法。为什么你认为这种方法不可靠?我不使用带有本地化内容的视图,但我认为技巧是一样的;请参阅资源字符串并覆盖语言。我不确定博客是否会覆盖它,但我会这样做。其余部分由资源中心完成。感谢您的评论。我会再看一看。我有点困惑应该采用哪种方法进行线程/切换,我看到的其他一些文章使用baseController,并使用Executing和Core方法编写。在asp.net中,这是InitCulture方法中的一个干净的切入点。在asp.net中,我并不清楚mvc。要识别用户及其给定或选择的语言,您需要会话。使用此选项存储语言并将其传递给资源。为什么要使其复杂化并使用基本控制器?当然,您应该以一种方式来实现它,即每个请求只需要对会话进行一次查找。请参阅