- implement ability to rename sections

- clean up kannada translations
This commit is contained in:
Amruth Pillai
2020-07-17 08:36:46 +05:30
parent c57eb2e9aa
commit 816e400b31
32 changed files with 249 additions and 156 deletions

View File

@ -71,9 +71,6 @@ module.exports = {
description: 'A free and open-source resume builder.', description: 'A free and open-source resume builder.',
start_url: '/?source=pwa', start_url: '/?source=pwa',
icon: 'static/images/logo.png', icon: 'static/images/logo.png',
icon_options: {
purpose: 'any maskable monochrome',
},
background_color: '#FFFFFF', background_color: '#FFFFFF',
theme_color: '#444444', theme_color: '#444444',
display: 'standalone', display: 'standalone',
@ -83,7 +80,7 @@ module.exports = {
src: 'static/icons/maskable.png', src: 'static/icons/maskable.png',
sizes: '196x196', sizes: '196x196',
type: 'image/png', type: 'image/png',
purpose: 'any maskable monochrome', purpose: 'any maskable',
}, },
], ],
shortcuts: [ shortcuts: [

52
package-lock.json generated
View File

@ -1204,9 +1204,9 @@
"integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg=="
}, },
"@firebase/auth": { "@firebase/auth": {
"version": "0.14.8", "version": "0.14.9",
"resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.8.tgz", "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz",
"integrity": "sha512-LufoWcFpYAoCUkFDKSELH69xI8NdOjNTUFKvWfADZN7ysr4dpPdDs2ZYnH67FqcMb0tX+Jdx6vWrF6VZ37AAJQ==", "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==",
"requires": { "requires": {
"@firebase/auth-types": "0.10.1" "@firebase/auth-types": "0.10.1"
} }
@ -1231,9 +1231,9 @@
} }
}, },
"@firebase/database": { "@firebase/database": {
"version": "0.6.7", "version": "0.6.8",
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.7.tgz", "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.6.8.tgz",
"integrity": "sha512-vm0ch2zNSoHfXWnDG6WVjf0p/BdXOMBL1lAfkGu3DYH/Rkl4p97x57w0WNOURNfL4GY2LIqScSYKCidV7jqTog==", "integrity": "sha512-Psibz/LD9WBvZRS7A/kkYd5i5l6tBw49adSFmCM2ZJlKE9fxZhxay02AerwfXHiq3gPKVeqXUjBIRuHOWdEXmw==",
"requires": { "requires": {
"@firebase/auth-interop-types": "0.1.5", "@firebase/auth-interop-types": "0.1.5",
"@firebase/component": "0.1.16", "@firebase/component": "0.1.16",
@ -1253,9 +1253,9 @@
} }
}, },
"@firebase/firestore": { "@firebase/firestore": {
"version": "1.16.0", "version": "1.16.1",
"resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.16.0.tgz", "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.16.1.tgz",
"integrity": "sha512-RsgGIP9e6HW5soEHIuo0CGVFpeTKe0hqjrgOLk92W0mjL6irzBlqmd5HcGMY4F5QiZryc2vMT1/3LvRhkUyf8g==", "integrity": "sha512-TGtvNIGHMEFFEuOSsRswou576GPZY39vXIsenn0B1Dqz9ACpyDtvAT9YdbG38srlPq7ZKwsP5x04LB43zZ6eAg==",
"requires": { "requires": {
"@firebase/component": "0.1.16", "@firebase/component": "0.1.16",
"@firebase/firestore-types": "1.12.0", "@firebase/firestore-types": "1.12.0",
@ -1383,20 +1383,20 @@
"integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==" "integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA=="
}, },
"@firebase/storage": { "@firebase/storage": {
"version": "0.3.38", "version": "0.3.39",
"resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.38.tgz", "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.39.tgz",
"integrity": "sha512-gWVQr5xqrU3cfhhwbAE+9iJ0XMvzbxWMvteKurn5cRNaGbmSob/O/ISOAvsQgPnk+K9zPMd2OwyzaTOl9PEMrw==", "integrity": "sha512-uTE8kROU/NMas+0i2oK0U9LuAlDzt+Cis0ErmYPlbCvmFqpFdyu3TtlO5MYNoxGLaBjEyxb18NJZai9lNMXFlQ==",
"requires": { "requires": {
"@firebase/component": "0.1.16", "@firebase/component": "0.1.16",
"@firebase/storage-types": "0.3.12", "@firebase/storage-types": "0.3.13",
"@firebase/util": "0.2.50", "@firebase/util": "0.2.50",
"tslib": "^1.11.1" "tslib": "^1.11.1"
} }
}, },
"@firebase/storage-types": { "@firebase/storage-types": {
"version": "0.3.12", "version": "0.3.13",
"resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.12.tgz", "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.13.tgz",
"integrity": "sha512-DDV6Fs6aYoGw3w/zZZTkqiipxihnsvHf6znbeZYjIIHit3tr1uLJdGPDPiCTfZcTGPpg2ux6ZmvNDvVgJdHALw==" "integrity": "sha512-pL7b8d5kMNCCL0w9hF7pr16POyKkb3imOW7w0qYrhBnbyJTdVxMWZhb0HxCFyQWC0w3EiIFFmxoz8NTFZDEFog=="
}, },
"@firebase/util": { "@firebase/util": {
"version": "0.2.50", "version": "0.2.50",
@ -8168,23 +8168,23 @@
} }
}, },
"firebase": { "firebase": {
"version": "7.16.0", "version": "7.16.1",
"resolved": "https://registry.npmjs.org/firebase/-/firebase-7.16.0.tgz", "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.16.1.tgz",
"integrity": "sha512-fYimLYkY0SS/jv4+ZnSp5u2+QdtwsTtLwPUfmWiKQnjqas1M5mqhQr3QB7vPQuSANhC3UJZZ5KPxLbFomMJLcA==", "integrity": "sha512-mcvFh617lWPYnx6SmwgtwmliY8P3XBi8pm0LDY4a8WPD049goCMgmIEpKkX4R3gZ2noz2rVrxSUfodENPpttLg==",
"requires": { "requires": {
"@firebase/analytics": "0.3.9", "@firebase/analytics": "0.3.9",
"@firebase/app": "0.6.8", "@firebase/app": "0.6.8",
"@firebase/app-types": "0.6.1", "@firebase/app-types": "0.6.1",
"@firebase/auth": "0.14.8", "@firebase/auth": "0.14.9",
"@firebase/database": "0.6.7", "@firebase/database": "0.6.8",
"@firebase/firestore": "1.16.0", "@firebase/firestore": "1.16.1",
"@firebase/functions": "0.4.48", "@firebase/functions": "0.4.48",
"@firebase/installations": "0.4.14", "@firebase/installations": "0.4.14",
"@firebase/messaging": "0.6.20", "@firebase/messaging": "0.6.20",
"@firebase/performance": "0.3.9", "@firebase/performance": "0.3.9",
"@firebase/polyfill": "0.3.36", "@firebase/polyfill": "0.3.36",
"@firebase/remote-config": "0.1.25", "@firebase/remote-config": "0.1.25",
"@firebase/storage": "0.3.38", "@firebase/storage": "0.3.39",
"@firebase/util": "0.2.50" "@firebase/util": "0.2.50"
} }
}, },
@ -15557,9 +15557,9 @@
"integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
}, },
"protobufjs": { "protobufjs": {
"version": "6.9.0", "version": "6.10.1",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.9.0.tgz", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz",
"integrity": "sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg==", "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==",
"requires": { "requires": {
"@protobufjs/aspromise": "^1.1.2", "@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2", "@protobufjs/base64": "^1.1.2",

View File

@ -24,7 +24,7 @@
"classnames": "^2.2.6", "classnames": "^2.2.6",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"downloadjs": "^1.4.7", "downloadjs": "^1.4.7",
"firebase": "^7.16.0", "firebase": "^7.16.1",
"formik": "^2.1.5", "formik": "^2.1.5",
"gatsby": "^2.24.3", "gatsby": "^2.24.3",
"gatsby-image": "^2.4.13", "gatsby-image": "^2.4.13",

View File

@ -10,6 +10,7 @@ import styles from './LeftNavbar.module.css';
const LeftNavbar = () => { const LeftNavbar = () => {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<div className={styles.container}> <div className={styles.container}>
<Tooltip title={t('builder.tooltips.backToDashboard')} placement="right"> <Tooltip title={t('builder.tooltips.backToDashboard')} placement="right">

View File

@ -1,6 +1,5 @@
import React, { Fragment, memo } from 'react'; import React, { Fragment, memo } from 'react';
import { Element } from 'react-scroll'; import { Element } from 'react-scroll';
import { useTranslation } from 'react-i18next';
import sections from '../../../data/leftSections'; import sections from '../../../data/leftSections';
import LeftNavbar from './LeftNavbar'; import LeftNavbar from './LeftNavbar';
import styles from './LeftSidebar.module.css'; import styles from './LeftSidebar.module.css';
@ -48,30 +47,26 @@ const getComponent = (id) => {
} }
}; };
const LeftSidebar = () => { const SidebarSection = ({ id, event }) => {
const { t } = useTranslation();
return (
<div className="flex">
<LeftNavbar />
<div id="LeftSidebar" className={styles.container}>
{sections.map(({ id, event }) => {
const Component = getComponent(id); const Component = getComponent(id);
return ( return (
<Fragment key={id}> <Fragment key={id}>
<Element name={id}> <Element name={id}>
<Component <Component id={id} event={event} />
id={id}
name={t(`builder.sections.${id}`)}
event={event}
/>
</Element> </Element>
<hr /> <hr />
</Fragment> </Fragment>
); );
})} };
const LeftSidebar = () => {
return (
<div className="flex">
<LeftNavbar />
<div id="LeftSidebar" className={styles.container}>
{sections.map(SidebarSection)}
</div> </div>
</div> </div>
); );

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Awards = ({ id, name, event }) => { const Awards = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
path={path} path={path}

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Certifications = ({ id, name, event }) => { const Certifications = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
path={path} path={path}

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Education = ({ id, name, event }) => { const Education = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
hasDate hasDate

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Hobbies = ({ id, name, event }) => { const Hobbies = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List path={path} event={event} titlePath="name" /> <List path={path} event={event} titlePath="name" />
</section> </section>

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Languages = ({ id, name, event }) => { const Languages = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List path={path} event={event} titlePath="name" subtitlePath="fluency" /> <List path={path} event={event} titlePath="name" subtitlePath="fluency" />
</section> </section>

View File

@ -3,12 +3,18 @@ import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input'; import Input from '../../../shared/Input';
const Objective = ({ name }) => { const Objective = ({ id }) => {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<Input <Input
type="textarea" type="textarea"

View File

@ -4,12 +4,18 @@ import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input'; import Input from '../../../shared/Input';
import PhotoUpload from '../../../shared/PhotoUpload'; import PhotoUpload from '../../../shared/PhotoUpload';
const Profile = ({ name }) => { const Profile = ({ id }) => {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<PhotoUpload /> <PhotoUpload />

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Projects = ({ id, name, event }) => { const Projects = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
path={path} path={path}

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const References = ({ id, name, event }) => { const References = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
path={path} path={path}

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Skills = ({ id, name, event }) => { const Skills = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List path={path} event={event} titlePath="name" subtitlePath="level" /> <List path={path} event={event} titlePath="name" subtitlePath="level" />
</section> </section>

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Social = ({ id, name, event }) => { const Social = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
path={path} path={path}

View File

@ -1,13 +1,22 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input';
import List from '../../lists/List'; import List from '../../lists/List';
const Work = ({ id, name, event }) => { const Work = ({ id, event }) => {
const path = `${id}.items`; const path = `${id}.items`;
const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input
name="heading"
label={t('builder.sections.heading')}
path={`${id}.heading`}
/>
<List <List
hasDate hasDate

View File

@ -1,5 +1,4 @@
import React, { Fragment, memo } from 'react'; import React, { Fragment, memo } from 'react';
import { useTranslation } from 'react-i18next';
import { Element } from 'react-scroll'; import { Element } from 'react-scroll';
import sections from '../../../data/rightSections'; import sections from '../../../data/rightSections';
import RightNavbar from './RightNavbar'; import RightNavbar from './RightNavbar';
@ -33,28 +32,24 @@ const getComponent = (id) => {
} }
}; };
const RightSidebar = () => { const SidebarSection = ({ id, event }) => {
const { t } = useTranslation();
return (
<div className="flex">
<div id="RightSidebar" className={styles.container}>
{sections.map(({ id, event }) => {
const Component = getComponent(id); const Component = getComponent(id);
return ( return (
<Fragment key={id}> <Fragment key={id}>
<Element name={id}> <Element name={id}>
<Component <Component id={id} event={event} />
id={id}
name={t(`builder.sections.${id}`)}
event={event}
/>
</Element> </Element>
<hr /> <hr />
</Fragment> </Fragment>
); );
})} };
const RightSidebar = () => {
return (
<div className="flex">
<div id="RightSidebar" className={styles.container}>
{sections.map(SidebarSection)}
</div> </div>
<RightNavbar /> <RightNavbar />

View File

@ -6,12 +6,12 @@ import Button from '../../../shared/Button';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import styles from './About.module.css'; import styles from './About.module.css';
const About = ({ name }) => { const About = ({ id }) => {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<div className={styles.container}> <div className={styles.container}>
<h5>{t('builder.about.donate.heading')}</h5> <h5>{t('builder.about.donate.heading')}</h5>

View File

@ -8,7 +8,7 @@ import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input'; import Input from '../../../shared/Input';
import styles from './Actions.module.css'; import styles from './Actions.module.css';
const Actions = ({ name }) => { const Actions = ({ id }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const [loadDemoText, setLoadDemoText] = useState( const [loadDemoText, setLoadDemoText] = useState(
@ -59,7 +59,7 @@ const Actions = ({ name }) => {
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<div className={styles.container}> <div className={styles.container}>
<h5>{t('builder.actions.import.heading')}</h5> <h5>{t('builder.actions.import.heading')}</h5>

View File

@ -8,7 +8,7 @@ import Heading from '../../../shared/Heading';
import Input from '../../../shared/Input'; import Input from '../../../shared/Input';
import styles from './Colors.module.css'; import styles from './Colors.module.css';
const Colors = ({ name }) => { const Colors = ({ id }) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const { t } = useTranslation(); const { t } = useTranslation();
@ -24,7 +24,7 @@ const Colors = ({ name }) => {
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<div className="mb-6 grid grid-cols-8 col-gap-2 row-gap-6"> <div className="mb-6 grid grid-cols-8 col-gap-2 row-gap-6">
{colorOptions.map((color) => ( {colorOptions.map((color) => (

View File

@ -6,7 +6,7 @@ import { handleKeyUp } from '../../../../utils';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import styles from './Fonts.module.css'; import styles from './Fonts.module.css';
const Fonts = ({ name }) => { const Fonts = ({ id }) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const font = useSelector('metadata.font'); const font = useSelector('metadata.font');
@ -22,7 +22,7 @@ const Fonts = ({ name }) => {
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<div className="grid grid-cols-2 gap-8"> <div className="grid grid-cols-2 gap-8">
{fontOptions.map((x) => ( {fontOptions.map((x) => (

View File

@ -7,7 +7,7 @@ import Button from '../../../shared/Button';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import styles from './Layout.module.css'; import styles from './Layout.module.css';
const Layout = ({ name }) => { const Layout = ({ id }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const [resetLayoutText, setResetLayoutText] = useState( const [resetLayoutText, setResetLayoutText] = useState(
t('builder.layout.reset'), t('builder.layout.reset'),
@ -64,7 +64,7 @@ const Layout = ({ name }) => {
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<p className="leading-loose"> <p className="leading-loose">
{t('builder.layout.text', { count: blocks.length })} {t('builder.layout.text', { count: blocks.length })}

View File

@ -11,7 +11,7 @@ import themeConfig from '../../../../data/themeConfig';
import { languages } from '../../../../i18n'; import { languages } from '../../../../i18n';
import { useDispatch } from '../../../../contexts/ResumeContext'; import { useDispatch } from '../../../../contexts/ResumeContext';
const Settings = ({ name }) => { const Settings = ({ id }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const [deleteText, setDeleteText] = useState( const [deleteText, setDeleteText] = useState(
@ -48,7 +48,7 @@ const Settings = ({ name }) => {
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<Input <Input
label={t('builder.settings.theme')} label={t('builder.settings.theme')}

View File

@ -8,7 +8,7 @@ import { handleKeyUp } from '../../../../utils';
import Heading from '../../../shared/Heading'; import Heading from '../../../shared/Heading';
import styles from './Templates.module.css'; import styles from './Templates.module.css';
const Templates = ({ name }) => { const Templates = ({ id }) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const template = useSelector('metadata.template'); const template = useSelector('metadata.template');
@ -71,7 +71,7 @@ const Templates = ({ name }) => {
return ( return (
<section> <section>
<Heading>{name}</Heading> <Heading id={id} />
<div className="grid grid-cols-2 gap-8"> <div className="grid grid-cols-2 gap-8">
{templateOptions.map((x) => ( {templateOptions.map((x) => (

View File

@ -1,7 +1,12 @@
import React, { memo } from 'react'; import React, { memo } from 'react';
import { useTranslation } from 'react-i18next';
import { useSelector } from '../../contexts/ResumeContext';
const Heading = ({ children }) => { const Heading = ({ id }) => {
return <h2 className="text-4xl focus:outline-none">{children}</h2>; const { t } = useTranslation();
const heading = useSelector(`${id}.heading`, t(`builder.sections.${id}`));
return <h2 className="text-4xl focus:outline-none">{heading}</h2>;
}; };
export default memo(Heading); export default memo(Heading);

View File

@ -1,17 +1,13 @@
import { Tooltip } from '@material-ui/core'; import { Tooltip } from '@material-ui/core';
import React, { memo, useEffect } from 'react'; import React, { memo } from 'react';
import { Link, scrollSpy } from 'react-scroll';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { Link } from 'react-scroll';
import styles from './SectionIcon.module.css'; import styles from './SectionIcon.module.css';
const SectionIcon = ({ section, containerId, tooltipPlacement }) => { const SectionIcon = ({ section, containerId, tooltipPlacement }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { id, icon: Icon } = section; const { id, icon: Icon } = section;
useEffect(() => {
scrollSpy.update();
}, []);
return ( return (
<Tooltip <Tooltip
title={t(`builder.sections.${id}`)} title={t(`builder.sections.${id}`)}

View File

@ -276,7 +276,7 @@
"visible": true "visible": true
}, },
"social": { "social": {
"heading": "Social", "heading": "Social Network",
"items": [ "items": [
{ {
"id": "a832b37d-f11d-4a80-8b4d-24796e571b17", "id": "a832b37d-f11d-4a80-8b4d-24796e571b17",

View File

@ -15,7 +15,7 @@
"email": "" "email": ""
}, },
"social": { "social": {
"heading": "Social", "heading": "Social Network",
"visible": true, "visible": true,
"items": [] "items": []
}, },

View File

@ -61,6 +61,7 @@
"loadDemoData": "Not sure where to begin? Try loading demo data to see what Reactive Resume has to offer." "loadDemoData": "Not sure where to begin? Try loading demo data to see what Reactive Resume has to offer."
}, },
"sections": { "sections": {
"heading": "Heading",
"profile": "Profile", "profile": "Profile",
"social": "Social Network", "social": "Social Network",
"objective": "Objective", "objective": "Objective",
@ -165,7 +166,7 @@
"translate": "If you would like to contribute by providing translations in your language, <1>please visit this link</1>.", "translate": "If you would like to contribute by providing translations in your language, <1>please visit this link</1>.",
"dangerZone": { "dangerZone": {
"heading": "Danger Zone", "heading": "Danger Zone",
"text": " If you would like to delete your account and erase all your resumes, its just one button away. Please be weary as this is an irreversible process.", "text": " If you would like to delete your account and erase all your resumes, its just one button away. Please be wary as this is an irreversible process.",
"button": "Delete Account" "button": "Delete Account"
} }
}, },

View File

@ -1,7 +1,7 @@
{ {
"shared": { "shared": {
"appName": "ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭ", "appName": "ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆ",
"shortDescription": "ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲ ಪುನರಾರಂಭ ಬಿಲ್ಡರ್.", "shortDescription": "ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲ ರೇಸುಮೆ ಬಿಲ್ಡರ್.",
"forms": { "forms": {
"name": "ಹೆಸರು", "name": "ಹೆಸರು",
"title": "ಶೀರ್ಷಿಕೆ", "title": "ಶೀರ್ಷಿಕೆ",
@ -43,8 +43,8 @@
}, },
"dashboard": { "dashboard": {
"title": "ಡ್ಯಾಶ್‌ಬೋರ್ಡ್", "title": "ಡ್ಯಾಶ್‌ಬೋರ್ಡ್",
"createResume": "ಪುನರಾರಂಭವನ್ನು ರಚಿಸಿ", "createResume": "ರೇಸುಮೆವನ್ನು ರಚಿಸಿ",
"editResume": "ಪುನರಾರಂಭವನ್ನು ಸಂಪಾದಿಸಿ", "editResume": "ರೇಸುಮೆವನ್ನು ಸಂಪಾದಿಸಿ",
"lastUpdated": "ಕೊನೆಯದಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ {{timestamp}}", "lastUpdated": "ಕೊನೆಯದಾಗಿ ನವೀಕರಿಸಲಾಗಿದೆ {{timestamp}}",
"toasts": { "toasts": {
"deleted": "{{name}} ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ" "deleted": "{{name}} ಅನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ"
@ -53,12 +53,12 @@
"duplicate": "ನಕಲು", "duplicate": "ನಕಲು",
"rename": "ಮರುಹೆಸರಿಸಿ" "rename": "ಮರುಹೆಸರಿಸಿ"
}, },
"helpText": "ನೀವು ಮೊದಲಿನಿಂದ ಹೊಸ ಪುನರಾರಂಭವನ್ನು ರಚಿಸಲಿದ್ದೀರಿ, ಆದರೆ ಮೊದಲು, ಅದಕ್ಕೆ ಹೆಸರನ್ನು ನೀಡೋಣ. ಇದು ನೀವು ಅರ್ಜಿ ಸಲ್ಲಿಸಲು ಬಯಸುವ ಪಾತ್ರದ ಹೆಸರಾಗಿರಬಹುದು ಅಥವಾ ನೀವು ಸ್ನೇಹಿತರಿಗಾಗಿ ಪುನರಾರಂಭವನ್ನು ಮಾಡುತ್ತಿದ್ದರೆ, ನೀವು ಅದನ್ನು ಅಲೆಕ್ಸ್ ಪುನರಾರಂಭ ಎಂದು ಕರೆಯಬಹುದು." "helpText": "ನೀವು ಮೊದಲಿನಿಂದ ಹೊಸ ರೇಸುಮೆವನ್ನು ರಚಿಸಲಿದ್ದೀರಿ, ಆದರೆ ಮೊದಲು, ಅದಕ್ಕೆ ಹೆಸರನ್ನು ನೀಡೋಣ. ಇದು ನೀವು ಅರ್ಜಿ ಸಲ್ಲಿಸಲು ಬಯಸುವ ಪಾತ್ರದ ಹೆಸರಾಗಿರಬಹುದು ಅಥವಾ ನೀವು ಸ್ನೇಹಿತರಿಗಾಗಿ ರೇಸುಮೆವನ್ನು ಮಾಡುತ್ತಿದ್ದರೆ, ನೀವು ಅದನ್ನು ಅಲೆಕ್ಸ್ ರೇಸುಮೆ ಎಂದು ಕರೆಯಬಹುದು."
}, },
"builder": { "builder": {
"toasts": { "toasts": {
"doesNotExist": "ನೀವು ಹುಡುಕುತ್ತಿದ್ದ ಪುನರಾರಂಭವು ಇನ್ನು ಮುಂದೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ... ಅಥವಾ ಬಹುಶಃ ಅದು ಎಂದಿಗೂ ಆಗಲಿಲ್ಲವೇ?", "doesNotExist": "ನೀವು ಹುಡುಕುತ್ತಿದ್ದ ರೇಸುಮೆವು ಇನ್ನು ಮುಂದೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ... ಅಥವಾ ಬಹುಶಃ ಅದು ಎಂದಿಗೂ ಆಗಲಿಲ್ಲವೇ?",
"loadDemoData": "ಎಲ್ಲಿಂದ ಪ್ರಾರಂಭಿಸಬೇಕು ಎಂದು ಖಚಿತವಾಗಿಲ್ಲವೇ? ರಿಯಾಕ್ಟಿವ್ ಪುನರಾರಂಭವು ಏನು ನೀಡುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಡೆಮೊ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ." "loadDemoData": "ಎಲ್ಲಿಂದ ಪ್ರಾರಂಭಿಸಬೇಕು ಎಂದು ಖಚಿತವಾಗಿಲ್ಲವೇ? ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆವು ಏನು ನೀಡುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಡೆಮೊ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ."
}, },
"sections": { "sections": {
"profile": "ಪ್ರೊಫೈಲ್", "profile": "ಪ್ರೊಫೈಲ್",
@ -86,7 +86,8 @@
"fonts": "ಫಾಂಟ್‌ಗಳು", "fonts": "ಫಾಂಟ್‌ಗಳು",
"actions": "ಕ್ರಿಯೆಗಳು", "actions": "ಕ್ರಿಯೆಗಳು",
"settings": "ಸಂಯೋಜನೆಗಳು", "settings": "ಸಂಯೋಜನೆಗಳು",
"about": "ಬಗ್ಗೆ" "about": "ಬಗ್ಗೆ",
"heading": "ಶಿರೋನಾಮೆ"
}, },
"profile": { "profile": {
"firstName": "ಮೊದಲ ಹೆಸರು", "firstName": "ಮೊದಲ ಹೆಸರು",
@ -97,7 +98,7 @@
"city": "ನಗರ", "city": "ನಗರ",
"pincode": "ಪಿನ್ಕೋಡ್" "pincode": "ಪಿನ್ಕೋಡ್"
}, },
"photograph": "" "photograph": "ಫೋಟೋ"
}, },
"social": { "social": {
"network": "ನೆಟ್‌ವರ್ಕ್", "network": "ನೆಟ್‌ವರ್ಕ್",
@ -137,21 +138,21 @@
}, },
"actions": { "actions": {
"import": { "import": {
"heading": "ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ಆಮದು ಮಾಡಿ", "heading": "ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ಆಮದು ಮಾಡಿ",
"text": "ನಿಮ್ಮ ಪುನರಾರಂಭಕ್ಕಾಗಿ ಹೆಚ್ಚಿನ ಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಭರ್ತಿ ಮಾಡಲು ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು JSON ಪುನರಾರಂಭ ಅಥವಾ ನಿಮ್ಮ ಲಿಂಕ್ಡ್‌ಇನ್‌ನಂತಹ ವಿವಿಧ ಮೂಲಗಳಿಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು.", "text": "ನಿಮ್ಮ ರೇಸುಮೆಕ್ಕಾಗಿ ಹೆಚ್ಚಿನ ಡೇಟಾವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಭರ್ತಿ ಮಾಡಲು ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು JSON ರೇಸುಮೆ ಅಥವಾ ನಿಮ್ಮ ಲಿಂಕ್ಡ್‌ಇನ್‌ನಂತಹ ವಿವಿಧ ಮೂಲಗಳಿಂದ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು.",
"button": "ಆಮದು" "button": "ಆಮದು"
}, },
"export": { "export": {
"heading": "ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ರಫ್ತು ಮಾಡಿ", "heading": "ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ರಫ್ತು ಮಾಡಿ",
"text": "ನೇಮಕಾತಿಗಾರರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ಪಿಡಿಎಫ್ ಆಗಿ ರಫ್ತು ಮಾಡಿ ಅಥವಾ ಇನ್ನೊಂದು ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಮರಳಿ ಆಮದು ಮಾಡಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ.", "text": "ನೇಮಕಾತಿಗಾರರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ಪಿಡಿಎಫ್ ಆಗಿ ರಫ್ತು ಮಾಡಿ ಅಥವಾ ಇನ್ನೊಂದು ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಮರಳಿ ಆಮದು ಮಾಡಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ.",
"button": "ರಫ್ತು ಮಾಡಿ" "button": "ರಫ್ತು ಮಾಡಿ"
}, },
"share": { "share": {
"heading": "ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ಹಂಚಿಕೊಳ್ಳಿ", "heading": "ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ಹಂಚಿಕೊಳ್ಳಿ",
"text": "ನೀವು ಅದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಆರಿಸಿದರೆ ಕೆಳಗಿನ ಲಿಂಕ್ ಅನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಪ್ರವೇಶಿಸಬಹುದು ಮತ್ತು ವೀಕ್ಷಕರು ನಿಮ್ಮ ಪುನರಾರಂಭದ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ನೋಡುತ್ತಾರೆ." "text": "ನೀವು ಅದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಆರಿಸಿದರೆ ಕೆಳಗಿನ ಲಿಂಕ್ ಅನ್ನು ಸಾರ್ವಜನಿಕವಾಗಿ ಪ್ರವೇಶಿಸಬಹುದು ಮತ್ತು ವೀಕ್ಷಕರು ನಿಮ್ಮ ರೇಸುಮೆದ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಯನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ನೋಡುತ್ತಾರೆ."
}, },
"loadDemoData": { "loadDemoData": {
"text": "ಹೊಸ ಖಾಲಿ ಪುಟದೊಂದಿಗೆ ಏನು ಮಾಡಬೇಕೆಂದು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲವೇ? ಪುನರಾರಂಭವು ಹೇಗೆ ಕಾಣುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಕೆಲವು ಡೆಮೊ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ ಮತ್ತು ನೀವು ಅಲ್ಲಿಂದ ಸಂಪಾದನೆಯನ್ನು ಪ್ರಾರಭಿಸಬಹ<E0B2AC><E0B2B9>ದು.", "text": "ಹೊಸ ಖಾಲಿ ಪುಟದೊಂದಿಗೆ ಏನು ಮಾಡಬೇಕೆಂದು ಸ್ಪಷ್ಟವಾಗಿಲ್ಲವೇ? ರೇಸುಮೆ ಹೇಗೆ ಕಾಣುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಕೆಲವು ಡೆಮೊ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ ಮತ್ತು ನೀವು ಅಲ್ಲಿಂದ ಸಂಪಾದನೆಯನ್ನು ಪ್ರಾರಭಿಸಬಹ<E0B2AC><E0B2B9>ದು.",
"button": "ಡೆಮೊ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ" "button": "ಡೆಮೊ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಿ"
}, },
"resetEverything": { "resetEverything": {
@ -171,25 +172,25 @@
}, },
"about": { "about": {
"donate": { "donate": {
"heading": "ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭಕ್ಕೆ ದಾನ ಮಾಡಿ", "heading": "ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆಗೆ ದಾನ ಮಾಡಿ",
"text": "ನಾನು ಏನು ಮಾಡಬಹುದೆಂಬುದನ್ನು ಮಾಡಲು ನಾನು ಪ್ರಯತ್ನಿಸುತ್ತೇನೆ, ಆದರೆ ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಸಹಾಯಕವಾಗಿದೆಯೆಂದು ಕಂಡುಕೊಂಡರೆ ಅಥವಾ ಅವರ ಮೊದಲ ಕೆಲಸಕ್ಕಾಗಿ ಈ ಯೋಜನೆಯನ್ನು ಅವಲಂಬಿಸಿರುವ ಇತರರಿಗಿಂತ ನೀವು ಉತ್ತಮ ಸ್ಥಾನದಲ್ಲಿದ್ದರೆ, <1> ದಯವಿಟ್ಟು ಸಹಾಯ ಮಾಡಲು $ 5 ರಷ್ಟನ್ನು ದಾನ ಮಾಡುವುದನ್ನು ಪರಿಗಣಿಸಿ ಯೋಜನೆ ಜೀವಂತವಾಗಿದೆ </1> :)", "text": "ನಾನು ಏನು ಮಾಡಬಹುದೆಂಬುದನ್ನು ಮಾಡಲು ನಾನು ಪ್ರಯತ್ನಿಸುತ್ತೇನೆ, ಆದರೆ ನೀವು ಅಪ್ಲಿಕೇಶನ್ ಸಹಾಯಕವಾಗಿದೆಯೆಂದು ಕಂಡುಕೊಂಡರೆ ಅಥವಾ ಅವರ ಮೊದಲ ಕೆಲಸಕ್ಕಾಗಿ ಈ ಯೋಜನೆಯನ್ನು ಅವಲಂಬಿಸಿರುವ ಇತರರಿಗಿಂತ ನೀವು ಉತ್ತಮ ಸ್ಥಾನದಲ್ಲಿದ್ದರೆ, <1> ದಯವಿಟ್ಟು ಸಹಾಯ ಮಾಡಲು $ 5 ರಷ್ಟನ್ನು ದಾನ ಮಾಡುವುದನ್ನು ಪರಿಗಣಿಸಿ ಯೋಜನೆ ಜೀವಂತವಾಗಿದೆ </1> :)",
"button": "ನನಗೆ ಕಾಫಿ ಖರೀದಿಸಿ!" "button": "ನನಗೆ ಕಾಫಿ ಖರೀದಿಸಿ!"
}, },
"bugFeature": { "bugFeature": {
"heading": "ದೋಷ? ವೈಶಿಷ್ಟ್ಯ ವಿನಂತಿ?", "heading": "ದೋಷ? ವೈಶಿಷ್ಟ್ಯ ವಿನಂತಿ?",
"text": "ಪುನರಾರಂಭವನ್ನು ಮಾಡುವುದರಿಂದ ನಿಮ್ಮ ಪ್ರಗತಿಯನ್ನು ಏನಾದರೂ ತಡೆಯುತ್ತೀರಾ? ತೊರೆಯದಂತಹ ತೊಂದರೆ ದೋಷ ಕಂಡುಬಂದಿದೆ? ಕೆಳಗಿನ ಕ್ರಿಯೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಗಿಟ್‌ಹಬ್ ಸಮಸ್ಯೆಗಳ ವಿಭಾಗದಲ್ಲಿ ಇದರ ಬಗ್ಗೆ ಮಾತನಾಡಿ.", "text": "ರೇಸುಮೆವನ್ನು ಮಾಡುವುದರಿಂದ ನಿಮ್ಮ ಪ್ರಗತಿಯನ್ನು ಏನಾದರೂ ತಡೆಯುತ್ತೀರಾ? ತೊರೆಯದಂತಹ ತೊಂದರೆ ದೋಷ ಕಂಡುಬಂದಿದೆ? ಕೆಳಗಿನ ಕ್ರಿಯೆಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಗಿಟ್‌ಹಬ್ ಸಮಸ್ಯೆಗಳ ವಿಭಾಗದಲ್ಲಿ ಇದರ ಬಗ್ಗೆ ಮಾತನಾಡಿ.",
"button": "ಸಮಸ್ಯೆಯನ್ನು ಹೆಚ್ಚಿಸಿ" "button": "ಸಮಸ್ಯೆಯನ್ನು ಹೆಚ್ಚಿಸಿ"
}, },
"appreciate": { "appreciate": {
"heading": "ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭವನ್ನು ಇಷ್ಟಪಟ್ಟಿದ್ದೀರಾ?", "heading": "ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆವನ್ನು ಇಷ್ಟಪಟ್ಟಿದ್ದೀರಾ?",
"text": "ಈ ಅಪ್ಲಿಕೇಶನ್ ಜನರಿಗೆ ಹೇಗೆ ಸಹಾಯ ಮಾಡಿದೆ ಎಂಬ ಕಥೆಗಳನ್ನು ಕೇಳಿದಾಗ ನಾನು ಎಂದಿಗೂ ಸುಸ್ತಾಗುವುದಿಲ್ಲ, ಮತ್ತು ಅದು ನಿಮಗೆ ಸಹಾಯ ಮಾಡಿದರೆ ಅಥವಾ ರಿಯಾಕ್ಟಿವ್ ಪುನರಾರಂಭವನ್ನು ಅದ್ಭುತ ಸಾಧನವೆಂದು ನೀವು ಕಂಡುಕೊಂಡಿದ್ದರೆ, ನನಗೆ ತಿಳಿಸಿ. ನನ್ನ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ನೀವು ನನ್ನನ್ನು ಸಂಪರ್ಕಿಸಬಹುದು." "text": "ಈ ಅಪ್ಲಿಕೇಶನ್ ಜನರಿಗೆ ಹೇಗೆ ಸಹಾಯ ಮಾಡಿದೆ ಎಂಬ ಕಥೆಗಳನ್ನು ಕೇಳಿದಾಗ ನಾನು ಎಂದಿಗೂ ಸುಸ್ತಾಗುವುದಿಲ್ಲ, ಮತ್ತು ಅದು ನಿಮಗೆ ಸಹಾಯ ಮಾಡಿದರೆ ಅಥವಾ ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆವನ್ನು ಅದ್ಭುತ ಸಾಧನವೆಂದು ನೀವು ಕಂಡುಕೊಂಡಿದ್ದರೆ, ನನಗೆ ತಿಳಿಸಿ. ನನ್ನ ವೆಬ್‌ಸೈಟ್‌ನಲ್ಲಿ ನೀವು ನನ್ನನ್ನು ಸಂಪರ್ಕಿಸಬಹುದು."
}, },
"sourceCode": { "sourceCode": {
"heading": "ಮೂಲ ಕೋಡ್", "heading": "ಮೂಲ ಕೋಡ್",
"text": "ಯೋಜನೆಯನ್ನು ಅದರ ಮೂಲದಿಂದ ಚಲಾಯಿಸಲು ಬಯಸುವಿರಾ? ಈ ಯೋಜನೆಯ ಮುಕ್ತ ಮೂಲ ಅಭಿವೃದ್ಧಿಗೆ ಕೊಡುಗೆ ನೀಡಲು ನೀವು ಸಿದ್ಧರಿದ್ದೀರಾ? ಕೆಳಗಿನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ.", "text": "ಯೋಜನೆಯನ್ನು ಅದರ ಮೂಲದಿಂದ ಚಲಾಯಿಸಲು ಬಯಸುವಿರಾ? ಈ ಯೋಜನೆಯ ಮುಕ್ತ ಮೂಲ ಅಭಿವೃದ್ಧಿಗೆ ಕೊಡುಗೆ ನೀಡಲು ನೀವು ಸಿದ್ಧರಿದ್ದೀರಾ? ಕೆಳಗಿನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ.",
"button": "ಗಿಟ್‌ಹಬ್ ರೆಪೊ" "button": "ಗಿಟ್‌ಹಬ್ ರೆಪೊ"
}, },
"footer": "<1> ಅಮೃತ್ ಪಿಳ್ಳೈ ಅವರಿಂದ ಪ್ರೀತಿಯಿಂದ ಮಾಡಲ್ಪಟ್ಟಿದೆ </1>" "footer": "<1>ಅಮೃತ್ ಪಿಳ್ಳೈ</1> ಅವರಿಂದ ಪ್ರೀತಿಯಿಂದ ಮಾಡಲ್ಪಟ್ಟಿದೆ"
}, },
"tooltips": { "tooltips": {
"uploadPhotograph": "Ograph ಾಯಾಚಿತ್ರವನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ", "uploadPhotograph": "Ograph ಾಯಾಚಿತ್ರವನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ",
@ -201,8 +202,8 @@
"auth": { "auth": {
"whoAreYou": "ನೀವು ಯಾರು?", "whoAreYou": "ನೀವು ಯಾರು?",
"welcome": "ಸ್ವಾಗತ, {{name}}!", "welcome": "ಸ್ವಾಗತ, {{name}}!",
"loggedOutText": "ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭವು ನೀವು ಯಾರೆಂದು ತಿಳಿದುಕೊಳ್ಳಬೇಕು ಆದ್ದರಿಂದ ಅದು ನಿಮ್ಮನ್ನು ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ದೃ ate ೀಕರಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಮಾತ್ರ ತೋರಿಸುತ್ತದೆ. ನೀವು ಪ್ರವೇಶಿಸಿದ ನಂತರ, ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ನಿರ್ಮಿಸಲು, ಹೊಸ ಕೌಶಲ್ಯಗಳನ್ನು ಸೇರಿಸಲು ಅದನ್ನು ಸಂಪಾದಿಸಲು ಅಥವಾ ಅದನ್ನು ಜಗತ್ತಿನೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನೀವು ಪ್ರಾರಂಭಿಸಬಹುದು!", "loggedOutText": "ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆ ನೀವು ಯಾರೆಂದು ತಿಳಿದುಕೊಳ್ಳಬೇಕು ಆದ್ದರಿಂದ ಅದು ನಿಮ್ಮನ್ನು ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ದೃ ate ೀಕರಿಸುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ಮಾತ್ರ ತೋರಿಸುತ್ತದೆ. ನೀವು ಪ್ರವೇಶಿಸಿದ ನಂತರ, ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ನಿರ್ಮಿಸಲು, ಹೊಸ ಕೌಶಲ್ಯಗಳನ್ನು ಸೇರಿಸಲು ಅದನ್ನು ಸಂಪಾದಿಸಲು ಅಥವಾ ಅದನ್ನು ಜಗತ್ತಿನೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನೀವು ಪ್ರಾರಂಭಿಸಬಹುದು!",
"loggedInText": "ಅದ್ಭುತ. ಈಗ ನೀವು ನಿಮ್ಮನ್ನು ದೃ ated ೀಕರಿಸಿದ್ದೀರಿ, ನೀವು ಇಲ್ಲಿರುವ ನಿಜವಾದ ಕಾರಣವನ್ನು ನಾವು ಪಡೆಯಬಹುದು. ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಹೋಗಿ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ!", "loggedInText": "ಅದ್ಭುತ. ಈಗ ನೀವು ನಿಮ್ಮನ್ನು ದೃ ated ೀಕರಿಸಿದ್ದೀರಿ, ನೀವು ಇಲ್ಲಿರುವ ನಿಜವಾದ ಕಾರಣವನ್ನು ನಾವು ಪಡೆಯಬಹುದು. ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಹೋಗಿ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ!",
"buttons": { "buttons": {
"google": "Google ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ", "google": "Google ನೊಂದಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ",
"anonymous": "ಅನಾಮಧೇಯವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಿ" "anonymous": "ಅನಾಮಧೇಯವಾಗಿ ಸೈನ್ ಇನ್ ಮಾಡಿ"
@ -211,35 +212,35 @@
"import": { "import": {
"button": "ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ", "button": "ಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ",
"reactiveResume": { "reactiveResume": {
"heading": "ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭದಿಂದ ಆಮದು ಮಾಡಿ", "heading": "ಪರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆದಿಂದ ಆಮದು ಮಾಡಿ",
"text": "ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್ ತನ್ನದೇ ಆದ ಸ್ಕೀಮಾ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿದ್ದು ಅದು ನೀಡುವ ಎಲ್ಲಾ ಗ್ರಾಹಕೀಯಗೊಳಿಸಬಹುದಾದ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೆಚ್ಚು ಮಾಡುತ್ತದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್‌ನೊಂದಿಗೆ ಮಾಡಿದ ನಿಮ್ಮ ಪುನರಾರಂಭದ ಬ್ಯಾಕಪ್ ಅನ್ನು ಆಮದು ಮಾಡಲು ನೀವು ಬಯಸಿದರೆ, ಕೆಳಗಿನ ಬಟನ್ ಬಳಸಿ ಫೈಲ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ." "text": "ರಿಯಾಕ್ಟಿವ್ ರೆಸ್ಯೂಮ್ ತನ್ನದೇ ಆದ ಸ್ಕೀಮಾ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿದ್ದು ಅದು ನೀಡುವ ಎಲ್ಲಾ ಗ್ರಾಹಕೀಯಗೊಳಿಸಬಹುದಾದ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಹೆಚ್ಚು ಮಾಡುತ್ತದೆ. ಈ ಅಪ್ಲಿಕೇಶನ್‌ನೊಂದಿಗೆ ಮಾಡಿದ ನಿಮ್ಮ ರೇಸುಮೆದ ಬ್ಯಾಕಪ್ ಅನ್ನು ಆಮದು ಮಾಡಲು ನೀವು ಬಯಸಿದರೆ, ಕೆಳಗಿನ ಬಟನ್ ಬಳಸಿ ಫೈಲ್ ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿ."
}, },
"jsonResume": { "jsonResume": {
"heading": "JSON ಪುನರಾರಂಭದಿಂದ ಆಮದು ಮಾಡಿ", "heading": "JSON ರೇಸುಮೆದಿಂದ ಆಮದು ಮಾಡಿ",
"text": "JSON ಪುನರಾರಂಭವು ಪುನರಾರಂಭ ಸ್ಕೀಮಾ ರಚನೆಗೆ ಮುಕ್ತ ಮಾನದಂಡವಾಗಿದೆ. ಈ ಸ್ವರೂಪದಲ್ಲಿ ತಮ್ಮ ಪುನರಾರಂಭವನ್ನು ಸಿದ್ಧಪಡಿಸಿದ ಅನೇಕ ಉತ್ಸಾಹಿಗಳಲ್ಲಿ ನೀವು ಒಬ್ಬರಾಗಿದ್ದರೆ, ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಲು ಕೇವಲ ಒಂದು ಕ್ಲಿಕ್ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ." "text": "JSON ರೇಸುಮೆವು ಸ್ಕೀಮಾ ರಚನೆಗೆ ಮುಕ್ತ ಮಾನದಂಡವಾಗಿದೆ. ಈ ಸ್ವರೂಪದಲ್ಲಿ ತಮ್ಮ ರೇಸುಮೆವನ್ನು ಸಿದ್ಧಪಡಿಸಿದ ಅನೇಕ ಉತ್ಸಾಹಿಗಳಲ್ಲಿ ನೀವು ಒಬ್ಬರಾಗಿದ್ದರೆ, ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆದೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಲು ಕೇವಲ ಒಂದು ಕ್ಲಿಕ್ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ."
}, },
"linkedIn": { "linkedIn": {
"heading": "ಲಿಂಕ್ಡ್ಇನ<EFBFBD><EFBFBD>ಿಂ ಆಮದು ಮಾಡಿ", "heading": "ಲಿಂಕ್ಡ್ ಇನಿಂ ಆಮದು ಮಾಡಿ",
"text": "ಕೆಳಗಿನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಸೂಕ್ತವಾದ ಫೈಲ್ ಅನ್ನು ಆರಿಸುವ ಮೂಲಕ ರಿಯಾಕ್ಟಿವ್ ಪುನರಾರಂಭದಿಂದ ರಫ್ತು ಮಾಡಲಾದ JSON ಅನ್ನು ನೀವು ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು." "text": "ಕೆಳಗಿನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ ಮತ್ತು ಸೂಕ್ತವಾದ ಫೈಲ್ ಅನ್ನು ಆರಿಸುವ ಮೂಲಕ ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆದಿಂದ ರಫ್ತು ಮಾಡಲಾದ JSON ಅನ್ನು ನೀವು ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು."
} }
}, },
"export": { "export": {
"printDialog": { "printDialog": {
"heading": "ಬ್ರೌಸರ್‌ನ ಮುದ್ರಣ ಸಂವಾದವನ್ನು ಬಳಸಿ", "heading": "ಬ್ರೌಸರ್‌ನ ಮುದ್ರಣ ಸಂವಾದವನ್ನು ಬಳಸಿ",
"text": "ತ್ವರಿತ ಪರಿಹಾರವನ್ನು ಬಯಸುವ ನಿಮ್ಮಲ್ಲಿ, ನಿಮ್ಮ ಬ್ರೌಸರ್‌ಗಿಂತ ಹೆಚ್ಚಿನದನ್ನು ನೀವು ನೋಡಬೇಕಾಗಿಲ್ಲ. ನೀವು ಮಾಡಬೇಕಾಗಿರುವುದು Ctrl / Cmd + P ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಮುದ್ರಣ ಸಂವಾದವನ್ನು ತೆರೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ಪುನರಾರಂಭವನ್ನು ತಕ್ಷಣ ಮುದ್ರಿಸಿ.", "text": "ತ್ವರಿತ ಪರಿಹಾರವನ್ನು ಬಯಸುವ ನಿಮ್ಮಲ್ಲಿ, ನಿಮ್ಮ ಬ್ರೌಸರ್‌ಗಿಂತ ಹೆಚ್ಚಿನದನ್ನು ನೀವು ನೋಡಬೇಕಾಗಿಲ್ಲ. ನೀವು ಮಾಡಬೇಕಾಗಿರುವುದು Ctrl / Cmd + P ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ನಿಮ್ಮ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಮುದ್ರಣ ಸಂವಾದವನ್ನು ತೆರೆಯಿರಿ ಮತ್ತು ನಿಮ್ಮ ರೇಸುಮೆವನ್ನು ತಕ್ಷಣ ಮುದ್ರಿಸಿ.",
"button": "ಪುನರಾರಂಭವನ್ನು ಮುದ್ರಿಸಿ" "button": "ರೇಸುಮೆವನ್ನು ಮುದ್ರಿಸಿ"
}, },
"downloadPDF": { "downloadPDF": {
"heading": "ಪಿಡಿಎಫ್ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ", "heading": "ಪಿಡಿಎಫ್ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ",
"text": "ಈ ಆಯ್ಕೆಗಳು ಒಂದೇ ಪುಟವನ್ನು ಮುದ್ರಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ನಿಮ್ಮ ಪುನರಾರಂಭದ ನಿರ್ಬಂಧಿಸದ ಆವೃತ್ತಿ, ಬಹಳಷ್ಟು ವಿಷಯವನ್ನು ಹೊಂದಿರುವವರಿಗೆ ಇದು ಸೂಕ್ತವಾಗಿದೆ. ಪರ್ಯಾಯವಾಗಿ, ನಿಮ್ಮ ಪುನರಾರಂಭದ ಬಹು-ಪುಟ ಆವೃತ್ತಿಯನ್ನು ನೀವು ಕೇವಲ ಒಂದು ಕ್ಲಿಕ್‌ನಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು.", "text": "ಈ ಆಯ್ಕೆಗಳು ಒಂದೇ ಪುಟವನ್ನು ಮುದ್ರಿಸಲು ನಿಮಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ, ನಿಮ್ಮ ರೇಸುಮೆದ ನಿರ್ಬಂಧಿಸದ ಆವೃತ್ತಿ, ಬಹಳಷ್ಟು ವಿಷಯವನ್ನು ಹೊಂದಿರುವವರಿಗೆ ಇದು ಸೂಕ್ತವಾಗಿದೆ. ಪರ್ಯಾಯವಾಗಿ, ನಿಮ್ಮ ರೇಸುಮೆದ ಬಹು-ಪುಟ ಆವೃತ್ತಿಯನ್ನು ನೀವು ಕೇವಲ ಒಂದು ಕ್ಲಿಕ್‌ನಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬಹುದು.",
"buttons": { "buttons": {
"single": "ಏಕ ಪುಟ ಪುನರಾರಂಭ", "single": "ಏಕ ಪುಟ ರೇಸುಮೆ",
"multi": "ಬಹು ಪುಟ ಪುನರಾರಂಭ" "multi": "ಬಹು ಪುಟ ರೇಸುಮೆ"
} }
}, },
"jsonFormat": { "jsonFormat": {
"heading": "JSON ಸ್ವರೂಪಕ್ಕೆ ರಫ್ತು ಮಾಡಿ", "heading": "JSON ಸ್ವರೂಪಕ್ಕೆ ರಫ್ತು ಮಾಡಿ",
"text": "ಸುರಕ್ಷಿತವಾಗಿಡಲು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನೀವು JSON ಸ್ವರೂಪಕ್ಕೆ ರಫ್ತು ಮಾಡಬಹುದು, ಇದರಿಂದಾಗಿ ನೀವು ಪುನರಾರಂಭವನ್ನು ಸಂಪಾದಿಸಲು ಅಥವಾ ಉತ್ಪಾದಿಸಲು ಬಯಸಿದಾಗಲೆಲ್ಲಾ ಅದನ್ನು ಸುಲಭವಾಗಿ ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕ ಪುನರಾರಂಭಕ್ಕೆ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು.", "text": "ಸುರಕ್ಷಿತವಾಗಿಡಲು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನೀವು JSON ಸ್ವರೂಪಕ್ಕೆ ರಫ್ತು ಮಾಡಬಹುದು, ಇದರಿಂದಾಗಿ ನೀವು ರೇಸುಮೆವನ್ನು ಸಂಪಾದಿಸಲು ಅಥವಾ ಉತ್ಪಾದಿಸಲು ಬಯಸಿದಾಗಲೆಲ್ಲಾ ಅದನ್ನು ಸುಲಭವಾಗಿ ರಿಯಾಕ್ಟಿವ್ ರೇಸುಮೆಗೆ ಆಮದು ಮಾಡಿಕೊಳ್ಳಬಹುದು.",
"button": "JSON ರಫ್ತು ಮಾಡಿ" "button": "JSON ರಫ್ತು ಮಾಡಿ"
} }
} }

View File

@ -75,7 +75,7 @@ const Castform = ({ data }) => {
<Profile /> <Profile />
<div> <div>
<HeadingD>Profile</HeadingD> <HeadingD>{data.profile.heading}</HeadingD>
<ContactC /> <ContactC />
</div> </div>