big locale logic switchover

This commit is contained in:
Peter Cottle 2015-03-28 10:59:46 -07:00
parent c1e7274c72
commit 811b9c1b0e
8 changed files with 121 additions and 46 deletions

View file

@ -9,9 +9,56 @@ var assign = require('object-assign');
var ActionTypes = AppConstants.ActionTypes;
var CHANGE_EVENT = 'change';
// resolve the messy mapping between browser language
// and our supported locales
var langLocaleMap = {
en: 'en_US',
zh: 'zh_CN',
ja: 'ja',
ko: 'ko',
es: 'es_AR',
fr: 'fr_FR',
de: 'de_DE',
pt: 'pt_BR'
};
var headerLocaleMap = {
'zh-CN': 'zh_CN',
'zh-TW': 'zh_TW',
'pt-BR': 'pt_BR'
};
function _getLocaleFromHeader(langString) {
var languages = langString.split(',');
var desiredLocale;
for (var i = 0; i < languages.length; i++) {
var header = languages[i].split(';')[0];
// first check the full string raw
if (headerLocaleMap[header]) {
desiredLocale = headerLocaleMap[header];
break;
}
var lang = header.slice(0, 2);
if (langLocaleMap[lang]) {
desiredLocale = langLocaleMap[lang];
break;
}
}
return desiredLocale;
}
var _locale = 'en_US';
var LocaleStore = assign({}, EventEmitter.prototype, {
getLangLocaleMap: function() {
return assign({}, langLocaleMap);
},
getHeaderLocaleMap: function() {
return assign({}, headerLocaleMap);
},
subscribe: function(cb) {
this.on(CHANGE_EVENT, cb);
},
@ -33,6 +80,13 @@ var LocaleStore = assign({}, EventEmitter.prototype, {
_locale = action.locale;
shouldInform = true;
break;
case ActionTypes.CHANGE_LOCALE_FROM_HEADER:
var value = _getLocaleFromHeader(action.header);
if (value) {
_locale = value;
shouldInform = true;
}
break;
}
if (shouldInform) {