mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-28 17:00:04 +02:00
big locale logic switchover
This commit is contained in:
parent
c1e7274c72
commit
811b9c1b0e
8 changed files with 121 additions and 46 deletions
|
@ -1,31 +1,43 @@
|
||||||
var CasperUtils = require('./casperUtils').CasperUtils;
|
var CasperUtils = require('./casperUtils').CasperUtils;
|
||||||
|
|
||||||
|
var intl = require('../../js/intl/index.js');
|
||||||
|
|
||||||
|
var langLocaleMap = intl.langLocaleMap;
|
||||||
|
|
||||||
casper.start(
|
casper.start(
|
||||||
CasperUtils.getUrl(),
|
CasperUtils.getUrl(),
|
||||||
function() {
|
function() {
|
||||||
this.test.assertTitle('Learn Git Branching');
|
this.test.assertTitle('Learn Git Branching');
|
||||||
|
|
||||||
casper.waitFor(CasperUtils.waits.jsMount)
|
casper.waitFor(CasperUtils.waits.jsMount)
|
||||||
.then(CasperUtils.multiAssert(
|
.then(CasperUtils.asserts.visibleIDs([
|
||||||
CasperUtils.asserts.visibleIDs([
|
'commandLineHistory',
|
||||||
'commandLineHistory',
|
]))
|
||||||
'terminal',
|
.then(function() {
|
||||||
'interfaceWrapper',
|
|
||||||
'mainVisSpace',
|
|
||||||
'commandLineBar'
|
|
||||||
]),
|
|
||||||
CasperUtils.asserts.visibleSelectors([
|
|
||||||
'div.visBackgroundColor',
|
|
||||||
'p.commandLine'
|
|
||||||
])
|
|
||||||
))
|
|
||||||
|
|
||||||
.waitFor(CasperUtils.waits.allCommandsFinished)
|
Object.keys(langLocaleMap).forEach(function(lang) {
|
||||||
|
var locale = langLocaleMap[lang];
|
||||||
.then(
|
this.test.assertEvalEquals(function(lang) {
|
||||||
CasperUtils.asserts.visibleSelectors(['p.finished'])
|
debug_App_changeLocaleFromHeaders(lang);
|
||||||
)
|
return debug_Intl_getLocale();
|
||||||
|
},
|
||||||
|
locale,
|
||||||
|
'Testing changing the locale from ' + lang +
|
||||||
|
' to ' + locale,
|
||||||
|
{ lang: lang }
|
||||||
|
);
|
||||||
|
|
||||||
|
this.test.assertEvalEquals(function(lang) {
|
||||||
|
debug_App_changeLocaleFromHeaders(lang);
|
||||||
|
return debug_Intl_getLocale();
|
||||||
|
},
|
||||||
|
locale,
|
||||||
|
'Testing changing the locale from ' + lang +
|
||||||
|
' to ' + locale,
|
||||||
|
{ lang: lang }
|
||||||
|
);
|
||||||
|
}.bind(this));
|
||||||
|
})
|
||||||
.then(CasperUtils.testDone);
|
.then(CasperUtils.testDone);
|
||||||
|
|
||||||
}).run();
|
}).run();
|
||||||
|
|
|
@ -12,4 +12,24 @@ describe('LocaleStore', function() {
|
||||||
LocaleActions.changeLocale('ja_JP');
|
LocaleActions.changeLocale('ja_JP');
|
||||||
expect(LocaleStore.getLocale()).toEqual('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
|
locale: newLocale
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
changeLocaleFromHeader: function(header) {
|
||||||
|
AppDispatcher.handleViewAction({
|
||||||
|
type: ActionTypes.CHANGE_LOCALE_FROM_HEADER,
|
||||||
|
header: header
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = LocaleActions;
|
module.exports = LocaleActions;
|
||||||
|
|
|
@ -5,6 +5,8 @@ var constants = require('../util/constants');
|
||||||
var util = require('../util');
|
var util = require('../util');
|
||||||
var intl = require('../intl');
|
var intl = require('../intl');
|
||||||
var GlobalState = require('../util/globalState');
|
var GlobalState = require('../util/globalState');
|
||||||
|
var LocaleStore = require('../stores/LocaleStore');
|
||||||
|
var LocaleActions = require('../actions/LocaleActions');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Globals
|
* Globals
|
||||||
|
@ -42,6 +44,7 @@ var init = function() {
|
||||||
wait: true
|
wait: true
|
||||||
});
|
});
|
||||||
|
|
||||||
|
LocaleStore.subscribe('change', intlRefresh);
|
||||||
events.on('localeChanged', intlRefresh);
|
events.on('localeChanged', intlRefresh);
|
||||||
events.on('vcsModeChange', vcsModeRefresh);
|
events.on('vcsModeChange', vcsModeRefresh);
|
||||||
|
|
||||||
|
@ -250,32 +253,9 @@ function tryLocaleDetect() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeLocaleFromHeaders(langString) {
|
function changeLocaleFromHeaders(langString) {
|
||||||
try {
|
LocaleActions.changeLocaleFromHeaders(langString);
|
||||||
var languages = langString.split(',');
|
GlobalState.locale = LocaleStore.getLocale();
|
||||||
var desiredLocale;
|
events.trigger('localeChanged');
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (require('../util').isBrowser()) {
|
if (require('../util').isBrowser()) {
|
||||||
|
|
|
@ -6,7 +6,8 @@ module.exports = {
|
||||||
|
|
||||||
ActionTypes: keyMirror({
|
ActionTypes: keyMirror({
|
||||||
SUBMIT_COMMAND: null,
|
SUBMIT_COMMAND: null,
|
||||||
CHANGE_LOCALE: null
|
CHANGE_LOCALE: null,
|
||||||
|
CHANGE_LOCALE_FROM_HEADER: null
|
||||||
}),
|
}),
|
||||||
|
|
||||||
PayloadSources: keyMirror({
|
PayloadSources: keyMirror({
|
||||||
|
|
|
@ -25,7 +25,7 @@ var langLocaleMap = exports.langLocaleMap = {
|
||||||
es: 'es_AR',
|
es: 'es_AR',
|
||||||
fr: 'fr_FR',
|
fr: 'fr_FR',
|
||||||
de: 'de_DE',
|
de: 'de_DE',
|
||||||
pt: 'pt_BR',
|
pt: 'pt_BR'
|
||||||
};
|
};
|
||||||
|
|
||||||
var fallbackMap = {
|
var fallbackMap = {
|
||||||
|
|
|
@ -9,9 +9,56 @@ var assign = require('object-assign');
|
||||||
var ActionTypes = AppConstants.ActionTypes;
|
var ActionTypes = AppConstants.ActionTypes;
|
||||||
var CHANGE_EVENT = 'change';
|
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 _locale = 'en_US';
|
||||||
var LocaleStore = assign({}, EventEmitter.prototype, {
|
var LocaleStore = assign({}, EventEmitter.prototype, {
|
||||||
|
|
||||||
|
getLangLocaleMap: function() {
|
||||||
|
return assign({}, langLocaleMap);
|
||||||
|
},
|
||||||
|
|
||||||
|
getHeaderLocaleMap: function() {
|
||||||
|
return assign({}, headerLocaleMap);
|
||||||
|
},
|
||||||
|
|
||||||
subscribe: function(cb) {
|
subscribe: function(cb) {
|
||||||
this.on(CHANGE_EVENT, cb);
|
this.on(CHANGE_EVENT, cb);
|
||||||
},
|
},
|
||||||
|
@ -33,6 +80,13 @@ var LocaleStore = assign({}, EventEmitter.prototype, {
|
||||||
_locale = action.locale;
|
_locale = action.locale;
|
||||||
shouldInform = true;
|
shouldInform = true;
|
||||||
break;
|
break;
|
||||||
|
case ActionTypes.CHANGE_LOCALE_FROM_HEADER:
|
||||||
|
var value = _getLocaleFromHeader(action.header);
|
||||||
|
if (value) {
|
||||||
|
_locale = value;
|
||||||
|
shouldInform = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldInform) {
|
if (shouldInform) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ var toGlobalize = {
|
||||||
Visuals: require('../visuals'),
|
Visuals: require('../visuals'),
|
||||||
Git: require('../git'),
|
Git: require('../git'),
|
||||||
CommandModel: require('../models/commandModel'),
|
CommandModel: require('../models/commandModel'),
|
||||||
|
LocaleStore: require('../stores/LocaleStore'),
|
||||||
Levels: require('../graph/treeCompare'),
|
Levels: require('../graph/treeCompare'),
|
||||||
Constants: require('../util/constants'),
|
Constants: require('../util/constants'),
|
||||||
Commands: require('../commands'),
|
Commands: require('../commands'),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue