如何测试本地化的Web应用程序?

时间:2014-04-16 23:13:39

标签: c# asp.net-mvc localization internationalization

我在新西兰工作,为一些罗马尼亚客户开发网络应用程序。当客户使用罗马尼亚机器查看时,应用程序应默认为ro-RO,而在此阶段,应用程序应默认为en-GB。问题是我用来测试的所有机器都默认为en-US。也就是说,Windows Azure欧洲数据中心的机器,新西兰的本地机器以及我通过RDP访问的罗马尼亚的各种机器。

所以我在控制器中使用此代码来根据用户默认值设置语言:

 public static void OnBeginExecuteCore(Controller controller)
        {
            if (controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG] != null &&
                !string.IsNullOrWhiteSpace(controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG].ToString()))
            {
                // set the culture from the route data (url)
                var lang = controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG].ToString();
                Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(lang);
            }
            else
            {
                // load the culture info from the cookie
                var cookie = controller.HttpContext.Request.Cookies[Constants.COOKIE_NAME];
                var langHeader = string.Empty;
                if (cookie != null)
                {
                    // set the culture by the cookie content
                    langHeader = cookie.Value;
                    Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
                }
                else
                {
                    // set the culture by the location if not specified
                    langHeader = controller.HttpContext.Request.UserLanguages[0];
                    if (langHeader.ToLower() == "en-us") langHeader = "en-GB";
                    Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
                }
                // set the lang value into route data
                controller.RouteData.Values[Constants.ROUTE_PARAMNAME_LANG] = langHeader;
            }

            // save the location into cookie
            HttpCookie cultCookie;
            cultCookie = new HttpCookie(Constants.COOKIE_NAME, Thread.CurrentThread.CurrentUICulture.Name)
            {
                Expires = DateTime.Now.AddYears(1)
            };
            controller.HttpContext.Response.SetCookie(cultCookie);
        }

其中

langHeader = controller.HttpContext.Request.UserLanguages[0];

总是在美国。然而,该集合中实际上有3个条目:

enter image description here

但是ro显然没有正确加权。这在所有语言环境中的所有计算机上都是相同的。

Web配置中的全球化设置为auto:

 <globalization requestEncoding="utf-8"
               culture="auto"
               uiCulture="auto"

区域窗口设置如下:

enter image description here

enter image description here

浏览器:

enter image description here 我怎样才能做到这一点?

答案

按照马丁斯的评论回答。问题是我在显然全世界的所有设置中都有这个。

enter image description here

当我真正想要的是Chrome中的 ...很快就会转到其他浏览器。

enter image description here

1 个答案:

答案 0 :(得分:2)

确保您选择的浏览器(Internet Explorer,Chrome,Firefox,Safari等)已设置为将ro指定为通过HTTP发送到服务器的用户语言中的第一种语言。

更新Windows和/或浏览器的用户界面语言不会必然导致非英语ISO代码被发送到服务器,这意味着你&#39 ; d让英语归还。

例如,在Firefox中,此设置可在选项 - &gt;内容 - &gt;语言 - &gt;选择下找到。