From 93b9f7f818ccb99cbdbecfd7fc9753774dbdeb43 Mon Sep 17 00:00:00 2001 From: Roman Drozd Date: Tue, 9 Jun 2020 17:53:03 +0200 Subject: [PATCH] Add localization selection --- app/package.json | 1 + app/src/RoomClient.js | 24 ++++- app/src/actions/intlActions.js | 7 ++ app/src/components/Controls/TopBar.js | 48 +++++++++- .../components/Settings/AppearenceSettings.js | 91 +++++++++++++++---- app/src/index.js | 79 +++------------- app/src/reducers/intl.js | 18 ++++ app/src/reducers/rootReducer.js | 6 +- app/src/store.js | 12 ++- app/src/translations/locales.js | 60 ++++++++++++ 10 files changed, 250 insertions(+), 96 deletions(-) create mode 100644 app/src/actions/intlActions.js create mode 100644 app/src/reducers/intl.js create mode 100644 app/src/translations/locales.js diff --git a/app/package.json b/app/package.json index e24812ac..75bc6362 100644 --- a/app/package.json +++ b/app/package.json @@ -29,6 +29,7 @@ "react-dom": "^16.10.2", "react-flip-toolkit": "^7.0.9", "react-intl": "^3.4.0", + "react-intl-redux": "^2.2.0", "react-redux": "^7.1.1", "react-router-dom": "^5.1.2", "react-scripts": "3.4.1", diff --git a/app/src/RoomClient.js b/app/src/RoomClient.js index 7570b510..1bdc3515 100644 --- a/app/src/RoomClient.js +++ b/app/src/RoomClient.js @@ -4,6 +4,7 @@ import { getSignalingUrl } from './urlFactory'; import { SocketTimeoutError } from './utils'; import * as requestActions from './actions/requestActions'; import * as meActions from './actions/meActions'; +import * as intlActions from './actions/intlActions'; import * as roomActions from './actions/roomActions'; import * as peerActions from './actions/peerActions'; import * as peerVolumeActions from './actions/peerVolumeActions'; @@ -16,6 +17,8 @@ import * as producerActions from './actions/producerActions'; import * as notificationActions from './actions/notificationActions'; import * as transportActions from './actions/transportActions'; import { permissions } from './permissions'; +// import { updateIntl } from 'react-intl-redux'; +import * as locales from './translations/locales'; let createTorrent; @@ -115,6 +118,7 @@ export default class RoomClient { store = data.store; intl = data.intl; + } constructor( @@ -255,6 +259,9 @@ export default class RoomClient this._startKeyListener(); this._startDevicesListener(); + + this.setLocale(store.getState().intl.locale); + } close() @@ -298,7 +305,7 @@ export default class RoomClient switch (key) { - + /* case String.fromCharCode(37): { @@ -496,6 +503,21 @@ export default class RoomClient }); } + setLocale(locale) + { + + if (locale === null) locale = locales.detect(); + const one = locales.loadOne(locale); + + store.dispatch(intlActions.updateIntl({ + locale : one.locale[0], + messages : one.messages, + list : locales.getList() + })); + + document.documentElement.lang = one.locale[0].toUpperCase(); + } + login(roomId = this._roomId) { const url = `/auth/login?peerId=${this._peerId}&roomId=${roomId}`; diff --git a/app/src/actions/intlActions.js b/app/src/actions/intlActions.js new file mode 100644 index 00000000..ba428e04 --- /dev/null +++ b/app/src/actions/intlActions.js @@ -0,0 +1,7 @@ +import { UPDATE } from 'react-intl-redux'; + +export const updateIntl = ({ locale, formats, messages, list }) => + ({ + type : UPDATE, + payload : { locale, formats, messages, list } + }); diff --git a/app/src/components/Controls/TopBar.js b/app/src/components/Controls/TopBar.js index d2286dca..de7df744 100644 --- a/app/src/components/Controls/TopBar.js +++ b/app/src/components/Controls/TopBar.js @@ -174,7 +174,6 @@ const PulsingBadge = withStyles((theme) => const TopBar = (props) => { const intl = useIntl(); - const [ mobileMoreAnchorEl, setMobileMoreAnchorEl ] = useState(null); const [ anchorEl, setAnchorEl ] = useState(null); const [ currentMenu, setCurrentMenu ] = useState(null); @@ -233,7 +232,9 @@ const TopBar = (props) => canProduceExtraVideo, canLock, canPromote, - classes + classes, + locale, + localesList } = props; const isMenuOpen = Boolean(anchorEl); @@ -508,6 +509,17 @@ const TopBar = (props) =>
+ + +