From a324cb330648ad404d67a3f63aa0bbc36140ab69 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Tue, 14 May 2013 13:03:31 -0700 Subject: [PATCH] Fixed: CPLocale detection didn't work. Previously, if the browser provided a language string such as "en-US", CPLocale would try to look up the locale for "en_EN", which wouldn't exist so it'd always select the default language. This fix uses the browser provided language string fully to select the appropriate locale. --- Foundation/CPLocale.j | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/Foundation/CPLocale.j b/Foundation/CPLocale.j index f3b3c13df..04de31ad4 100644 --- a/Foundation/CPLocale.j +++ b/Foundation/CPLocale.j @@ -89,29 +89,32 @@ var sharedSystemLocale = nil, { if (!sharedCurrentLocale) { - var localeIdentifier, + var localeIdentifier = @"en_US", language; - if (typeof navigator != "undefined") + if (typeof navigator !== "undefined") { - if (navigator.appVersion.indexOf("MSIE") >= 0) - language = navigator.browserLanguage.substring(0,2); - else - language = navigator.language.substring(0,2); + // userLanguage is an IE only property. + language = (typeof navigator.language !== "undefined") ? navigator.language : navigator.userLanguage; - language = [CPString stringWithFormat:@"%s_%s", [language lowercaseString], [language uppercaseString]]; + if (language) + { + // Browsers use locale strings such as "en-US", but CPLocale uses "en_US". + language = language.replace("-", "_").substring(0, 5); + // Some browsers have "en_us" at this point, while we want "en_US". + language = language.substring(0, 3).toLowerCase() + language.substring(3, 5).toUpperCase(); - if ([availableLocaleIdentifiers indexOfObject:language] !== CPNotFound) - localeIdentifier = language; + CPLog.info("language: " + language); + if ([availableLocaleIdentifiers indexOfObject:language] !== CPNotFound) + localeIdentifier = language; + } } - if (!localeIdentifier) - localeIdentifier = @"en_US"; - + CPLog.info("localeIdentifier: " + localeIdentifier); sharedCurrentLocale = [[CPLocale alloc] initWithLocaleIdentifier:localeIdentifier]; } - return sharedCurrentLocale + return sharedCurrentLocale; } /*! Return an array of the availableLocaleIdentifiers