asp.net mvc全球化。你怎么做呢?

时间:2011-06-02 05:51:57

标签: asp.net asp.net-mvc

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

  1. http://afana.me/post/aspnet-mvc-internationalization.aspx(为每种语言创建一个视图)不适合我
  2. http://www.codeproject.com/KB/aspnet/BilingualMvc3Part1.aspx(使用Broswer默认语言,这对我来说永远不会有用。你能想象我在西班牙度假时会说英语吗,需要使用网站,我还没有得到如何使用的线索更改设置)否

  3. http://geekswithblogs.net/shaunxu/archive/2010/05/06/localization-in-asp.net-mvc-ndash-3-days-investigation-1-day.aspx(这一个通过网址,但查看他的baseController类硬编码cookie中的应用程序名称)

  4. 我很困惑。主要是因为我的知识不是很好!! 建议的方法是什么?你在现实世界的应用程序中做过吗?你会分享代码吗?你如何解决这个问题的片段呢?

    我正在寻找一种像在asp.net中那样简洁的方式。我需要能够让用户通过点击标志或其他东西在运行时更改语言。

    是否有基础方法可以覆盖? 某处有适当的例子吗?你必须写一些baseController类吗?

    非常感谢你的时间

2 个答案:

答案 0 :(得分:2)

您应该使用资源文件来处理本地化。有了这个,您就可以获得用户之前选择的语言,或者他现在就选择了这种语言。这是一个很好的博客,如何做到http://adamyan.blogspot.com/2010/02/aspnet-mvc-2-localization-complete.html

如果用户没有活动会话,则表示没有标识他的cookie,您应该使用浏览器语言或地理标记服务来确定站点语言。由您提供一种更改当前语言的简单方法......如上所述,资源文件将在这里为您提供帮助。

答案 1 :(得分:0)

如果您使用的是Asp.Net MVC

//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。