Addition of Hindi Language

This commit is contained in:
Amruth Pillai
2020-03-30 20:56:06 +05:30
parent 6a9999d633
commit a5e8c6dcc1
6 changed files with 72 additions and 52 deletions

View File

@ -1,4 +1,5 @@
import React, { useEffect, useContext, Suspense } from 'react'; import React, { useEffect, useContext, Suspense } from 'react';
import { useTranslation } from 'react-i18next';
import AppContext from '../../context/AppContext'; import AppContext from '../../context/AppContext';
import LeftSidebar from '../LeftSidebar/LeftSidebar'; import LeftSidebar from '../LeftSidebar/LeftSidebar';
@ -7,14 +8,16 @@ import RightSidebar from '../RightSidebar/RightSidebar';
import templates from '../../templates'; import templates from '../../templates';
const App = () => { const App = () => {
const { i18n } = useTranslation();
const context = useContext(AppContext); const context = useContext(AppContext);
const { state, dispatch } = context; const { state, dispatch } = context;
const { theme } = state; const { theme, settings } = state;
useEffect(() => { useEffect(() => {
i18n.changeLanguage(settings.language);
const storedState = JSON.parse(localStorage.getItem('state')); const storedState = JSON.parse(localStorage.getItem('state'));
dispatch({ type: 'import_data', payload: storedState }); dispatch({ type: 'import_data', payload: storedState });
}, [dispatch]); }, [dispatch, i18n, settings.language]);
return ( return (
<Suspense fallback="Loading..."> <Suspense fallback="Loading...">

View File

@ -19,18 +19,18 @@ const LeftSidebar = () => {
const { data } = state; const { data } = state;
const tabs = [ const tabs = [
'Profile', { key: 'profile', name: data.profile.heading },
'Objective', { key: 'objective', name: data.objective.heading },
'Work Experience', { key: 'work', name: data.work.heading },
'Education', { key: 'education', name: data.education.heading },
'Awards', { key: 'awards', name: data.awards.heading },
'Certifications', { key: 'certifications', name: data.certifications.heading },
'Skills', { key: 'skills', name: data.skills.heading },
'Languages', { key: 'languages', name: data.languages.heading },
'References', { key: 'references', name: data.references.heading },
'Extras', { key: 'extras', name: data.extras.heading },
]; ];
const [currentTab, setCurrentTab] = useState('Profile'); const [currentTab, setCurrentTab] = useState(tabs[0].key);
const onChange = (key, value) => { const onChange = (key, value) => {
dispatch({ dispatch({
type: 'on_input', type: 'on_input',
@ -45,25 +45,25 @@ const LeftSidebar = () => {
const renderTabs = () => { const renderTabs = () => {
switch (currentTab) { switch (currentTab) {
case 'Profile': case tabs[0].key:
return <ProfileTab data={data} onChange={onChange} />; return <ProfileTab data={data} onChange={onChange} />;
case 'Objective': case tabs[1].key:
return <ObjectiveTab data={data} onChange={onChange} />; return <ObjectiveTab data={data} onChange={onChange} />;
case 'Work Experience': case tabs[2].key:
return <WorkTab data={data} onChange={onChange} />; return <WorkTab data={data} onChange={onChange} />;
case 'Education': case tabs[3].key:
return <EducationTab data={data} onChange={onChange} />; return <EducationTab data={data} onChange={onChange} />;
case 'Awards': case tabs[4].key:
return <AwardsTab data={data} onChange={onChange} />; return <AwardsTab data={data} onChange={onChange} />;
case 'Certifications': case tabs[5].key:
return <CertificationsTab data={data} onChange={onChange} />; return <CertificationsTab data={data} onChange={onChange} />;
case 'Skills': case tabs[6].key:
return <SkillsTab data={data} onChange={onChange} />; return <SkillsTab data={data} onChange={onChange} />;
case 'Languages': case tabs[7].key:
return <LanguagesTab data={data} onChange={onChange} />; return <LanguagesTab data={data} onChange={onChange} />;
case 'References': case tabs[8].key:
return <ReferencesTab data={data} onChange={onChange} />; return <ReferencesTab data={data} onChange={onChange} />;
case 'Extras': case tabs[9].key:
return <ExtrasTab data={data} onChange={onChange} />; return <ExtrasTab data={data} onChange={onChange} />;
default: default:
return null; return null;

View File

@ -18,14 +18,32 @@ const RightSidebar = () => {
const { data, theme, settings } = state; const { data, theme, settings } = state;
const tabs = [ const tabs = [
t('templates.title'), {
t('colors.title'), key: 'templates',
t('fonts.title'), name: t('templates.title'),
t('actions.title'), },
t('settings.title'), {
t('about.title'), key: 'colors',
name: t('colors.title'),
},
{
key: 'fonts',
name: t('fonts.title'),
},
{
key: 'actions',
name: t('actions.title'),
},
{
key: 'settings',
name: t('settings.title'),
},
{
key: 'about',
name: t('about.title'),
},
]; ];
const [currentTab, setCurrentTab] = useState(t('settings.title')); const [currentTab, setCurrentTab] = useState(tabs[0].key);
const onChange = (key, value) => { const onChange = (key, value) => {
dispatch({ dispatch({
@ -41,17 +59,17 @@ const RightSidebar = () => {
const renderTabs = () => { const renderTabs = () => {
switch (currentTab) { switch (currentTab) {
case t('templates.title'): case tabs[0].key:
return <TemplatesTab theme={theme} onChange={onChange} />; return <TemplatesTab theme={theme} onChange={onChange} />;
case t('colors.title'): case tabs[1].key:
return <ColorsTab theme={theme} onChange={onChange} />; return <ColorsTab theme={theme} onChange={onChange} />;
case t('fonts.title'): case tabs[2].key:
return <FontsTab theme={theme} onChange={onChange} />; return <FontsTab theme={theme} onChange={onChange} />;
case t('actions.title'): case tabs[3].key:
return <ActionsTab data={data} theme={theme} dispatch={dispatch} />; return <ActionsTab data={data} theme={theme} dispatch={dispatch} />;
case t('settings.title'): case tabs[4].key:
return <SettingsTab settings={settings} onChange={onChange} />; return <SettingsTab settings={settings} onChange={onChange} />;
case t('about.title'): case tabs[5].key:
return <AboutTab />; return <AboutTab />;
default: default:
return null; return null;

View File

@ -5,19 +5,14 @@ import { languages } from '../../../i18n';
import Dropdown from '../../../shared/Dropdown'; import Dropdown from '../../../shared/Dropdown';
const SettingsTab = ({ settings, onChange }) => { const SettingsTab = ({ settings, onChange }) => {
const { t, i18n } = useTranslation('rightSidebar'); const { t } = useTranslation('rightSidebar');
const onChangeLanguage = code => {
i18n.changeLanguage(code);
onChange('settings.language', code);
};
return ( return (
<div> <div>
<Dropdown <Dropdown
label={t('settings.language.label')} label={t('settings.language.label')}
value={settings.language} value={settings.language}
onChange={onChangeLanguage} onChange={x => onChange('settings.language', x)}
options={languages} options={languages}
optionItem={x => ( optionItem={x => (
<option key={x.code} value={x.code}> <option key={x.code} value={x.code}>

View File

@ -8,6 +8,10 @@ const languages = [
code: 'en', code: 'en',
name: 'English', name: 'English',
}, },
{
code: 'hi',
name: 'Hindi',
},
]; ];
i18n.use(initReactI18next).init({ i18n.use(initReactI18next).init({

View File

@ -4,15 +4,15 @@ const TabBar = ({ tabs, currentTab, setCurrentTab }) => {
const tabsRef = useRef(null); const tabsRef = useRef(null);
const scrollBy = x => { const scrollBy = x => {
const index = tabs.indexOf(currentTab); const index = tabs.find(tab => tab.key === currentTab);
tabsRef.current.scrollLeft += x; tabsRef.current.scrollLeft += x;
if (x < 0 && index > 0) { if (x < 0 && index > 0) {
setCurrentTab(tabs[index - 1]); setCurrentTab(tabs[index - 1].key);
} }
if (x > 0 && index < tabs.length - 1) { if (x > 0 && index < tabs.length - 1) {
setCurrentTab(tabs[index + 1]); setCurrentTab(tabs[index + 1].key);
} }
}; };
@ -27,19 +27,19 @@ const TabBar = ({ tabs, currentTab, setCurrentTab }) => {
<ul id="tabs" ref={tabsRef} className="flex overflow-x-scroll"> <ul id="tabs" ref={tabsRef} className="flex overflow-x-scroll">
{tabs.map(tab => {tabs.map(tab =>
currentTab === tab ? ( currentTab === tab.key ? (
<li key={tab} className="mx-1 list-none"> <li key={tab.key} className="mx-1 list-none">
<div className="whitespace-no-wrap bg-gray-700 text-white rounded-md text-sm py-2 px-6 font-medium"> <div className="whitespace-no-wrap bg-gray-700 text-white rounded-md text-sm py-2 px-6 font-medium">
{tab} {tab.name || 'Tab'}
</div> </div>
</li> </li>
) : ( ) : (
<li key={tab} className="mx-1 list-none"> <li key={tab.key} className="mx-1 list-none">
<div <div
className="bg-white whitespace-no-wrap rounded-md cursor-pointer text-sm py-2 px-6 font-medium hover:bg-gray-200" className="bg-white whitespace-no-wrap rounded-md cursor-pointer text-sm py-2 px-6 font-medium hover:bg-gray-200"
onClick={() => setCurrentTab(tab)} onClick={() => setCurrentTab(tab.key)}
> >
{tab} {tab.name || 'Tab'}
</div> </div>
</li> </li>
), ),