From 1bdba4513519db83c5472a25132bd4935f58b98b Mon Sep 17 00:00:00 2001 From: Phiter Fernandes Date: Sat, 18 Jul 2020 17:32:35 -0300 Subject: [PATCH] feat(i18n): adds i18next package and extracts string refactors some relevant points of the code closes #341 --- frontend/package-lock.json | 45 +++++++++++ frontend/package.json | 2 + frontend/src/components/AppBar.js | 5 +- frontend/src/components/ConfirmDialog.js | 51 ++++++------ frontend/src/components/Drawer.js | 6 +- frontend/src/components/Error500.js | 8 +- .../src/components/InviteToMeetingDialog.js | 55 +++++++------ frontend/src/components/LanguageSwitcher.js | 74 ++++++++++++++++++ frontend/src/components/Loading.js | 5 +- frontend/src/components/MenuAuth.js | 8 +- frontend/src/components/MenuOffice.js | 13 ++- frontend/src/components/MenuRoom.js | 65 +++++++-------- frontend/src/components/MenuUsers.js | 16 ++-- frontend/src/components/MenuUsersItem.js | 5 +- frontend/src/components/MessageDialog.js | 41 +++++----- .../src/components/NotificationCheckbox.js | 15 ++-- .../src/components/ReceiveInviteDialog.js | 59 ++++++++------ frontend/src/components/RoomCard.js | 7 +- frontend/src/components/ShareModal.js | 13 ++- frontend/src/components/SnackbarActions.js | 15 ++-- frontend/src/components/ThemeCheckbox.js | 7 +- frontend/src/constants/FlagImages.js | 8 ++ frontend/src/i18n.js | 24 ++++++ frontend/src/locales/en/auth.json | 4 + frontend/src/locales/en/error.json | 6 ++ frontend/src/locales/en/general.json | 24 ++++++ frontend/src/locales/en/index.js | 17 ++++ frontend/src/locales/en/login.json | 5 ++ frontend/src/locales/en/meeting.json | 18 +++++ frontend/src/locales/en/notification.json | 8 ++ frontend/src/locales/en/office.json | 6 ++ frontend/src/locales/index.js | 9 +++ frontend/src/locales/pt-br/auth.json | 4 + frontend/src/locales/pt-br/error.json | 6 ++ frontend/src/locales/pt-br/general.json | 24 ++++++ frontend/src/locales/pt-br/index.js | 17 ++++ frontend/src/locales/pt-br/login.json | 5 ++ frontend/src/locales/pt-br/meeting.json | 18 +++++ frontend/src/locales/pt-br/notification.json | 8 ++ frontend/src/locales/pt-br/office.json | 6 ++ frontend/src/login-application.js | 1 + frontend/src/morpheus.js | 1 + .../containers/ConfirmLogoutDialog.js | 23 +++--- .../morpheus/containers/EnterMeetingDialog.js | 9 ++- .../MeetingSettings/AdvancedMeetingPanel.js | 21 +++-- .../AdvancedMeetingSettings.js | 52 ++++++------ .../MeetingSettings/BaseMeetingSettings.js | 57 ++++++++------ .../src/morpheus/containers/PageNotFound.js | 7 +- frontend/src/morpheus/hooks/useEvents.js | 2 + frontend/src/pages/login/footer/footer.js | 15 ++-- .../src/pages/login/footer/footer.module.css | 1 + .../src/pages/login/google-button/index.js | 31 +++++--- .../login/google-button/index.module.css | 47 ++++++++--- frontend/src/pages/login/title/title.js | 15 ++-- public/images/flags/en.png | Bin 0 -> 238 bytes public/images/flags/pt-br.png | Bin 0 -> 1426 bytes ...btn_google_signin_dark_disabled_web@2x.png | Bin 4897 -> 0 bytes .../btn_google_signin_dark_focus_web@2x.png | Bin 8513 -> 0 bytes .../btn_google_signin_dark_normal_web@2x.png | Bin 8001 -> 0 bytes .../btn_google_signin_dark_pressed_web@2x.png | Bin 8483 -> 0 bytes ...tn_google_signin_light_disabled_web@2x.png | Bin 4897 -> 0 bytes .../btn_google_signin_light_focus_web@2x.png | Bin 8664 -> 0 bytes .../btn_google_signin_light_normal_web@2x.png | Bin 8055 -> 0 bytes ...btn_google_signin_light_pressed_web@2x.png | Bin 8265 -> 0 bytes public/images/google-button/logo.svg | 6 ++ 65 files changed, 750 insertions(+), 270 deletions(-) create mode 100644 frontend/src/components/LanguageSwitcher.js create mode 100644 frontend/src/constants/FlagImages.js create mode 100644 frontend/src/i18n.js create mode 100644 frontend/src/locales/en/auth.json create mode 100644 frontend/src/locales/en/error.json create mode 100644 frontend/src/locales/en/general.json create mode 100644 frontend/src/locales/en/index.js create mode 100644 frontend/src/locales/en/login.json create mode 100644 frontend/src/locales/en/meeting.json create mode 100644 frontend/src/locales/en/notification.json create mode 100644 frontend/src/locales/en/office.json create mode 100644 frontend/src/locales/index.js create mode 100644 frontend/src/locales/pt-br/auth.json create mode 100644 frontend/src/locales/pt-br/error.json create mode 100644 frontend/src/locales/pt-br/general.json create mode 100644 frontend/src/locales/pt-br/index.js create mode 100644 frontend/src/locales/pt-br/login.json create mode 100644 frontend/src/locales/pt-br/meeting.json create mode 100644 frontend/src/locales/pt-br/notification.json create mode 100644 frontend/src/locales/pt-br/office.json create mode 100644 public/images/flags/en.png create mode 100644 public/images/flags/pt-br.png delete mode 100644 public/images/google-button/btn_google_signin_dark_disabled_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_dark_focus_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_dark_normal_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_dark_pressed_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_light_disabled_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_light_focus_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_light_normal_web@2x.png delete mode 100644 public/images/google-button/btn_google_signin_light_pressed_web@2x.png create mode 100644 public/images/google-button/logo.svg diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e8d782cc..b42a0421 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -6504,6 +6504,14 @@ "integrity": "sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ==", "dev": true }, + "html-parse-stringify2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz", + "integrity": "sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o=", + "requires": { + "void-elements": "^2.0.1" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -6526,6 +6534,29 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==" }, + "i18next": { + "version": "19.6.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.6.2.tgz", + "integrity": "sha512-Zyd/Z32FY+sD+Eg6sLj5DeDSlrIN3WZ4onuOBRGcjDx/rvodsyUZ9TJ2Y+3aD9Vu8MPbiMU2WesIER/rs1ioyw==", + "requires": { + "@babel/runtime": "^7.10.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz", + "integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -9772,6 +9803,15 @@ "scheduler": "^0.15.0" } }, + "react-i18next": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.7.0.tgz", + "integrity": "sha512-8tvVkpuxQlubcszZON+jmoCgiA9gCZ74OAYli9KChPhETtq8pJsANBTe9KRLRLmX3ubumgvidURWr0VvKz1tww==", + "requires": { + "@babel/runtime": "^7.3.1", + "html-parse-stringify2": "2.0.1" + } + }, "react-is": { "version": "16.9.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", @@ -11584,6 +11624,11 @@ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", "dev": true }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, "w3c-hr-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 733f8660..445dfe51 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,11 +14,13 @@ "axios": "^0.19.0", "bootstrap": "^4.4.1", "clsx": "^1.0.4", + "i18next": "^19.6.2", "lodash.debounce": "^4.0.8", "notistack": "^0.9.0", "prop-types": "^15.7.2", "react": "^16.9.0", "react-dom": "^16.9.0", + "react-i18next": "^11.7.0", "react-redux": "^7.1.1", "react-router-dom": "^5.0.1", "redux": "^4.0.4", diff --git a/frontend/src/components/AppBar.js b/frontend/src/components/AppBar.js index ac69b3c2..942ec88e 100644 --- a/frontend/src/components/AppBar.js +++ b/frontend/src/components/AppBar.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import clsx from "clsx"; import { makeStyles } from "@material-ui/core/styles"; import UIAppBar from "@material-ui/core/AppBar"; @@ -38,6 +39,8 @@ const useStyles = makeStyles(theme => ({ const AppBar = ({ isDrawerOpen, openDrawer, children }) => { const classes = useStyles(); + const { t } = useTranslation(); + return (
{ edge="start" className={clsx(classes.menuButton, isDrawerOpen && classes.hide)} color="inherit" - aria-label="Menu" + title={t("general:open-menu")} onClick={openDrawer} > diff --git a/frontend/src/components/ConfirmDialog.js b/frontend/src/components/ConfirmDialog.js index ebdf276c..4419058e 100644 --- a/frontend/src/components/ConfirmDialog.js +++ b/frontend/src/components/ConfirmDialog.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Button from "@material-ui/core/Button"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; @@ -7,29 +8,33 @@ import DialogContent from "@material-ui/core/DialogContent"; import DialogContentText from "@material-ui/core/DialogContentText"; import DialogTitle from "@material-ui/core/DialogTitle"; -const ConfirmDialog = ({ open, onClose, onConfirm, title, message }) => ( - - {title} - - {message} - - - - - - -); +const ConfirmDialog = ({ open, onClose, onConfirm, title, message }) => { + const { t } = useTranslation(); + + return ( + + {title} + + {message} + + + + + + + ); +}; ConfirmDialog.propTypes = { open: PropTypes.bool, diff --git a/frontend/src/components/Drawer.js b/frontend/src/components/Drawer.js index 2e303700..005f6f94 100644 --- a/frontend/src/components/Drawer.js +++ b/frontend/src/components/Drawer.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import { makeStyles } from "@material-ui/core/styles"; import UIDrawer from "@material-ui/core/Drawer"; import Divider from "@material-ui/core/Divider"; @@ -29,6 +30,9 @@ const useStyles = makeStyles(theme => ({ const Drawer = ({ open, onClose, children }) => { const classes = useStyles(); + + const { t } = useTranslation(); + return ( { }} >
- +
diff --git a/frontend/src/components/Error500.js b/frontend/src/components/Error500.js index 1e7c035e..0a15b776 100644 --- a/frontend/src/components/Error500.js +++ b/frontend/src/components/Error500.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import { makeStyles } from "@material-ui/core/styles"; import Fab from "@material-ui/core/Fab"; @@ -25,6 +26,8 @@ const useStyles = makeStyles(() => ({ const Error500 = ({ onReload }) => { const classes = useStyles(); + const { t } = useTranslation(); + return (
@@ -32,16 +35,15 @@ const Error500 = ({ onReload }) => { System Failure
- Reload the Matrix + {t("error:reload-matrix")}
diff --git a/frontend/src/components/InviteToMeetingDialog.js b/frontend/src/components/InviteToMeetingDialog.js index a2b7614b..42d49727 100644 --- a/frontend/src/components/InviteToMeetingDialog.js +++ b/frontend/src/components/InviteToMeetingDialog.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Button from "@material-ui/core/Button"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; @@ -13,31 +14,35 @@ const InviteToMeetingDialog = ({ onConfirm, user, currentRoomName -}) => ( - - User invite - - - Invite {user.name} to {currentRoomName}? - - - - - - - -); +}) => { + const { t } = useTranslation(); + + return ( + + {t("meeting:invite-user")} + + + {t("meeting:invite-user-text", { user: user.name, room: currentRoomName})} + + + + + + + + ); +}; InviteToMeetingDialog.propTypes = { user: PropTypes.shape({ diff --git a/frontend/src/components/LanguageSwitcher.js b/frontend/src/components/LanguageSwitcher.js new file mode 100644 index 00000000..81218095 --- /dev/null +++ b/frontend/src/components/LanguageSwitcher.js @@ -0,0 +1,74 @@ +import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; +import IconButton from "@material-ui/core/IconButton"; +import Menu from "@material-ui/core/Menu"; +import MenuItem from "@material-ui/core/MenuItem"; +import Tooltip from "@material-ui/core/Tooltip"; +import ListItemIcon from "@material-ui/core/ListItemIcon"; +import LanguageIcon from "@material-ui/icons/Translate"; +import FlagImages from "../constants/FlagImages"; + +const LanguageSwitcher = () => { + const { t, i18n } = useTranslation(); + + const [anchorEl, setAnchorEl] = useState(null); + + const handleClick = (event) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const switchLanguage = (lang) => { + i18n.changeLanguage(lang) + localStorage.setItem("matrix-language", lang); + handleClose(); + } + + return ( + <> + + + + + + + switchLanguage("en")}> + + + + {t("general:languages.en")} + + switchLanguage("pt-BR")}> + + + + {t("general:languages.pt-br")} + + + + ); +}; + +export default LanguageSwitcher; diff --git a/frontend/src/components/Loading.js b/frontend/src/components/Loading.js index d2b34b7f..241b97dd 100644 --- a/frontend/src/components/Loading.js +++ b/frontend/src/components/Loading.js @@ -1,4 +1,5 @@ import React from "react"; +import { useTranslation } from "react-i18next"; import { makeStyles } from "@material-ui/core/styles"; import CircularProgress from "@material-ui/core/CircularProgress"; import Typography from "@material-ui/core/Typography"; @@ -18,11 +19,13 @@ const useStyles = makeStyles(theme => ({ const Loading = () => { const classes = useStyles(); + const { t } = useTranslation(); + return (
- Loading... + {t("general:loading")}...
); diff --git a/frontend/src/components/MenuAuth.js b/frontend/src/components/MenuAuth.js index b25c9034..dfa6cb08 100644 --- a/frontend/src/components/MenuAuth.js +++ b/frontend/src/components/MenuAuth.js @@ -1,4 +1,5 @@ import React from "react"; +import { useTranslation } from "react-i18next"; import PropTypes from "prop-types"; import Button from "@material-ui/core/Button"; import Menu from "@material-ui/core/Menu"; @@ -11,6 +12,8 @@ const MenuAuth = ({ onLogout, userName }) => { setAnchorEl(null); }; + const { t } = useTranslation(); + return ( <> - - -); +const MessageDialog = ({ onClose, modalData }) => { + const { t } = useTranslation(); + + return ( + + {modalData.title && {modalData.title}} + + {modalData.message} + + + + + + ); +}; MessageDialog.propTypes = { onClose: PropTypes.func.isRequired, diff --git a/frontend/src/components/NotificationCheckbox.js b/frontend/src/components/NotificationCheckbox.js index 096bb277..646ffccb 100644 --- a/frontend/src/components/NotificationCheckbox.js +++ b/frontend/src/components/NotificationCheckbox.js @@ -1,4 +1,5 @@ import React, { useState } from "react"; +import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import PropTypes from "prop-types"; import Checkbox from "@material-ui/core/Checkbox"; @@ -19,9 +20,11 @@ import { showMessageDialog } from "../morpheus/store/actions"; const NotificationCheckbox = ({ onChange, openMessageDialog, isDisabled }) => { const [isAllowed, toggleAllowed] = useState(isNotificationEnabled()); + const { t } = useTranslation(); + if (!browserHasSupport()) { return ( - + ); @@ -29,15 +32,13 @@ const NotificationCheckbox = ({ onChange, openMessageDialog, isDisabled }) => { if (!isAllowed) { return ( - + { if (isNotificationBlocked()) { openMessageDialog( - "Notification blocked", - "You must unlock Matrix's notification option in your browser settings." + t("notification:blocked"), + t("notification:unlock") ); } else { requestPermissionToNotify(hasPermission => { @@ -56,7 +57,7 @@ const NotificationCheckbox = ({ onChange, openMessageDialog, isDisabled }) => { } return ( - + } checkedIcon={} diff --git a/frontend/src/components/ReceiveInviteDialog.js b/frontend/src/components/ReceiveInviteDialog.js index afcf9dc0..3a4a73b9 100644 --- a/frontend/src/components/ReceiveInviteDialog.js +++ b/frontend/src/components/ReceiveInviteDialog.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Button from "@material-ui/core/Button"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; @@ -7,32 +8,38 @@ import DialogContent from "@material-ui/core/DialogContent"; import DialogContentText from "@material-ui/core/DialogContentText"; import DialogTitle from "@material-ui/core/DialogTitle"; -const ReceiveInviteDialog = ({ open, onClose, onConfirm, invitation }) => ( - - You have an invitation - - - {invitation.user && invitation.user.name} invited you to{" "} - {invitation.room && invitation.room.name}. Do you want to accept it? - - - - - - - -); +const ReceiveInviteDialog = ({ open, onClose, onConfirm, invitation }) => { + const { t } = useTranslation(); + + return ( + + {t("meeting:invite-received")} + + + {t("meeting:invite-text", { + user: invitation.user && invitation.user.name, + room: invitation.room && invitation.room.name + })} + + + + + + + + ); +}; ReceiveInviteDialog.propTypes = { invitation: PropTypes.shape({ diff --git a/frontend/src/components/RoomCard.js b/frontend/src/components/RoomCard.js index 8865693b..1a8255cb 100644 --- a/frontend/src/components/RoomCard.js +++ b/frontend/src/components/RoomCard.js @@ -1,5 +1,6 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Card from "@material-ui/core/Card"; import CardActionArea from "@material-ui/core/CardActionArea"; import CardContent from "@material-ui/core/CardContent"; @@ -63,6 +64,8 @@ const RoomCard = ({ name, description, users, meetingEnabled, onEnterRoom, onEnt const userToShow = isExpanded ? users : users.slice(0, 3); const totalUsersHidden = users.length - userToShow.length; + const { t } = useTranslation(); + return ( {meetingEnabled && ( )} diff --git a/frontend/src/components/ShareModal.js b/frontend/src/components/ShareModal.js index 4e82aab5..4bc7518c 100644 --- a/frontend/src/components/ShareModal.js +++ b/frontend/src/components/ShareModal.js @@ -1,5 +1,6 @@ import React, { useRef } from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Button from "@material-ui/core/Button"; import Dialog from "@material-ui/core/Dialog"; import DialogActions from "@material-ui/core/DialogActions"; @@ -13,14 +14,18 @@ import FileCopyOutlined from "@material-ui/icons/FileCopyOutlined"; const ShareModal = ({ open, onClose }) => { const inputRef = useRef(); + const { t } = useTranslation(); + return ( - Share room link + + {t("meeting:share-room")} + { { if (inputRef && inputRef.current) { inputRef.current.select(); @@ -45,7 +50,7 @@ const ShareModal = ({ open, onClose }) => { diff --git a/frontend/src/components/SnackbarActions.js b/frontend/src/components/SnackbarActions.js index 3412513a..3805a47a 100644 --- a/frontend/src/components/SnackbarActions.js +++ b/frontend/src/components/SnackbarActions.js @@ -1,12 +1,17 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Button from "@material-ui/core/Button"; -const SnackbarActions = ({ onDismiss }) => ( - -); +const SnackbarActions = ({ onDismiss }) => { + const { t } = useTranslation(); + + return ( + + ); +}; SnackbarActions.propTypes = { onDismiss: PropTypes.func diff --git a/frontend/src/components/ThemeCheckbox.js b/frontend/src/components/ThemeCheckbox.js index bc2d87a8..772190ad 100644 --- a/frontend/src/components/ThemeCheckbox.js +++ b/frontend/src/components/ThemeCheckbox.js @@ -1,13 +1,18 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import Checkbox from "@material-ui/core/Checkbox"; import EmojiObjectsIcon from "@material-ui/icons/EmojiObjects"; import Tooltip from "@material-ui/core/Tooltip"; function ThemeCheckbox({ onChange }) { + const { t } = useTranslation(); + return ( - + } checkedIcon={} diff --git a/frontend/src/constants/FlagImages.js b/frontend/src/constants/FlagImages.js new file mode 100644 index 00000000..90bf87c5 --- /dev/null +++ b/frontend/src/constants/FlagImages.js @@ -0,0 +1,8 @@ +const flagsRoot = "/images/flags"; + +const Flags = { + en: `${flagsRoot}/en.png`, + ptBr: `${flagsRoot}/pt-br.png`, +}; + +export default Flags; diff --git a/frontend/src/i18n.js b/frontend/src/i18n.js new file mode 100644 index 00000000..4e17a50c --- /dev/null +++ b/frontend/src/i18n.js @@ -0,0 +1,24 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import locales from "./locales"; + +const storedLanguage = window && window.localStorage.getItem("matrix-language"); + +let preferredLanguage = window && window.navigator.language; + +if (!Object.keys(locales).includes(preferredLanguage)) { + preferredLanguage = null; +} + +i18n + .use(initReactI18next) // passes i18n down to react-i18next + .init({ + resources: locales, + lng: storedLanguage || preferredLanguage || "en", + fallbackLng: "en", + interpolation: { + escapeValue: false // react already safes from xss + } + }); + + export default i18n; diff --git a/frontend/src/locales/en/auth.json b/frontend/src/locales/en/auth.json new file mode 100644 index 00000000..6da11ae6 --- /dev/null +++ b/frontend/src/locales/en/auth.json @@ -0,0 +1,4 @@ +{ + "logout": "Logout", + "logout-confirmation": "Do you really want to unplug from the matrix?" +} diff --git a/frontend/src/locales/en/error.json b/frontend/src/locales/en/error.json new file mode 100644 index 00000000..87c5ed7f --- /dev/null +++ b/frontend/src/locales/en/error.json @@ -0,0 +1,6 @@ +{ + "go-home": "Go to home page", + "not-found": "Page not found", + "reload-matrix": "Reload the matrix", + "system-failure": "System failure" +} diff --git a/frontend/src/locales/en/general.json b/frontend/src/locales/en/general.json new file mode 100644 index 00000000..25da548b --- /dev/null +++ b/frontend/src/locales/en/general.json @@ -0,0 +1,24 @@ +{ + "cancel": "Cancel", + "change-language": "Change language", + "close": "Close", + "close-menu": "Close menu", + "disable": "Disable", + "dismiss": "Dismiss", + "enable": "Enable", + "enter": "Enter", + "languages": { + "en": "English", + "pt-br": "Portuguese" + }, + "loading": "Loading", + "no": "No", + "ok": "Ok", + "online-users": "Online users", + "open-menu": "Open menu", + "reload": "Reload", + "search": "Search", + "search-users": "Search users", + "toggle-theme": "Toggle light/dark theme", + "yes": "Yes" +} diff --git a/frontend/src/locales/en/index.js b/frontend/src/locales/en/index.js new file mode 100644 index 00000000..b553a63d --- /dev/null +++ b/frontend/src/locales/en/index.js @@ -0,0 +1,17 @@ +import auth from "./auth"; +import error from "./error"; +import general from "./general"; +import login from "./login"; +import meeting from "./meeting"; +import notification from "./notification"; +import office from "./office"; + +export default { + auth, + error, + general, + login, + meeting, + notification, + office, +}; diff --git a/frontend/src/locales/en/login.json b/frontend/src/locales/en/login.json new file mode 100644 index 00000000..31d83346 --- /dev/null +++ b/frontend/src/locales/en/login.json @@ -0,0 +1,5 @@ +{ + "footer": "Made with by RDoers in a few places.", + "google-signin": "Sign in with Google", + "title": "Work everywhere. Stay Together" +} diff --git a/frontend/src/locales/en/meeting.json b/frontend/src/locales/en/meeting.json new file mode 100644 index 00000000..1ded9736 --- /dev/null +++ b/frontend/src/locales/en/meeting.json @@ -0,0 +1,18 @@ +{ + "accept-invite": "Yes, take me there!", + "advanced-options": "Advanced options", + "copy-link": "Copy room link", + "enter-meeting-with": "Enter meeting with", + "invite": "Invite", + "invite-received": "You have an invitation", + "invite-text": "{{user}} invited you to {{room}}. Do you want to accept it?", + "invite-user": "Invite user", + "invite-user-text": "Invite {{user}} to {{room}}?", + "leave-room": "Leave room", + "mic": "MIC", + "resolution": "Resolution", + "share-room": "Share room link", + "simulcast-support": "Simulcast support on Firefox (Experimental)", + "url": "URL", + "video": "Video" +} diff --git a/frontend/src/locales/en/notification.json b/frontend/src/locales/en/notification.json new file mode 100644 index 00000000..106df3ab --- /dev/null +++ b/frontend/src/locales/en/notification.json @@ -0,0 +1,8 @@ +{ + "blocked": "Notifications blocked", + "disable": "Disable notifications", + "enable": "Enable notifications", + "request-permission": "Request notifications permission", + "unlock": "You must unlock Matrix's notification option in your browser settings.", + "unsupported-browser": "This browser doesn't support notifications" +} diff --git a/frontend/src/locales/en/office.json b/frontend/src/locales/en/office.json new file mode 100644 index 00000000..edae8e6f --- /dev/null +++ b/frontend/src/locales/en/office.json @@ -0,0 +1,6 @@ +{ + "enter-meeting": "Enter meeting", + "enter-room": "Enter Room", + "hide-empty-rooms": "Hide empty rooms", + "show-empty-rooms": "Show empty rooms" +} diff --git a/frontend/src/locales/index.js b/frontend/src/locales/index.js new file mode 100644 index 00000000..8df77525 --- /dev/null +++ b/frontend/src/locales/index.js @@ -0,0 +1,9 @@ +import ptBr from "./pt-br"; +import en from "./en"; + +const locales = { + "pt-BR": ptBr, + en, +}; + +export default locales; diff --git a/frontend/src/locales/pt-br/auth.json b/frontend/src/locales/pt-br/auth.json new file mode 100644 index 00000000..adfc9fa6 --- /dev/null +++ b/frontend/src/locales/pt-br/auth.json @@ -0,0 +1,4 @@ +{ + "logout": "Sair", + "logout-confirmation": "Você realmente quer se desplugar da matrix?" +} diff --git a/frontend/src/locales/pt-br/error.json b/frontend/src/locales/pt-br/error.json new file mode 100644 index 00000000..c5801838 --- /dev/null +++ b/frontend/src/locales/pt-br/error.json @@ -0,0 +1,6 @@ +{ + "go-home": "Voltar para a página inicial", + "not-found": "Página não encontrada", + "reload-matrix": "Recarregar a matrix", + "system-failure": "Falha do sistema" +} diff --git a/frontend/src/locales/pt-br/general.json b/frontend/src/locales/pt-br/general.json new file mode 100644 index 00000000..c25204a0 --- /dev/null +++ b/frontend/src/locales/pt-br/general.json @@ -0,0 +1,24 @@ +{ + "cancel": "Cancelar", + "change-language": "Mudar idioma", + "close": "Fechar", + "close-menu": "Fechar menu", + "disable": "Desativar", + "dismiss": "Dispensar", + "enable": "Habilitar", + "enter": "Entrar", + "languages": { + "en": "Inglês", + "pt-br": "Português" + }, + "loading": "Carregando", + "no": "Não", + "ok": "Ok", + "online-users": "Usuários online", + "open-menu": "Abrir menu", + "reload": "Recarregar", + "search": "Pesquisar", + "search-users": "Pesquisar usuários", + "toggle-theme": "Alternar entre tema claro/escuro", + "yes": "Sim" +} diff --git a/frontend/src/locales/pt-br/index.js b/frontend/src/locales/pt-br/index.js new file mode 100644 index 00000000..b553a63d --- /dev/null +++ b/frontend/src/locales/pt-br/index.js @@ -0,0 +1,17 @@ +import auth from "./auth"; +import error from "./error"; +import general from "./general"; +import login from "./login"; +import meeting from "./meeting"; +import notification from "./notification"; +import office from "./office"; + +export default { + auth, + error, + general, + login, + meeting, + notification, + office, +}; diff --git a/frontend/src/locales/pt-br/login.json b/frontend/src/locales/pt-br/login.json new file mode 100644 index 00000000..c2f7f26b --- /dev/null +++ b/frontend/src/locales/pt-br/login.json @@ -0,0 +1,5 @@ +{ + "footer": "Feito com por RDoers em alguns lugares.", + "google-signin": "Fazer login com o Google", + "title": "Trabalhe de qualquer lugar. Continue junto." +} diff --git a/frontend/src/locales/pt-br/meeting.json b/frontend/src/locales/pt-br/meeting.json new file mode 100644 index 00000000..bab4b9d1 --- /dev/null +++ b/frontend/src/locales/pt-br/meeting.json @@ -0,0 +1,18 @@ +{ + "accept-invite": "Sim, me leve até lá!", + "advanced-options": "Opções avançadas", + "copy-link": "Copiar link da sala", + "enter-meeting-with": "Entrar na reunião com", + "invite": "Convite", + "invite-received": "Convite recebido", + "invite-text": "{{user}} convidou você para a sala {{room}}. Deseja aceitar?", + "invite-user": "Convidar usuário", + "invite-user-text": "Convidar {{user}} para {{room}}?", + "leave-room": "Sair da sala", + "mic": "Microfone", + "resolution": "Resolução", + "share-room": "Compartilhar link da sala", + "simulcast-support": "Suporte para Simulcast no Firefox (Experimental)", + "url": "URL", + "video": "Vídeo" +} diff --git a/frontend/src/locales/pt-br/notification.json b/frontend/src/locales/pt-br/notification.json new file mode 100644 index 00000000..e4c75016 --- /dev/null +++ b/frontend/src/locales/pt-br/notification.json @@ -0,0 +1,8 @@ +{ + "blocked": "Notificações bloqueadas", + "disable": "Desativar as notificações", + "enable": "Ativar as notificações", + "request-permission": "Solicitar permissão de notificações", + "unlock": "Você deve desbloquear a opção de notificação do Matrix nas configurações do seu navegador.", + "unsupported-browser": "Este navegador não suporta notificações" +} diff --git a/frontend/src/locales/pt-br/office.json b/frontend/src/locales/pt-br/office.json new file mode 100644 index 00000000..37709ba9 --- /dev/null +++ b/frontend/src/locales/pt-br/office.json @@ -0,0 +1,6 @@ +{ + "enter-meeting": "Entrar na reunião", + "enter-room": "Entrar na sala", + "hide-empty-rooms": "Esconder salas vazias", + "show-empty-rooms": "Mostrar salas vazias" +} diff --git a/frontend/src/login-application.js b/frontend/src/login-application.js index 38332e41..6a916967 100644 --- a/frontend/src/login-application.js +++ b/frontend/src/login-application.js @@ -1,5 +1,6 @@ import React from "react"; import { render } from "react-dom"; import { Login } from "./pages/login"; +import "./i18n"; render(, document.querySelector("#application")); diff --git a/frontend/src/morpheus.js b/frontend/src/morpheus.js index 2269aa58..945d9317 100644 --- a/frontend/src/morpheus.js +++ b/frontend/src/morpheus.js @@ -7,6 +7,7 @@ import Providers from "./morpheus/providers"; import store from "./morpheus/store"; import App from "./morpheus/App"; import MatrixProfile from "./profile"; +import "./i18n"; function renderApp() { ReactDOM.render( diff --git a/frontend/src/morpheus/containers/ConfirmLogoutDialog.js b/frontend/src/morpheus/containers/ConfirmLogoutDialog.js index 7635168e..386ae7cf 100644 --- a/frontend/src/morpheus/containers/ConfirmLogoutDialog.js +++ b/frontend/src/morpheus/containers/ConfirmLogoutDialog.js @@ -1,4 +1,5 @@ import React from "react"; +import { useTranslation } from "react-i18next"; import PropTypes from "prop-types"; import { connect } from "react-redux"; import ConfirmDialog from "../../components/ConfirmDialog"; @@ -6,15 +7,19 @@ import { closeLogoutConfirmDialog } from "../store/actions"; import { selectIsLogoutDialogOpen } from "../store/selectors"; import { signOut } from "../socket"; -const ConfirmLogoutDialog = ({ onClose, isOpen }) => ( - -); +const ConfirmLogoutDialog = ({ onClose, isOpen }) => { + const { t } = useTranslation(); + + return ( + + ) +}; ConfirmLogoutDialog.propTypes = { onClose: PropTypes.func.isRequired, diff --git a/frontend/src/morpheus/containers/EnterMeetingDialog.js b/frontend/src/morpheus/containers/EnterMeetingDialog.js index 24f127d5..84fc2a04 100644 --- a/frontend/src/morpheus/containers/EnterMeetingDialog.js +++ b/frontend/src/morpheus/containers/EnterMeetingDialog.js @@ -1,5 +1,6 @@ import React, { useState } from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import { makeStyles } from "@material-ui/core/styles"; import Grid from "@material-ui/core/Grid"; import Button from "@material-ui/core/Button"; @@ -25,13 +26,15 @@ const EnterMeetingDialog = ({ open, onClose, onConfirm, title }) => { const [videoEnabled, setVideoEnabled] = useState(true); const classes = useStyles(); + const { t } = useTranslation(); + return ( {title} - Enter the meeting with: + {t("meeting:enter-meeting-with")} { diff --git a/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingPanel.js b/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingPanel.js index 7ceb2344..4f4cb3cd 100644 --- a/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingPanel.js +++ b/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingPanel.js @@ -1,19 +1,24 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import ExpansionPanel from "@material-ui/core/ExpansionPanel"; import ExpansionPanelSummary from "@material-ui/core/ExpansionPanelSummary"; import ExpansionPanelDetails from "@material-ui/core/ExpansionPanelDetails"; import ExpandMoreIcon from "@material-ui/icons/ExpandMore"; import Typography from "@material-ui/core/Typography"; -const AdvancedMeetingPanel = ({ children }) => ( - - }> - Advanced options - - {children} - -); +const AdvancedMeetingPanel = ({ children }) => { + const { t } = useTranslation(); + + return ( + + }> + {t("meeting:advanced-options")} + + {children} + + ); +}; AdvancedMeetingPanel.propTypes = { children: PropTypes.node.isRequired diff --git a/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingSettings.js b/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingSettings.js index a938e36a..1fbe99d0 100644 --- a/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingSettings.js +++ b/frontend/src/morpheus/containers/MeetingSettings/AdvancedMeetingSettings.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import Grid from "@material-ui/core/Grid"; import FormControlLabel from "@material-ui/core/FormControlLabel"; @@ -17,30 +18,35 @@ const AdvancedMeetingSettings = ({ onVideoQualityChange, enableFirefoxSimulcast, onEnableFirefoxSimulcastChange -}) => ( - - - + + + + } + label={t("meeting:simulcast-support")} + /> + - -); + ); +}; AdvancedMeetingSettings.propTypes = { videoQualityOptions: PropTypes.arrayOf( diff --git a/frontend/src/morpheus/containers/MeetingSettings/BaseMeetingSettings.js b/frontend/src/morpheus/containers/MeetingSettings/BaseMeetingSettings.js index be8b8603..a890e91c 100644 --- a/frontend/src/morpheus/containers/MeetingSettings/BaseMeetingSettings.js +++ b/frontend/src/morpheus/containers/MeetingSettings/BaseMeetingSettings.js @@ -1,5 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import Checkbox from "@material-ui/core/Checkbox"; import Mic from "@material-ui/icons/Mic"; @@ -18,30 +19,38 @@ const BaseMeetingSettings = ({ onMicEnabledChange, videoEnabled, onVideoEnabledChange -}) => ( - <> - - - } - checkedIcon={} - onChange={onMicEnabledChange} - checked={micEnabled} - /> - - - - - } - checkedIcon={} - onChange={onVideoEnabledChange} - checked={videoEnabled} - /> - - - -); +}) => { + const { t } = useTranslation(); + + return ( + <> + + + } + checkedIcon={} + onChange={onMicEnabledChange} + checked={micEnabled} + /> + + + + + } + checkedIcon={} + onChange={onVideoEnabledChange} + checked={videoEnabled} + /> + + + + ); +}; BaseMeetingSettings.propTypes = { micEnabled: PropTypes.bool.isRequired, diff --git a/frontend/src/morpheus/containers/PageNotFound.js b/frontend/src/morpheus/containers/PageNotFound.js index cee39dc8..9f540757 100644 --- a/frontend/src/morpheus/containers/PageNotFound.js +++ b/frontend/src/morpheus/containers/PageNotFound.js @@ -1,4 +1,5 @@ import React from "react"; +import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import { makeStyles } from "@material-ui/core/styles"; import Typography from "@material-ui/core/Typography"; @@ -17,10 +18,12 @@ const AdapterLink = React.forwardRef((props, ref) => ( const PageNotFound = () => { const classes = useStyles(); + const { t } = useTranslation(); + return (
- 404 - Page not found + 404 - {t("error:not-found")}
); diff --git a/frontend/src/morpheus/hooks/useEvents.js b/frontend/src/morpheus/hooks/useEvents.js index 893b13c5..f64740b0 100644 --- a/frontend/src/morpheus/hooks/useEvents.js +++ b/frontend/src/morpheus/hooks/useEvents.js @@ -6,6 +6,8 @@ import SnackbarActions from "../../components/SnackbarActions"; import { showBrowserNotification } from "../../notification"; import { initEvents, closeConnection } from "../socket"; +// TODO: find a way to add translations for those strings + const useEvents = ( onSyncOffice, onAddUser, diff --git a/frontend/src/pages/login/footer/footer.js b/frontend/src/pages/login/footer/footer.js index 89fbc6bf..3607eb32 100644 --- a/frontend/src/pages/login/footer/footer.js +++ b/frontend/src/pages/login/footer/footer.js @@ -1,14 +1,15 @@ import React from "react"; +import { Trans } from "react-i18next"; import styles from "./footer.module.css"; export const Footer = () => ( -
- - Made with by RDoers in a few - places. - +
+ }} + />
); diff --git a/frontend/src/pages/login/footer/footer.module.css b/frontend/src/pages/login/footer/footer.module.css index d5570162..fce818e7 100644 --- a/frontend/src/pages/login/footer/footer.module.css +++ b/frontend/src/pages/login/footer/footer.module.css @@ -12,5 +12,6 @@ .heart { font-size: 18px; + margin: 0 5px; color: #fd5f7d; } diff --git a/frontend/src/pages/login/google-button/index.js b/frontend/src/pages/login/google-button/index.js index 5be5566e..c0ecba4f 100644 --- a/frontend/src/pages/login/google-button/index.js +++ b/frontend/src/pages/login/google-button/index.js @@ -1,20 +1,29 @@ import React from "react"; import PropTypes from "prop-types"; +import { useTranslation } from "react-i18next"; import clsx from "clsx"; import styles from "./index.module.css"; -const GoogleButton = ({ isDark }) => ( - - Sign in with Google - -); +const GoogleButton = ({ isDark }) => { + const { t } = useTranslation(); + + return ( + + + + + + {t("login:google-signin")} + + + ); +}; GoogleButton.propTypes = { isDark: PropTypes.bool.isRequired diff --git a/frontend/src/pages/login/google-button/index.module.css b/frontend/src/pages/login/google-button/index.module.css index 061f6bf3..385aded7 100644 --- a/frontend/src/pages/login/google-button/index.module.css +++ b/frontend/src/pages/login/google-button/index.module.css @@ -1,22 +1,43 @@ .GoogleButton { - display: inline-block; - background-image: url('/images/google-button/btn_google_signin_light_normal_web@2x.png'); - background-size: contain; - width: 270px; - height: 65px; - cursor: pointer; - text-indent: -5000em; - overflow: hidden; + display: inline-flex; + align-items: center; + flex-wrap: nowrap; + white-space: nowrap; + padding: 1px; + border-radius: 2px; + background: white; + box-shadow: 0 3px 2px rgba(0, 0, 0, 0.2); } .GoogleButton:hover { - background-image: url('/images/google-button/btn_google_signin_light_pressed_web@2x.png'); + text-decoration: none; + background-color: rgba(0, 0, 0, 0.1); } - .GoogleButtonDark { - background-image: url('/images/google-button/btn_google_signin_dark_normal_web@2x.png'); + background-color: #4285f4; } - .GoogleButtonDark:hover { - background-image: url('/images/google-button/btn_google_signin_dark_pressed_web@2x.png'); + background-color: #356abe; +} + +.GoogleButtonLogo { + padding: 8px; + border-radius: 2px; +} + +.GoogleButtonLogoDark { + background: white; +} + +.GoogleButtonText { + display: block; + flex: 1; + margin: 0 16px; + text-align: center; + font-weight: 600; + color: #757575; +} + +.GoogleButtonTextDark { + color: #fbffff; } diff --git a/frontend/src/pages/login/title/title.js b/frontend/src/pages/login/title/title.js index e0346444..45fa2d72 100644 --- a/frontend/src/pages/login/title/title.js +++ b/frontend/src/pages/login/title/title.js @@ -1,7 +1,12 @@ import React from "react"; +import { useTranslation } from "react-i18next"; -export const Title = () => ( -
-
Work everywhere. Stay Together
-
-); +export const Title = () => { + const { t } = useTranslation(); + + return ( +
+
{t("login:title")}
+
+ ); +}; diff --git a/public/images/flags/en.png b/public/images/flags/en.png new file mode 100644 index 0000000000000000000000000000000000000000..179d4e9e7d93f2646ec9bb38e09a94fc730ef87e GIT binary patch literal 238 zcmVYbjIg`l*jvGl*q=jMT@!!^! zsu%CR5&c)#wrwLN9Xdrv=e&nKFsM+`l6pprv-_43>}7$D;q11i1be3NmUyRB4V1A1 o{7jAFFJ$PM9DK>O!QLsxTrN4rbr>_3Wb6!Y%Yt20Dt>Vl0F#_*8~^|S literal 0 HcmV?d00001 diff --git a/public/images/flags/pt-br.png b/public/images/flags/pt-br.png new file mode 100644 index 0000000000000000000000000000000000000000..70375f59ecf3b35973b49e7204b3f192c852f371 GIT binary patch literal 1426 zcmV;D1#S9?P)Px)Oi4sRR7efIR&8ukRTzHmZEt(qbuAs6D`P|1#x@5UH}Qw!*NhveLp1CUexhcH zBI*zQ;S!_h4?|*zQ4yQMMF1^~VmXdTB8e$k1ym29 zxGWG-?u^JeyH6$nLjxk?!1xdz^cd*9rxJ&nDzL&91}2!v=mZdt0VWyBam)@tM4d3K zsKX=hP7UIdx)SVIS&br9M!8qPkE@sB%}PI%@d4m`$l9Aq&$LGV8_nebh)Ci(Bb!V` zeW#+~Nb@p0er*AxBqQl*lagp#9>Bh)YShNb&_s|nQ?w=US=g8vKq_kHT4%1qA*d4r z*iz*~$Gw#(^T?Eefh1WmlXM^=P0#uwCl0Qu!SewH()b|R7_-tQ(ubMZxKxA!v7lT( z&jUtLXOCffV>xR44(Pguh!)4mbH#YKYdsDP-w2n}junf0@#5{D;%fgOR2ITJw+7IB z#)BvJ_hZ0_0&YLx6arN!{0jxjK2T~wYrKk)2%%Y&+nDdRaxY$8UIay!pc@H{P3q`A zQ;OF+HsjzS6K0+RE}sftz5@&W8rmOu3D*=1iNZ{cQ7wTDT|@XHM3(Xk34)bkcUYB@ zDnnKhvJ#6K2u(zwRPRFD`f5Dd~a$CwU47~|0qgJRlN3c1y1a_3EMUXP;J+-v!@D?h(>K@?1cTp zl`b4^3ZNm6PKBt2#?m7LfG_MszKE$(*W=2G*C{7r5 z6}y5Oe)=nnhC&%WhiI=!%yW*RvAh!_(GpC>7oZ>?xNqqJe6Z#fTvx&}R3zA#%AOGe z_x~Km_Hh+)Z-CC{S$Bnv&IJRfS>_xW2C{EMk)zb5W3l0lp2OSK4m>I3e96eW^{4DB`Em+G=>O=@T1|!(ETtUE{NlCW# z-m^)x9yV}XBGrC2A4eXQ&2yv+w4QB}RfZS5PCtlx6*&|1%`3ro#(XU6)baUgQD&LD zU{Ytp`89?+x+NTUE&zO_TxH~<>0HLS@G>(4*yYL{8ISCdH?jcqg94%rWYV0PyQnd=aNrnf>P+{2pXyG+XJ&>I!q< gG0VjuFS)1x0ffRH{)wo(Q~&?~07*qoM6N<$g7mtRRsaA1 literal 0 HcmV?d00001 diff --git a/public/images/google-button/btn_google_signin_dark_disabled_web@2x.png b/public/images/google-button/btn_google_signin_dark_disabled_web@2x.png deleted file mode 100644 index 485757f3746ba14ea86f7a1f8c1f91af077bee75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4897 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 diff --git a/public/images/google-button/btn_google_signin_dark_focus_web@2x.png b/public/images/google-button/btn_google_signin_dark_focus_web@2x.png deleted file mode 100644 index 369a6ca24df29d2c5c9ef4d28e330723eec0d7b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8513 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 diff --git a/public/images/google-button/btn_google_signin_dark_normal_web@2x.png b/public/images/google-button/btn_google_signin_dark_normal_web@2x.png deleted file mode 100644 index f27bb2433042aea5fc34e19fcf90944430ec331b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8001 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 diff --git a/public/images/google-button/btn_google_signin_dark_pressed_web@2x.png b/public/images/google-button/btn_google_signin_dark_pressed_web@2x.png deleted file mode 100644 index 4cb85e9b554a751b1cf7a7370bcbf85180c0fde7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8483 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 diff --git a/public/images/google-button/btn_google_signin_light_disabled_web@2x.png b/public/images/google-button/btn_google_signin_light_disabled_web@2x.png deleted file mode 100644 index 485757f3746ba14ea86f7a1f8c1f91af077bee75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4897 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 diff --git a/public/images/google-button/btn_google_signin_light_focus_web@2x.png b/public/images/google-button/btn_google_signin_light_focus_web@2x.png deleted file mode 100644 index 510e6192fda859b4faaadc6797ce019f16df11e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8664 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 diff --git a/public/images/google-button/btn_google_signin_light_pressed_web@2x.png b/public/images/google-button/btn_google_signin_light_pressed_web@2x.png deleted file mode 100644 index d01521e8a3ea944073b9fcd5ea657676c70a1618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8265 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 diff --git a/public/images/google-button/logo.svg b/public/images/google-button/logo.svg new file mode 100644 index 00000000..0a8dcdbd --- /dev/null +++ b/public/images/google-button/logo.svg @@ -0,0 +1,6 @@ + + +