mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-28 08:50:06 +02:00
big locale logic switchover
This commit is contained in:
parent
c1e7274c72
commit
811b9c1b0e
8 changed files with 121 additions and 46 deletions
|
@ -12,4 +12,24 @@ describe('LocaleStore', function() {
|
|||
LocaleActions.changeLocale('ja_JP');
|
||||
expect(LocaleStore.getLocale()).toEqual('ja_JP');
|
||||
});
|
||||
|
||||
it('changes locales from headers', function() {
|
||||
var headerLocaleMap = LocaleStore.getHeaderLocaleMap();
|
||||
Object.keys(headerLocaleMap).forEach(function(header) {
|
||||
LocaleActions.changeLocaleFromHeader(header);
|
||||
expect(LocaleStore.getLocale()).toEqual(
|
||||
headerLocaleMap[header]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('changes locales from languages', function() {
|
||||
var langLocaleMap = LocaleStore.getLangLocaleMap();
|
||||
Object.keys(langLocaleMap).forEach(function(lang) {
|
||||
LocaleActions.changeLocaleFromHeader(lang);
|
||||
expect(LocaleStore.getLocale()).toEqual(
|
||||
langLocaleMap[lang]
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -13,6 +13,13 @@ var LocaleActions = {
|
|||
locale: newLocale
|
||||
});
|
||||
},
|
||||
|
||||
changeLocaleFromHeader: function(header) {
|
||||
AppDispatcher.handleViewAction({
|
||||
type: ActionTypes.CHANGE_LOCALE_FROM_HEADER,
|
||||
header: header
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = LocaleActions;
|
||||
|
|
|
@ -5,6 +5,8 @@ var constants = require('../util/constants');
|
|||
var util = require('../util');
|
||||
var intl = require('../intl');
|
||||
var GlobalState = require('../util/globalState');
|
||||
var LocaleStore = require('../stores/LocaleStore');
|
||||
var LocaleActions = require('../actions/LocaleActions');
|
||||
|
||||
/**
|
||||
* Globals
|
||||
|
@ -42,6 +44,7 @@ var init = function() {
|
|||
wait: true
|
||||
});
|
||||
|
||||
LocaleStore.subscribe('change', intlRefresh);
|
||||
events.on('localeChanged', intlRefresh);
|
||||
events.on('vcsModeChange', vcsModeRefresh);
|
||||
|
||||
|
@ -250,32 +253,9 @@ function tryLocaleDetect() {
|
|||
}
|
||||
|
||||
function changeLocaleFromHeaders(langString) {
|
||||
try {
|
||||
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 (intl.headerLocaleMap[header]) {
|
||||
desiredLocale = intl.headerLocaleMap[header];
|
||||
break;
|
||||
}
|
||||
|
||||
var lang = header.slice(0, 2);
|
||||
if (intl.langLocaleMap[lang]) {
|
||||
desiredLocale = intl.langLocaleMap[lang];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!desiredLocale || desiredLocale == intl.getLocale()) {
|
||||
return;
|
||||
}
|
||||
// actually change it here
|
||||
GlobalState.locale = desiredLocale;
|
||||
events.trigger('localeChanged');
|
||||
} catch (e) {
|
||||
console.warn('locale change fail', e);
|
||||
}
|
||||
LocaleActions.changeLocaleFromHeaders(langString);
|
||||
GlobalState.locale = LocaleStore.getLocale();
|
||||
events.trigger('localeChanged');
|
||||
}
|
||||
|
||||
if (require('../util').isBrowser()) {
|
||||
|
|
|
@ -6,7 +6,8 @@ module.exports = {
|
|||
|
||||
ActionTypes: keyMirror({
|
||||
SUBMIT_COMMAND: null,
|
||||
CHANGE_LOCALE: null
|
||||
CHANGE_LOCALE: null,
|
||||
CHANGE_LOCALE_FROM_HEADER: null
|
||||
}),
|
||||
|
||||
PayloadSources: keyMirror({
|
||||
|
|
|
@ -25,7 +25,7 @@ var langLocaleMap = exports.langLocaleMap = {
|
|||
es: 'es_AR',
|
||||
fr: 'fr_FR',
|
||||
de: 'de_DE',
|
||||
pt: 'pt_BR',
|
||||
pt: 'pt_BR'
|
||||
};
|
||||
|
||||
var fallbackMap = {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -6,6 +6,7 @@ var toGlobalize = {
|
|||
Visuals: require('../visuals'),
|
||||
Git: require('../git'),
|
||||
CommandModel: require('../models/commandModel'),
|
||||
LocaleStore: require('../stores/LocaleStore'),
|
||||
Levels: require('../graph/treeCompare'),
|
||||
Constants: require('../util/constants'),
|
||||
Commands: require('../commands'),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue