Spaces:
Running
Running
File size: 2,380 Bytes
f2bee8a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import {addLocaleData} from 'react-intl';
import {localeData, isRtl} from '@turbowarp/scratch-l10n';
import editorMessages from '@turbowarp/scratch-l10n/locales/editor-msgs';
import addAdditionalTranslations from '../lib/tw-translations/index.js';
import {LANGUAGE_KEY} from '../lib/detect-locale.js';
addAdditionalTranslations(editorMessages);
addLocaleData(localeData);
const UPDATE_LOCALES = 'scratch-gui/locales/UPDATE_LOCALES';
const SELECT_LOCALE = 'scratch-gui/locales/SELECT_LOCALE';
const initialState = {
isRtl: false,
locale: 'en',
messagesByLocale: editorMessages,
messages: editorMessages.en
};
const reducer = function (state, action) {
if (typeof state === 'undefined') state = initialState;
switch (action.type) {
case SELECT_LOCALE:
return Object.assign({}, state, {
isRtl: isRtl(action.locale),
locale: action.locale,
messagesByLocale: state.messagesByLocale,
messages: state.messagesByLocale[action.locale]
});
case UPDATE_LOCALES:
return Object.assign({}, state, {
isRtl: state.isRtl,
locale: state.locale,
messagesByLocale: action.messagesByLocale,
messages: action.messagesByLocale[state.locale]
});
default:
return state;
}
};
const selectLocale = function (locale) {
// tw: store language in localStorage
try {
localStorage.setItem(LANGUAGE_KEY, locale);
} catch (e) { /* ignore */ }
return {
type: SELECT_LOCALE,
locale: locale
};
};
const setLocales = function (localesMessages) {
return {
type: UPDATE_LOCALES,
messagesByLocale: localesMessages
};
};
const initLocale = function (currentState, locale) {
if (currentState.messagesByLocale.hasOwnProperty(locale)) {
return Object.assign(
{},
currentState,
{
isRtl: isRtl(locale),
locale: locale,
messagesByLocale: currentState.messagesByLocale,
messages: currentState.messagesByLocale[locale]
}
);
}
// don't change locale if it's not in the current messages
return currentState;
};
export {
reducer as default,
initialState as localesInitialState,
initLocale,
selectLocale,
setLocales
};
|