diff --git a/src/assets/translator/Apply/applyData.ts b/src/assets/translator/Apply/applyData.ts new file mode 100644 index 0000000..f00ba8c --- /dev/null +++ b/src/assets/translator/Apply/applyData.ts @@ -0,0 +1,38 @@ +import { Languages } from '../Languages'; + +export const applyData = { + [Languages.KO]: { + title: '지원서 작성', + name: '이름', + address: '주소', + phoneNumber: '번호', + applyMotivation: '지원동기', + description: { + name: '이름을 입력해주세요.', + address: '주소를 입력해주세요 (예: 대전광역시 유성구 궁동)', + phoneNumber: '번호를 입력해주세요 (예: 010-0000-0000)', + applyMotivation: '지원동기를 입력해주세요', + }, + errors: '을(를) 입력해주세요!', + numberError: '올바른 전화번호 형식이 아닙니다. (예: 010-0000-0000)', + submit: '지원하기', + submitMent: '정말 지원하시겠습니까?', + }, + [Languages.VE]: { + title: 'Đơn ứng tuyển', + name: 'Họ và tên', + address: 'Địa chỉ', + phoneNumber: 'Số điện thoại', + applyMotivation: 'Động lực ứng tuyển', + description: { + name: 'Vui lòng nhập họ và tên.', + address: 'Vui lòng nhập địa chỉ (ví dụ: Quận Cẩm Lệ, Thành phố Đà Nẵng)', + phoneNumber: 'Vui lòng nhập số điện thoại (ví dụ: 010-0000-0000)', + applyMotivation: 'Vui lòng nhập động lực ứng tuyển', + }, + errors: 'Vui lòng nhập!', + numberError: 'Số điện thoại không đúng định dạng. (ví dụ: 010-0000-0000)', + submit: 'Nộp đơn', + submitMent: 'Bạn có chắc chắn muốn ứng tuyển không?', + }, +}; diff --git a/src/assets/translator/Apply/applyGuideData.ts b/src/assets/translator/Apply/applyGuideData.ts new file mode 100644 index 0000000..43ee377 --- /dev/null +++ b/src/assets/translator/Apply/applyGuideData.ts @@ -0,0 +1,64 @@ +import { Languages } from '../Languages'; + +export const applyGuideData = { + [Languages.KO]: { + section1: { + title: '🙌 채용 절차 안내', + description: '여러분의 채용 절차를 더욱 원활하게 진행할 수 있도록, 아래의 내용을 꼭 확인해주세요.', + }, + section2: { + title: '1. 채용 절차 설명', + description: + '- 채용 과정 전반에 대한 안내를 드립니다. 채용의 모든 단계에서 어떤 일들이 일어날지에 대해 명확히 이해하고 준비할 수 있도록 도와드립니다.', + }, + section3: { + title: '2. 주의 사항 및 표준 근로계약서 안내', + description: { + description1: + '- 고용주가 채용을 희망하는 경우, 채용 과정과 별도로 등록하신 이메일로 표준 근로계약서와 주의사항이 안내됩니다.', + description2: + ' - 채용 절차가 진행되는 동안, 근로계약서 작성 시 유의할 점을 반드시 확인하시고 필요한 경우 참고하시기 바랍니다.', + description3: + ' - 해당 과정은 여러분과 고용주 모두가 이해하고 동의하는 투명하고 신뢰할 수 있는 계약서를 작성하는 데 도움을 드리기 위한 것입니다.', + }, + }, + section4: { + description: + '이 안내사항들은 여러분이 채용 절차를 성공적으로 마무리하고, 근로 계약이 원활하게 체결될 수 있도록 지원하기 위한 것입니다.', + }, + section5: { description: '필요한 정보가 정확히 전달될 수 있도록 항상 주의하시기 바랍니다.' }, + section6: { description: '지원서 작성하러 가기' }, + }, + [Languages.VE]: { + section1: { + title: '🙌 Quy trình tuyển dụng', + description: 'Để quá trình tuyển dụng của bạn diễn ra thuận lợi hơn, vui lòng kiểm tra nội dung dưới đây.', + }, + section2: { + title: '1. Giải thích quy trình tuyển dụng', + description: + '- Chúng tôi cung cấp thông tin về toàn bộ quy trình tuyển dụng. Điều này giúp bạn hiểu rõ và chuẩn bị sẵn sàng cho từng bước của quy trình.', + }, + section3: { + title: '2. Lưu ý và hướng dẫn về hợp đồng lao động tiêu chuẩn', + description: { + description1: + '- Khi nhà tuyển dụng mong muốn tuyển dụng, thông tin về hợp đồng lao động tiêu chuẩn và các lưu ý sẽ được gửi đến email đã đăng ký của bạn.', + description2: + '- Trong suốt quá trình tuyển dụng, hãy kiểm tra kỹ các điều cần lưu ý khi ký kết hợp đồng lao động và tham khảo nếu cần thiết.', + description3: + '- Quá trình này nhằm giúp cả bạn và nhà tuyển dụng hiểu và đồng thuận trong việc tạo ra một hợp đồng minh bạch và đáng tin cậy.', + }, + }, + section4: { + description: + 'Những hướng dẫn này giúp bạn hoàn thành quy trình tuyển dụng thành công và ký kết hợp đồng lao động một cách suôn sẻ.', + }, + section5: { + description: 'Hãy luôn cẩn thận để đảm bảo thông tin cần thiết được truyền tải chính xác.', + }, + section6: { + description: 'Điền đơn ứng tuyển', + }, + }, +}; diff --git a/src/assets/translator/Footer/footerData.ts b/src/assets/translator/Footer/footerData.ts new file mode 100644 index 0000000..f05b61e --- /dev/null +++ b/src/assets/translator/Footer/footerData.ts @@ -0,0 +1,20 @@ +import { Languages } from '../Languages'; + +export const footerData = { + [Languages.KO]: { + info_1: '(주)Hire Higher 임세빈', + info_2: '대전광역시 유성구 궁동', + info_3: '전화번호: 042-821-5114', + info_4: '사업자등록번호: 111-11-00000', + info_5: '통신판매번호: 2024-대전유성-0000', + info_6: '유료직업소개사업등록번호: (국내) 제2024-1111111-11-1-00011호', + }, + [Languages.VE]: { + info_1: 'Công ty TNHH Hire Higher 임세빈', + info_2: 'Quận Yuseong, Daejeon, Gungdong', + info_3: 'Số điện thoại: 042-821-5114', + info_4: 'Mã số doanh nghiệp: 111-11-00000', + info_5: 'Số đăng ký kinh doanh thương mại điện tử: 2024-Daejeon Yuseong-0000', + info_6: 'Số đăng ký dịch vụ giới thiệu việc làm có phí (trong nước): Số 2024-1111111-11-1-00011', + }, +}; diff --git a/src/assets/translator/Recruit/recruitData.ts b/src/assets/translator/Recruit/recruitData.ts new file mode 100644 index 0000000..4967378 --- /dev/null +++ b/src/assets/translator/Recruit/recruitData.ts @@ -0,0 +1,38 @@ +import { Languages } from '../Languages'; + +export const recruitData = { + [Languages.KO]: { + recruit: '지원하기', + conditions: '근무조건', + conditions_detail: { + salary: '급여', + workDuration: '근무기간', + workDays: '근무요일', + workHours: '근무시간', + employerName: '대표', + companyName: '회사명', + workType: '고용형태', + }, + eligibilityRequirements: '지원자격', + detailedDescription: '상세설명', + mainResponsibilities: '주요업무', + PreferredRequirements: '우대사항', + }, + [Languages.VE]: { + recruit: 'Ứng tuyển', + conditions: 'Điều kiện làm việc', + conditions_detail: { + salary: 'Lương', + workDuration: 'Thời gian làm việc', + workDays: 'Ngày làm việc', + workHours: 'Giờ làm việc', + employerName: 'Người đại diện', + companyName: 'Tên công ty', + workType: 'Loại hình công việc', + }, + eligibilityRequirements: 'Yêu cầu ứng tuyển', + detailedDescription: 'Mô tả chi tiết', + mainResponsibilities: 'Nhiệm vụ chính', + PreferredRequirements: 'Yêu cầu ưu tiên', + }, +}; diff --git a/src/assets/translator/index.ts b/src/assets/translator/index.ts index 85a2ff6..ad987b8 100644 --- a/src/assets/translator/index.ts +++ b/src/assets/translator/index.ts @@ -1,11 +1,16 @@ import { applicantsData } from './Applicants/applicantsData'; import { contractModalData } from './Applicants/ContractModal/contractModalData'; +import { applyGuideData } from './Apply/applyGuideData'; +import { applyData } from './Apply/applyData'; import { employerMyPageData } from './EmployerMyPage/employerMyPageData'; +import { footerData } from './Footer/footerData'; import { headerData } from './Header/headerData'; import { Languages } from './Languages'; import { myCompanyData } from './MyCompany/myCompanyData'; +import { recruitData } from './Recruit/recruitData'; import { registerVisaData } from './RegisterVisa/registerVisaData'; import { resumeData } from './Resume/resumeData'; +import { registerSignData } from './registerSign/registerSignData'; export const KO = { resume: { ...resumeData[Languages.KO] }, @@ -15,6 +20,11 @@ export const KO = { registerVisa: { ...registerVisaData[Languages.KO] }, contractModal: { ...contractModalData[Languages.KO] }, header: { ...headerData[Languages.KO] }, + footer: { ...footerData[Languages.KO] }, + recruit: { ...recruitData[Languages.KO] }, + applyGuide: { ...applyGuideData[Languages.KO] }, + apply: { ...applyData[Languages.KO] }, + registerSign: { ...registerSignData[Languages.KO] }, }; export const VE = { @@ -25,4 +35,9 @@ export const VE = { registerVisa: { ...registerVisaData[Languages.VE] }, contractModal: { ...contractModalData[Languages.VE] }, header: { ...headerData[Languages.VE] }, + footer: { ...footerData[Languages.VE] }, + recruit: { ...recruitData[Languages.VE] }, + applyGuide: { ...applyGuideData[Languages.VE] }, + apply: { ...applyData[Languages.VE] }, + registerSign: { ...registerSignData[Languages.VE] }, }; diff --git a/src/assets/translator/registerSign/registerSignData.ts b/src/assets/translator/registerSign/registerSignData.ts new file mode 100644 index 0000000..9d0fe27 --- /dev/null +++ b/src/assets/translator/registerSign/registerSignData.ts @@ -0,0 +1,6 @@ +import { Languages } from '../Languages'; + +export const registerSignData = { + [Languages.KO]: { registerSign: '사인 등록하기', reset: '초기화' }, + [Languages.VE]: { registerSign: 'Đăng ký chữ ký', reset: 'Đặt lại' }, +}; diff --git a/src/features/layout/Footer/index.tsx b/src/features/layout/Footer/index.tsx index 26a9841..f306c0a 100644 --- a/src/features/layout/Footer/index.tsx +++ b/src/features/layout/Footer/index.tsx @@ -1,21 +1,23 @@ import { Icon } from '@components/common'; import styled from '@emotion/styled'; import Logo from '@assets/images/hirehigher-logo.svg?react'; +import { useTranslation } from 'react-i18next'; const Footer = () => { + const { t } = useTranslation(); return ( -

(주)Hire Higher 임OO

-

대전광역시 유성구 궁동

-

전화번호: 042-821-5114

+

{t('footer.info_1')}

+

{t('footer.info_2')}

+

{t('footer.info_3')}

-

사업자등록번호: 111-11-00000

-

통신판매번호: 2024-대전유성-3147

-

유료직업소개사업등록번호: (국내) 제2024-1111111-11-1-00011호

+

{t('footer.info_4')}

+

{t('footer.info_5')}

+

{t('footer.info_6')}

diff --git a/src/pages/apply/applyguide/ApplyGuide.tsx b/src/pages/apply/applyguide/ApplyGuide.tsx index 544885f..4b25103 100644 --- a/src/pages/apply/applyguide/ApplyGuide.tsx +++ b/src/pages/apply/applyguide/ApplyGuide.tsx @@ -1,10 +1,9 @@ import Layout from '@/features/layout'; import styled from '@emotion/styled'; -import { Typo } from '@/components/common'; +import { Typo, Button } from '@/components/common'; import { ReactNode } from 'react'; -import { guideMent } from './guideMent'; import { useNavigate } from 'react-router-dom'; -import { Button } from '@/components/common'; +import { useTranslation } from 'react-i18next'; const IndentText = ({ children }: { children: ReactNode }) => {children}; @@ -20,24 +19,25 @@ export default function ApplyGuide() { const navigateToApply = () => { nav('/apply'); }; + const { t } = useTranslation(); return ( - {guideMent[5].description} + {t('applyGuide.section6.description')} diff --git a/src/pages/apply/applyguide/guideMent.ts b/src/pages/apply/applyguide/guideMent.ts deleted file mode 100644 index bafe2fc..0000000 --- a/src/pages/apply/applyguide/guideMent.ts +++ /dev/null @@ -1,25 +0,0 @@ -export const guideMent = Object.freeze([ - { - title: '🙌 채용 절차 안내', - description: '여러분의 채용 절차를 더욱 원활하게 진행할 수 있도록, 아래의 내용을 꼭 확인해주세요.', - }, - { - title: '1. 채용 절차 설명', - description: - '- 채용 과정 전반에 대한 안내를 드립니다. 채용의 모든 단계에서 어떤 일들이 일어날지에 대해 명확히 이해하고 준비할 수 있도록 도와드립니다.', - }, - { - title: '2. 주의 사항 및 표준 근로계약서 안내', - description: [ - '- 고용주가 채용을 희망하는 경우, 채용 과정과 별도로 등록하신 이메일로 표준 근로계약서와 주의사항이 안내됩니다.', - ' - 채용 절차가 진행되는 동안, 근로계약서 작성 시 유의할 점을 반드시 확인하시고 필요한 경우 참고하시기 바랍니다.', - ' - 해당 과정은 여러분과 고용주 모두가 이해하고 동의하는 투명하고 신뢰할 수 있는 계약서를 작성하는 데 도움을 드리기 위한 것입니다.', - ], - }, - { - description: - '이 안내사항들은 여러분이 채용 절차를 성공적으로 마무리하고, 근로 계약이 원활하게 체결될 수 있도록 지원하기 위한 것입니다.', - }, - { description: '필요한 정보가 정확히 전달될 수 있도록 항상 주의하시기 바랍니다.' }, - { description: '지원서 작성하러 가기' }, -]); diff --git a/src/pages/apply/applypage/ApplyPage.tsx b/src/pages/apply/applypage/ApplyPage.tsx index e2a453c..63760db 100644 --- a/src/pages/apply/applypage/ApplyPage.tsx +++ b/src/pages/apply/applypage/ApplyPage.tsx @@ -3,59 +3,60 @@ import styled from '@emotion/styled'; import { Flex, Typo, Button, Modal } from '@/components/common'; import { useApplyHook } from './useApplyHook'; import ApplyInput from './ApplyInput'; +import { useTranslation } from 'react-i18next'; export default function ApplyPage() { const { toggle, isToggle, register, handleSubmit, onSubmit, handleApplySubmit, errors } = useApplyHook(); - + const { t } = useTranslation(); return ( - 지원서 작성 + {t('apply.title')} - 지원하기 + {t('apply.submit')} {isToggle && ( 정말 지원하시겠습니까?} - buttonChildren={지원하기} + textChildren={{t('apply.submitMent')}} + buttonChildren={{t('apply.submit')}} onClose={toggle} /> )} diff --git a/src/pages/recruit/RecruitCard.tsx b/src/pages/recruit/RecruitCard.tsx index 4e29653..70e123e 100644 --- a/src/pages/recruit/RecruitCard.tsx +++ b/src/pages/recruit/RecruitCard.tsx @@ -2,8 +2,10 @@ import { Button } from '@/components/common'; import { Icon } from '@components/common'; import styled from '@emotion/styled'; import type { RecruitCardProps } from './RecruitType'; +import { useTranslation } from 'react-i18next'; export default function RecruitCard({ koreanTitle, companyScale, area, requestedCareer, imageUrl }: RecruitCardProps) { + const { t } = useTranslation(); return ( @@ -13,7 +15,7 @@ export default function RecruitCard({ koreanTitle, companyScale, area, requested

{`${companyScale} | ${area} | ${requestedCareer}`}

- 지원하기 + {t('recruit.recruit')}
diff --git a/src/pages/recruit/RecruitDetail.tsx b/src/pages/recruit/RecruitDetail.tsx index 855c714..bacbfcd 100644 --- a/src/pages/recruit/RecruitDetail.tsx +++ b/src/pages/recruit/RecruitDetail.tsx @@ -1,6 +1,7 @@ import { type SectionProps, type RecruitDetailProps } from './RecruitType'; import styled from '@emotion/styled'; import { Flex } from '@/components/common'; +import { useTranslation } from 'react-i18next'; const SectionWithTitle = ({ title, children }: SectionProps) => (
@@ -35,9 +36,10 @@ export default function RecruitDetail({ workHours, salary, }: RecruitDetailProps) { + const { t } = useTranslation(); return ( - + - {salary} - {workDuration} - {workDays} - {workHours} + {salary} + {workDuration} + {workDays} + {workHours} - {employerName} - {companyName} - {workType} + {employerName} + {companyName} + {workType} - + {eligibilityCriteria.map((data) => { return
  • {data.text}
  • ; })}
    - {detailedDescription} - + {detailedDescription} + {majorBusiness.map((data) => { return
  • {data.text}
  • ; })}
    - + {preferredConditions.map((data) => { return
  • {data.text}
  • ; })} diff --git a/src/pages/recruit/RecruitType.ts b/src/pages/recruit/RecruitType.ts index 5c33f24..62c678d 100644 --- a/src/pages/recruit/RecruitType.ts +++ b/src/pages/recruit/RecruitType.ts @@ -9,7 +9,7 @@ export interface RecruitCardProps { imageUrl: string; } -export interface Item { +interface Item { id: number; text: string; } diff --git a/src/pages/registerSign/RegisterSign.tsx b/src/pages/registerSign/RegisterSign.tsx index ec18201..aa41f74 100644 --- a/src/pages/registerSign/RegisterSign.tsx +++ b/src/pages/registerSign/RegisterSign.tsx @@ -6,10 +6,11 @@ import styled from '@emotion/styled'; import Layout from '@/features/layout'; import { Flex, Button } from '@/components/common'; import { FetchRegisterSign } from '@/apis/registerSign/useRegisterSign'; +import { useTranslation } from 'react-i18next'; export default function RegisterSign() { const signCanvas = useRef(null); - + const { t } = useTranslation(); const clear = () => { signCanvas.current?.clear(); }; @@ -55,8 +56,8 @@ export default function RegisterSign() { /> - 초기화 - onSave()}>사인 등록하기 + {t('registerSign.reset')} + onSave()}>{t('registerSign.registerSign')}