2011-06-02 80 views
4

学习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默认语言,它永远不会为我工作看着。你能想象我在假期英语扬声器西班牙和需要使用的网站,我还没有得到一个关于如何改变设置时)NO

  3. http://geekswithblogs.net/shaunxu/archive/2010/05/06/localization-in-asp.net-mvc-ndash-3-days-investigation-1-day.aspx(这通过URL之一,但看着他baseController在cookie排序的硬编码的应用程序名称)线索

我很混乱。主要是因为我的知识不是很棒! 推荐的方法是什么?你有没有在现实世界的应用程序?你会分享代码吗?你如何解决这个问题的一个片段会做什么?

我正在寻找一种整洁的方式,就像你可以在asp.net中做的那样。我需要赋予用户在运行时通过单击标志或其他东西来改变语言的能力。

是否有一个基本的方法来重写? 某处是否有适当的示例?你是否需要编写一些baseController类?

非常感谢您的时间

回答

2

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

如果用户没有活动会话,意味着没有标识他的cookie,您应该使用浏览器语言或可能是geotracking服务来确定站点语言。您可以通过简单的方式来改变当前的语言...正如上面提到的,资源文件可以帮助您。

+0

嗨,谢谢你的回复。我看过链接,看起来像是另一篇文章的副本,不知道谁是原作者。我定义了要使用资源文件,但正在寻找一个可靠的方法。 – user9969 2011-06-02 10:52:02

+0

你为什么认为这种方式不稳定?我不使用本地化内容的观点,但我认为诀窍是相同的;参考资源字符串并覆盖该语言。我不确定博客是否会覆盖它,但我会这样做。其余由资源完成。 – sra 2011-06-02 11:44:32

+0

感谢您的评论。我将再次看看。我有点困惑应该采用哪种方法进行线程切换,我见过的其他一些文章使用了一个baseController,并在Executing和Core方法中写入。在asp.net中,它是一个干净的切割在InitCulture方法中。在asp.net中,mvc对我来说不是那么清楚。 – user9969 2011-06-02 12:30:45

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,如果他们点击一个特定的语言,做一个重新加载页面上。