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) =>
+
+
+