diff --git a/gatsby-config.js b/gatsby-config.js index dcf8873f..37b34d19 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -5,7 +5,7 @@ module.exports = { title: 'Reactive Resume', siteUrl: 'https://rxresu.me', description: 'A free and open source resume builder.', - version: '2.0.1', + version: '2.0.2', }, plugins: [ 'gatsby-plugin-react-helmet', diff --git a/src/components/dashboard/ResumePreview.js b/src/components/dashboard/ResumePreview.js index e651e140..bb47bb23 100644 --- a/src/components/dashboard/ResumePreview.js +++ b/src/components/dashboard/ResumePreview.js @@ -1,16 +1,16 @@ import { Menu, MenuItem } from '@material-ui/core'; import { navigate } from 'gatsby'; -import moment from 'moment'; +import moment from 'moment/min/moment-with-locales'; import React, { useContext, useState } from 'react'; +import { useTranslation } from 'react-i18next'; import { MdMoreHoriz, MdOpenInNew } from 'react-icons/md'; import { toast } from 'react-toastify'; -import { useTranslation } from 'react-i18next'; import DatabaseContext from '../../contexts/DatabaseContext'; import ModalContext from '../../contexts/ModalContext'; import styles from './ResumePreview.module.css'; const ResumePreview = ({ resume }) => { - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const [anchorEl, setAnchorEl] = useState(null); const { emitter, events } = useContext(ModalContext); const { duplicateResume, deleteResume } = useContext(DatabaseContext); @@ -84,7 +84,9 @@ const ResumePreview = ({ resume }) => { {resume.updatedAt && ( {t('dashboard.lastUpdated', { - timestamp: moment(resume.updatedAt).fromNow(), + timestamp: moment(resume.updatedAt) + .locale(i18n.language.substr(0, 2)) + .fromNow(), })} )} diff --git a/src/i18n/locales/index.js b/src/i18n/locales/index.js index 77402afc..65e3588d 100644 --- a/src/i18n/locales/index.js +++ b/src/i18n/locales/index.js @@ -1,15 +1,15 @@ import en from './en.json'; -import kn from './kn.json'; import es from './es.json'; -import ptBr from './pt-br.json'; import fi from './fi.json'; import fr from './fr.json'; +import kn from './kn.json'; +import ptBr from './pt-br.json'; export default { en: { translation: en }, - kn: { translation: kn }, es: { translation: es }, - ptBr: { translation: ptBr }, fi: { translation: fi }, fr: { translation: fr }, + kn: { translation: kn }, + ptBr: { translation: ptBr }, }; diff --git a/src/templates/blocks/Awards/AwardsA.js b/src/templates/blocks/Awards/AwardsA.js index 4ea2c96e..2e54824f 100644 --- a/src/templates/blocks/Awards/AwardsA.js +++ b/src/templates/blocks/Awards/AwardsA.js @@ -1,27 +1,34 @@ -import moment from 'moment'; +import moment from 'moment/min/moment-with-locales'; import React, { memo, useContext } from 'react'; +import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; import { safetyCheck } from '../../../utils'; -const AwardItem = (x) => ( -
-
-
-
{x.title}
- {x.awarder} +const AwardItem = (x) => { + const { i18n } = useTranslation(); + + return ( +
+
+
+
{x.title}
+ {x.awarder} +
+ {x.date && ( +
+ {moment(x.date) + .locale(i18n.language.substr(0, 2)) + .format('MMMM YYYY')} +
+ )}
- {x.date && ( -
- {moment(x.date).format('MMMM YYYY')} -
+ {x.summary && ( + )}
- {x.summary && ( - - )} -
-); + ); +}; const AwardsA = () => { const { data, heading: Heading } = useContext(PageContext); diff --git a/src/templates/blocks/Certifications/CertificationsA.js b/src/templates/blocks/Certifications/CertificationsA.js index 08d9d2f2..52bcd2d9 100644 --- a/src/templates/blocks/Certifications/CertificationsA.js +++ b/src/templates/blocks/Certifications/CertificationsA.js @@ -1,27 +1,34 @@ -import moment from 'moment'; +import moment from 'moment/min/moment-with-locales'; import React, { memo, useContext } from 'react'; +import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; import { safetyCheck } from '../../../utils'; -const CertificationItem = (x) => ( -
-
-
-
{x.title}
- {x.issuer} +const CertificationItem = (x) => { + const { i18n } = useTranslation(); + + return ( +
+
+
+
{x.title}
+ {x.issuer} +
+ {x.date && ( +
+ {moment(x.date) + .locale(i18n.language.substr(0, 2)) + .format('MMMM YYYY')} +
+ )}
- {x.date && ( -
- {moment(x.date).format('MMMM YYYY')} -
+ {x.summary && ( + )}
- {x.summary && ( - - )} -
-); + ); +}; const CertificationsA = () => { const { data, heading: Heading } = useContext(PageContext); diff --git a/src/templates/blocks/Projects/ProjectsA.js b/src/templates/blocks/Projects/ProjectsA.js index f8a196a2..b92ff558 100644 --- a/src/templates/blocks/Projects/ProjectsA.js +++ b/src/templates/blocks/Projects/ProjectsA.js @@ -1,31 +1,38 @@ -import moment from 'moment'; +import moment from 'moment/min/moment-with-locales'; import React, { memo, useContext } from 'react'; +import { useTranslation } from 'react-i18next'; import ReactMarkdown from 'react-markdown'; import PageContext from '../../../contexts/PageContext'; import { safetyCheck } from '../../../utils'; -const ProjectItem = (x) => ( -
-
-
-
{x.title}
- {x.link && ( - - {x.link} - +const ProjectItem = (x) => { + const { i18n } = useTranslation(); + + return ( +
+
+
+
{x.title}
+ {x.link && ( + + {x.link} + + )} +
+ {x.date && ( +
+ {moment(x.date) + .locale(i18n.language.substr(0, 2)) + .format('MMMM YYYY')} +
)}
- {x.date && ( -
- {moment(x.date).format('MMMM YYYY')} -
+ {x.summary && ( + )}
- {x.summary && ( - - )} -
-); + ); +}; const ProjectsA = () => { const { data, heading: Heading } = useContext(PageContext); diff --git a/src/utils/index.js b/src/utils/index.js index 82e6d2e3..963a657c 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,5 +1,5 @@ import { get, isEmpty } from 'lodash'; -import moment from 'moment'; +import moment from 'moment/min/moment-with-locales'; import { useTranslation } from 'react-i18next'; export const getModalText = (isEditMode, type) => { @@ -22,10 +22,19 @@ export const isFileImage = (file) => { return file && acceptedImageTypes.includes(file.type); }; -export const formatDateRange = ({ startDate, endDate }) => - `${moment(startDate).format('MMMM Y')} — ${ - moment(endDate).isValid() ? moment(endDate).format('MMMM Y') : 'Present' - }`; +export const formatDateRange = ({ startDate, endDate }) => { + const { i18n } = useTranslation(); + + const start = `${moment(startDate) + .locale(i18n.language.substr(0, 2)) + .format('MMMM Y')}`; + + const end = moment(endDate).isValid() + ? `${moment(endDate).locale(i18n.language.substr(0, 2)).format('MMMM Y')}` + : 'Present'; + + return `${start} - ${end}`; +}; export const getFieldProps = (formik, schema, name) => ({ touched: get(formik, `touched.${name}`, false),