@qooxdoo/framework
Version:
The JS Framework for Coders
113 lines (91 loc) • 3.16 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Sebastian Werner (wpbasti)
* Martin Wittemann (martinwittemann)
************************************************************************ */
/**
* This class comes with all relevant information regarding
* the client's selected locale.
*
* This class is used by {@link qx.core.Environment} and should not be used
* directly. Please check its class comment for details how to use it.
*
* @internal
*/
qx.Bootstrap.define("qx.bom.client.Locale",
{
/*
*****************************************************************************
STATICS
*****************************************************************************
*/
statics :
{
/**
* The name of the system locale e.g. "de" when the full locale is "de_AT"
* @return {String} The current locale
* @internal
*/
getLocale : function() {
var locale = qx.bom.client.Locale.__getNavigatorLocale();
var index = locale.indexOf("-");
if (index != -1) {
locale = locale.substr(0, index);
}
return locale;
},
/**
* The name of the variant for the system locale e.g. "at" when the
* full locale is "de_AT"
*
* @return {String} The locales variant.
* @internal
*/
getVariant : function() {
var locale = qx.bom.client.Locale.__getNavigatorLocale();
var variant = "";
var index = locale.indexOf("-");
if (index != -1) {
variant = locale.substr(index + 1);
}
return variant;
},
/**
* Internal helper for accessing the navigators language.
*
* @return {String} The language set by the navigator.
*/
__getNavigatorLocale : function()
{
var locale = (navigator.userLanguage || navigator.language || "");
// Android Bug: Android does not return the system language from the
// navigator language before version 4.4.x. Try to parse the language
// from the userAgent.
// See http://code.google.com/p/android/issues/detail?id=4641
if (qx.bom.client.OperatingSystem.getName() == "android") {
var version = /^(\d+)\.(\d+)(\..+)?/i.exec(qx.bom.client.OperatingSystem.getVersion());
if (qx.lang.Type.isArray(version) && version.length >= 3) {
if (parseInt(version[1]) < 4 || (parseInt(version[1]) === 4 && parseInt(version[2]) < 4)) {
var match = /(\w{2})-(\w{2})/i.exec(navigator.userAgent);
if (match) {
locale = match[0];
}
}
}
}
return locale.toLowerCase();
}
},
defer : function(statics) {
qx.core.Environment.add("locale", statics.getLocale);
qx.core.Environment.add("locale.variant", statics.getVariant);
qx.core.Environment.add("locale.default", "C");
}
});