Вопрос

I work out of New Zealand developing a web application for some Romanian clients. The application should default to ro-RO when viewed by a client using a Romanian machine and en-GB for pretty much everyone else at this stage. Problem is ALL machines I have used to test this are defaulting to en-US. That is, machines on Windows Azure European data centers, local machines here in NZ and various machine in Romania which I access via RDP.

So i use this code in a controller to set language based on user defaults:

 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);
        }

where

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

is always en-US. There are in fact 3 entries in this collection however:

enter image description here

but ro is clearly not weighted correctly. This is the same across all machines in all locales.

Globalization in web config is set to auto:

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

And regional windows settings are as follows:

enter image description here

enter image description here

Browser:

enter image description here How can I make this work?

ANSWER

As per Martins answer in comments. Problem was that I had this in apparently all settings the world over.

enter image description here

when what I really wanted was this in Chrome... will get to the other browsers soon.

enter image description here

Это было полезно?

Решение

Ensure that your browser of choice (Internet Explorer, Chrome, Firefox, Safari etc.) has been set up to specify ro as the first language in the User Languages sent over HTTP to the server.

Updating the Windows and/or browser's UI language won't necessarily cause a non-English language ISO code to be sent to the server, which means that you'd just get English returned.

In Firefox, for example, this setting can be found under Options->Content->Languages->Choose.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top