Spaces:
Runtime error
Runtime error
| 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 | |
| }; | |