fix: localize the login pages

This commit is contained in:
mengstabketemaw
2026-07-11 12:41:09 +03:00
parent e8c02ab853
commit 15514fe5dd
14 changed files with 595 additions and 159 deletions

View File

@@ -48,6 +48,111 @@ export const am: Translations = {
collapse: 'ሰብስብ',
expand: 'ዘርጋ',
toggleTheme: 'የብርሃን / ጨለማ ሁነታን ይቀይሩ',
or: 'ወይም',
somethingWentWrong: 'የሆነ ስህተት ተከስቷል',
},
auth: {
login: 'ግባ',
logout: 'ውጣ',
signup: 'ይመዝገቡ',
account: 'መለያ',
guest: 'እንግዳ ተጠቃሚ',
welcomeTo: 'እንኳን ወደ {{appName}} በደህና መጡ',
signInToAccess: 'መለያዎን ለመድረስ ይግቡ።',
emailOrPhone: 'ኢሜይል ወይም ስልክ',
emailPlaceholder: 'you@example.com',
password: 'የይለፍ ቃል',
passwordPlaceholder: 'የይለፍ ቃልዎ',
rememberMe: 'አስታውሰኝ',
forgotPassword: 'የይለፍ ቃል ረሱት?',
signIn: 'ግባ',
signInWithPhone: 'በስልክ ቁጥር ይግቡ',
noAccount: 'መለያ የለዎትም?',
createOne: 'አዲስ ይፍጠሩ',
forgotYourPassword: 'የይለፍ ቃልዎን ረሱት?',
forgotDescription:
'ከመለያዎ ጋር የተገናኘውን ኢሜይል ያስገቡ፤ የይለፍ ቃልዎን እንደገና ለማስተካከል አገናኝ እንልክልዎታለን።',
emailAddress: 'የኢሜይል አድራሻ',
sendResetLink: 'የማስተካከያ አገናኝ ይላኩ',
backToSignIn: 'ወደ መግቢያ ተመለስ',
checkYourEmail: 'ኢሜይልዎን ያረጋግጡ',
resetLinkSent:
'የይለፍ ቃል ማስተካከያ አገናኝ ወደ {{email}} ልከናል። አዲስ የይለፍ ቃል ለመምረጥ በኢሜይሉ ውስጥ ያለውን አገናኝ ይከተሉ።',
openEmailApp: 'የኢሜይል መተግበሪያ ይክፈቱ',
didNotGetEmail: 'ኢሜይሉ አልደረሰዎትም?',
resendLink: 'አገናኙን እንደገና ይላኩ',
resetLinkSentAgain: 'የማስተካከያ አገናኝ እንደገና ተልኳል',
createAccount: 'መለያ ይፍጠሩ',
signupDescription: 'ለመጀመር አንድ ደቂቃ ብቻ ይወስዳል።',
nameEn: 'ስም (እንግሊዝኛ)',
nameEnPlaceholder: 'አበበ በቀለ',
nameAm: 'ስም (አማርኛ)',
nameAmPlaceholder: 'ሙሉ ስም',
username: 'የተጠቃሚ ስም',
usernamePlaceholder: 'የተጠቃሚ ስም ይምረጡ',
phoneNumber: 'ስልክ ቁጥር',
phonePlaceholder: '+251 911 234 567',
confirmPassword: 'የይለፍ ቃል ያረጋግጡ',
confirmPasswordPlaceholder: 'የይለፍ ቃሉን እንደገና ያስገቡ',
agreeToTerms: 'እኔ እስማማለሁ በ',
termsAndPrivacy: 'ደንቦች እና የግላዊነት ፖሊሲ',
signupWithFayda: 'በብሔራዊ መታወቂያ (ፋይዳ) ይመዝገቡ',
alreadyHaveAccount: 'መለያ አለዎት?',
faydaFailed: 'የብሔራዊ መታወቂያ ማረጋገጫ መጀመር አልተቻለም',
resetPasswordBrandTitle: 'የይለፍ ቃልዎን በአስተማማኝ ሁኔታ ያስተካክሉ።',
resetPasswordBrandSubtitle:
'አይጨነቁ \u2014 አዲስ የይለፍ ቃል ለመፍጠር አስተማማኝ አገናኝ እንልክልዎታለን።',
signupBrandTitle: 'ጉዞዎ እዚህ ይጀምራል።',
signupBrandSubtitle: 'መለያ ይፍጠሩ እና የማይቻል የሚመስሉ ነገሮችን ይክፈቱ።',
verifyAccount: 'መለያዎን ያረጋግጡ',
otpSent: 'የማረጋገጫ ኮድ ወደ {{email}} ተልኳል። ለመቀጠል ከዚህ በታች ያስገቡት።',
verify: 'አረጋግጥ',
havingTrouble: 'ችግር አለብዎት?',
skipVerification: 'ለአሁን ማረጋገጫውን ዘልለው',
noCode: 'ኮድ አልደረሰዎትም?',
resendIn: 'እንደገና ይላኩ በ{{seconds}}ሰ',
resendCode: 'ኮዱን እንደገና ይላኩ',
otpDigitCode: 'የ{{length}}-አሃዝ ኮዱን ያስገቡ',
phoneVerified: 'ስልክ ቁጥር በተሳካ ሁኔታ ተረጋግጧል',
codeResent: 'የማረጋገጫ ኮድ እንደገና ወደ ኢሜይልዎ ተልኳል',
otpBrandTitle: 'መለያዎን ለማስጠበቅ የመጨረሻው እርምጃ።',
otpBrandSubtitle: 'መዳረሻ ከመስጠታችን በፊት እርስዎ መሆንዎን ለማረጋገጥ የአንድ ጊዜ ኮድ እንጠቀማለን።',
setPassword: 'የይለፍ ቃልዎን ያዘጋጁ',
newPassword: 'አዲስ የይለፍ ቃል',
setPasswordBrandTitle: 'የመለያ ይለፍ ቃልዎን ያዘጋጁ።',
setPasswordBrandSubtitle: 'መለያዎን ለማስጠበቅ እና ሁሉንም የፖርታል ተግባራት ለመጠቀም ጠንካራ የይለፍ ቃል ይምረጡ።',
welcomeNationalId: 'እንኳን ደህና መጡ፣ {{name}}። የብሔራዊ መታወቂያዎ በተሳካ ሁኔታ ተረጋግጧል። የመለያ ዝግጅትዎን ለማጠናቀቅ የይለፍ ቃል ይምረጡ።',
setPasswordAndContinue: 'የይለፍ ቃል ያዘጋጁ እና ይቀጥሉ',
passwordSet: 'የይለፍ ቃል በተሳካ ሁኔታ ተዘጋጅቷል',
sessionExpired: 'ክፍለ ጊዜ ጊዜው አልፏል። እባክዎ እንደገና ይመዝገቡ።',
faydaBrandTitle: 'የብሔራዊ መታወቂያዎን በማረጋገጥ ላይ...',
faydaBrandSubtitle: 'እባክዎ ማንነትዎን ከብሔራዊ መታወቂያ አገልግሎት ደህንነቱ በተጠበቀ ሁኔታ ስናረጋግጥ ይጠብቁ።',
faydaVerifying: 'ማንነትዎን በማረጋገጥ ላይ',
faydaFailedTitle: 'ማረጋገጫ አልተሳካም',
faydaProcessing: 'የብሔራዊ መታወቂያ መረጃዎን በደህንነት እያስኬድን ነው። ይህ ጥቂት ጊዜ ብቻ ይወስዳል።',
faydaTryAgain: 'እባክዎ እንደገና ይሞክሩ ወይም መደበኛውን የምዝገባ ዘዴ ይጠቀሙ።',
faydaInvalidResponse: 'ከብሔራዊ መታወቂያ አገልግሎት የተሳሳተ ምላሽ። ኮድ ወይም ሁኔታ የለም።',
faydaSessionExpired: 'ክፍለ ጊዜ ጊዜው አልፏል። እባክዎ እንደገና ለመመዝገብ ይሞክሩ።',
faydaVerifyFailed: 'የብሔራዊ መታወቂያ ማረጋገጫን ማጠናቀቅ አልተቻለም',
faydaVerified: 'ብሔራዊ መታወቂያ በተሳካ ሁኔታ ተረጋግጧል',
hero: {
brandTitle: 'የባሕር ፍቃድ አሰጣጥ፣ ቀላል ተደረገ።',
brandSubtitle:
'ለመርከብ እና ለመርከበኛ ፈቃዶች ያመልክቱ፣ ሰነዶችን ይስቀሉ እና እያንዳንዱን ማመልከቻ በአንድ ደህንነቱ በተጠበቀ ፖርታል ይከታተሉ።',
featureOnline: 'ማመልከቻዎችን በመስመር ያቅርቡ፣ ቀንና ሌሊት',
featureTracking: 'በእውነተኛ ጊዜ የሁኔታ ክትትል እና ማሳወቂያዎች',
featureBilingual: 'በእንግሊዝኛ እና በአማርኛ ይገኛል',
},
validation: {
emailInvalid: 'ትክክለኛ ኢሜይል ያስገቡ',
passwordMin: 'የይለፍ ቃል ቢያንስ {{min}} ቁምፊዎች መሆን አለበት',
usernameMin: 'የተጠቃሚ ስም ቢያንስ 3 ቁምፊዎች መሆን አለበት',
phoneRequired: 'ስልክ ቁጥር ያስፈልጋል',
nameEnRequired: 'ስም (እንግሊዝኛ) ያስፈልጋል',
confirmRequired: 'የይለፍ ቃልዎን ያረጋግጡ',
passwordMismatch: 'የይለፍ ቃላት አይዛመዱም',
},
},
breadcrumbs: {

View File

@@ -46,6 +46,118 @@ export const en = {
collapse: 'Collapse',
expand: 'Expand',
toggleTheme: 'Toggle light / dark mode',
or: 'or',
somethingWentWrong: 'Something went wrong',
},
auth: {
login: 'Log in',
logout: 'Log out',
signup: 'Sign up',
account: 'Account',
guest: 'Guest user',
welcomeTo: 'Welcome to {{appName}}',
signInToAccess: 'Sign in to access your account.',
emailOrPhone: 'Email or phone',
emailPlaceholder: 'you@example.com',
password: 'Password',
passwordPlaceholder: 'Your password',
rememberMe: 'Remember me',
forgotPassword: 'Forgot password?',
signIn: 'Sign in',
signInWithPhone: 'Sign in with phone number',
noAccount: 'Don\u2019t have an account?',
createOne: 'Create one',
forgotYourPassword: 'Forgot your password?',
forgotDescription:
'Enter the email linked to your account and we\u2019ll send you a link to reset your password.',
emailAddress: 'Email address',
sendResetLink: 'Send reset link',
backToSignIn: 'Back to sign in',
checkYourEmail: 'Check your email',
resetLinkSent:
'We\u2019ve sent a password reset link to {{email}}. Follow the link in that email to choose a new password.',
openEmailApp: 'Open email app',
didNotGetEmail: 'Didn\u2019t get the email?',
resendLink: 'Resend link',
resetLinkSentAgain: 'Reset link sent again',
createAccount: 'Create account',
signupDescription: 'It only takes a minute to get started.',
nameEn: 'Name (English)',
nameEnPlaceholder: 'Abebe Bekele',
nameAm: 'Name (Amharic)',
nameAmPlaceholder: '\u1235\u121d',
username: 'Username',
usernamePlaceholder: 'Choose a username',
phoneNumber: 'Phone number',
phonePlaceholder: '+251 911 234 567',
confirmPassword: 'Confirm password',
confirmPasswordPlaceholder: 'Re-enter password',
agreeToTerms: 'I agree to the',
termsAndPrivacy: 'Terms & Privacy Policy',
signupWithFayda: 'Sign up with National ID (Fayda)',
alreadyHaveAccount: 'Already have an account?',
faydaFailed: 'Failed to initiate National ID verification',
resetPasswordBrandTitle: 'Reset your password securely.',
resetPasswordBrandSubtitle:
'No worries \u2014 we\u2019ll send you a secure link to create a new password and get you back on track.',
signupBrandTitle: 'Your journey begins here.',
signupBrandSubtitle: 'Create an account and unlock a world of possibilities.',
verifyAccount: 'Verify your account',
otpSent: 'A verification code has been sent to {{email}}. Enter it below to continue.',
verify: 'Verify',
havingTrouble: 'Having trouble?',
skipVerification: 'Skip verification for now',
noCode: 'Didn\u2019t receive a code?',
resendIn: 'Resend in {{seconds}}s',
resendCode: 'Resend code',
otpDigitCode: 'Enter the {{length}}-digit code',
phoneVerified: 'Phone number verified successfully',
codeResent: 'Verification code resent to your email',
otpBrandTitle: 'One last step to secure your account.',
otpBrandSubtitle:
'We use a one-time code to confirm it\u2019s really you before granting access.',
setPassword: 'Set your password',
newPassword: 'New password',
setPasswordBrandTitle: 'Set your account password.',
setPasswordBrandSubtitle:
'Choose a strong password to secure your account and access all Portal features.',
welcomeNationalId:
'Welcome, {{name}}. Your National ID has been verified successfully. Choose a password to complete your account setup.',
setPasswordAndContinue: 'Set password & continue',
passwordSet: 'Password set successfully',
sessionExpired: 'Session expired. Please sign up again.',
faydaBrandTitle: 'Verifying your National ID...',
faydaBrandSubtitle:
'Please wait while we securely verify your identity with the National ID service.',
faydaVerifying: 'Verifying your identity',
faydaFailedTitle: 'Verification failed',
faydaProcessing:
'We are securely processing your National ID information. This should only take a moment.',
faydaTryAgain:
'Please try again or use the standard sign-up method instead.',
faydaInvalidResponse:
'Invalid response from National ID service. Missing code or state.',
faydaSessionExpired: 'Session expired. Please try signing up again.',
faydaVerifyFailed: 'Failed to complete National ID verification',
faydaVerified: 'National ID verified successfully',
hero: {
brandTitle: 'Maritime licensing, made simple.',
brandSubtitle:
'Apply for vessel and seafarer licenses, upload documents, and track every application in one secure portal.',
featureOnline: 'Submit applications online, 24/7',
featureTracking: 'Real-time status tracking & alerts',
featureBilingual: 'Available in English & አማርኛ',
},
validation: {
emailInvalid: 'Enter a valid email',
passwordMin: 'Password must be at least {{min}} characters',
usernameMin: 'Username must be at least 3 characters',
phoneRequired: 'Phone number is required',
nameEnRequired: 'Name (English) is required',
confirmRequired: 'Confirm your password',
passwordMismatch: 'Passwords do not match',
},
},
breadcrumbs: {

View File

@@ -41,8 +41,8 @@ const router = createBrowserRouter([
{
element: <AuthLayout />,
children: [
{ path: '/login', element: <LoginPage appName="Backoffice" enableSignup={false} /> },
{ path: '/forgot-password', element: <ForgotPasswordPage appName="Backoffice" /> },
{ path: '/login', element: <LoginPage enableSignup={false} /> },
{ path: '/forgot-password', element: <ForgotPasswordPage /> },
{ path: '/otp-verify', element: <OTPVerificationPage /> },
],
},

View File

@@ -2,7 +2,7 @@ import type { Translations } from './en';
export const am: Translations = {
app: {
name: 'ኢባባ ፖርታል',
name: 'ኢ ፖርታል',
authority: 'የኢትዮጵያ ባሕር ጉዳዮች ባለሥልጣን',
tagline: 'የባሕር ፍቃድና የምስክር ወረቀት አገልግሎቶች',
},
@@ -58,6 +58,8 @@ export const am: Translations = {
learnMore: 'ተጨማሪ ይወቁ',
toggleTheme: 'ብርሃን / ጨለማ ገጽታ ቀይር',
welcome: 'እንኳን ደህና መጡ',
or: 'ወይም',
somethingWentWrong: 'የሆነ ስህተት ተከስቷል',
},
auth: {
@@ -66,6 +68,101 @@ export const am: Translations = {
signup: 'ይመዝገቡ',
account: 'መለያ',
guest: 'እንግዳ ተጠቃሚ',
welcomeTo: 'እንኳን ወደ {{appName}} በደህና መጡ',
signInToAccess: 'መለያዎን ለመድረስ ይግቡ።',
emailOrPhone: 'ኢሜይል ወይም ስልክ',
emailPlaceholder: 'you@example.com',
password: 'የይለፍ ቃል',
passwordPlaceholder: 'የይለፍ ቃልዎ',
rememberMe: 'አስታውሰኝ',
forgotPassword: 'የይለፍ ቃል ረሱት?',
signIn: 'ግባ',
signInWithPhone: 'በስልክ ቁጥር ይግቡ',
noAccount: 'መለያ የለዎትም?',
createOne: 'አዲስ ይፍጠሩ',
forgotYourPassword: 'የይለፍ ቃልዎን ረሱት?',
forgotDescription:
'ከመለያዎ ጋር የተገናኘውን ኢሜይል ያስገቡ፤ የይለፍ ቃልዎን እንደገና ለማስተካከል አገናኝ እንልክልዎታለን።',
emailAddress: 'የኢሜይል አድራሻ',
sendResetLink: 'የማስተካከያ አገናኝ ይላኩ',
backToSignIn: 'ወደ መግቢያ ተመለስ',
checkYourEmail: 'ኢሜይልዎን ያረጋግጡ',
resetLinkSent:
'የይለፍ ቃል ማስተካከያ አገናኝ ወደ {{email}} ልከናል። አዲስ የይለፍ ቃል ለመምረጥ በኢሜይሉ ውስጥ ያለውን አገናኝ ይከተሉ።',
openEmailApp: 'የኢሜይል መተግበሪያ ይክፈቱ',
didNotGetEmail: 'ኢሜይሉ አልደረሰዎትም?',
resendLink: 'አገናኙን እንደገና ይላኩ',
resetLinkSentAgain: 'የማስተካከያ አገናኝ እንደገና ተልኳል',
createAccount: 'መለያ ይፍጠሩ',
signupDescription: 'ለመጀመር አንድ ደቂቃ ብቻ ይወስዳል።',
nameEn: 'ስም (እንግሊዝኛ)',
nameEnPlaceholder: 'Abebe Bekila',
nameAm: 'ስም (አማርኛ)',
nameAmPlaceholder: 'አበበ በቀለ',
username: 'የተጠቃሚ ስም',
usernamePlaceholder: 'የተጠቃሚ ስም ይምረጡ',
phoneNumber: 'ስልክ ቁጥር',
phonePlaceholder: '+251 911 234 567',
confirmPassword: 'የይለፍ ቃል ያረጋግጡ',
confirmPasswordPlaceholder: 'የይለፍ ቃሉን እንደገና ያስገቡ',
agreeToTerms: 'እኔ እስማማለሁ በ',
termsAndPrivacy: 'ደንቦች እና የግላዊነት ፖሊሲ',
signupWithFayda: 'በብሔራዊ መታወቂያ (ፋይዳ) ይመዝገቡ',
alreadyHaveAccount: 'መለያ አለዎት?',
faydaFailed: 'የብሔራዊ መታወቂያ ማረጋገጫ መጀመር አልተቻለም',
resetPasswordBrandTitle: 'የይለፍ ቃልዎን በአስተማማኝ ሁኔታ ያስተካክሉ።',
resetPasswordBrandSubtitle:
'አይጨነቁ \u2014 አዲስ የይለፍ ቃል ለመፍጠር አስተማማኝ አገናኝ እንልክልዎታለን።',
signupBrandTitle: 'ጉዞዎ እዚህ ይጀምራል።',
signupBrandSubtitle: 'መለያ ይፍጠሩ እና የማይቻል የሚመስሉ ነገሮችን ይክፈቱ።',
verifyAccount: 'መለያዎን ያረጋግጡ',
otpSent: 'የማረጋገጫ ኮድ ወደ {{email}} ተልኳል። ለመቀጠል ከዚህ በታች ያስገቡት።',
verify: 'አረጋግጥ',
havingTrouble: 'ችግር አለብዎት?',
skipVerification: 'ለአሁን ማረጋገጫውን ዘልለው',
noCode: 'ኮድ አልደረሰዎትም?',
resendIn: 'እንደገና ይላኩ በ{{seconds}}ሰ',
resendCode: 'ኮዱን እንደገና ይላኩ',
otpDigitCode: 'የ{{length}}-አሃዝ ኮዱን ያስገቡ',
phoneVerified: 'ስልክ ቁጥር በተሳካ ሁኔታ ተረጋግጧል',
codeResent: 'የማረጋገጫ ኮድ እንደገና ወደ ኢሜይልዎ ተልኳል',
otpBrandTitle: 'መለያዎን ለማስጠበቅ የመጨረሻው እርምጃ።',
otpBrandSubtitle: 'መዳረሻ ከመስጠታችን በፊት እርስዎ መሆንዎን ለማረጋገጥ የአንድ ጊዜ ኮድ እንጠቀማለን።',
setPassword: 'የይለፍ ቃልዎን ያዘጋጁ',
newPassword: 'አዲስ የይለፍ ቃል',
setPasswordBrandTitle: 'የመለያ ይለፍ ቃልዎን ያዘጋጁ።',
setPasswordBrandSubtitle: 'መለያዎን ለማስጠበቅ እና ሁሉንም የፖርታል ተግባራት ለመጠቀም ጠንካራ የይለፍ ቃል ይምረጡ።',
welcomeNationalId: 'እንኳን ደህና መጡ፣ {{name}}። የብሔራዊ መታወቂያዎ በተሳካ ሁኔታ ተረጋግጧል። የመለያ ዝግጅትዎን ለማጠናቀቅ የይለፍ ቃል ይምረጡ።',
setPasswordAndContinue: 'የይለፍ ቃል ያዘጋጁ እና ይቀጥሉ',
passwordSet: 'የይለፍ ቃል በተሳካ ሁኔታ ተዘጋጅቷል',
sessionExpired: 'ክፍለ ጊዜ ጊዜው አልፏል። እባክዎ እንደገና ይመዝገቡ።',
faydaBrandTitle: 'የብሔራዊ መታወቂያዎን በማረጋገጥ ላይ...',
faydaBrandSubtitle: 'እባክዎ ማንነትዎን ከብሔራዊ መታወቂያ አገልግሎት ደህንነቱ በተጠበቀ ሁኔታ ስናረጋግጥ ይጠብቁ።',
faydaVerifying: 'ማንነትዎን በማረጋገጥ ላይ',
faydaFailedTitle: 'ማረጋገጫ አልተሳካም',
faydaProcessing: 'የብሔራዊ መታወቂያ መረጃዎን በደህንነት እያስኬድን ነው። ይህ ጥቂት ጊዜ ብቻ ይወስዳል።',
faydaTryAgain: 'እባክዎ እንደገና ይሞክሩ ወይም መደበኛውን የምዝገባ ዘዴ ይጠቀሙ።',
faydaInvalidResponse: 'ከብሔራዊ መታወቂያ አገልግሎት የተሳሳተ ምላሽ። ኮድ ወይም ሁኔታ የለም።',
faydaSessionExpired: 'ክፍለ ጊዜ ጊዜው አልፏል። እባክዎ እንደገና ለመመዝገብ ይሞክሩ።',
faydaVerifyFailed: 'የብሔራዊ መታወቂያ ማረጋገጫን ማጠናቀቅ አልተቻለም',
faydaVerified: 'ብሔራዊ መታወቂያ በተሳካ ሁኔታ ተረጋግጧል',
hero: {
brandTitle: 'የባሕር ፍቃድ አሰጣጥ፣ ቀላል ተደረገ።',
brandSubtitle:
'ለመርከብ እና ለመርከበኛ ፈቃዶች ያመልክቱ፣ ሰነዶችን ይስቀሉ እና እያንዳንዱን ማመልከቻ በአንድ ደህንነቱ በተጠበቀ ፖርታል ይከታተሉ።',
featureOnline: 'ማመልከቻዎችን በመስመር ያቅርቡ፣ ቀንና ሌሊት',
featureTracking: 'በእውነተኛ ጊዜ የሁኔታ ክትትል እና ማሳወቂያዎች',
featureBilingual: 'በእንግሊዝኛ እና በአማርኛ ይገኛል',
},
validation: {
emailInvalid: 'ትክክለኛ ኢሜይል ያስገቡ',
passwordMin: 'የይለፍ ቃል ቢያንስ {{min}} ቁምፊዎች መሆን አለበት',
usernameMin: 'የተጠቃሚ ስም ቢያንስ 3 ቁምፊዎች መሆን አለበት',
phoneRequired: 'ስልክ ቁጥር ያስፈልጋል',
nameEnRequired: 'ስም (እንግሊዝኛ) ያስፈልጋል',
confirmRequired: 'የይለፍ ቃልዎን ያረጋግጡ',
passwordMismatch: 'የይለፍ ቃላት አይዛመዱም',
},
},
dashboard: {

View File

@@ -56,6 +56,8 @@ export const en = {
learnMore: 'Learn more',
toggleTheme: 'Toggle light / dark mode',
welcome: 'Welcome',
or: 'or',
somethingWentWrong: 'Something went wrong',
},
auth: {
@@ -64,6 +66,108 @@ export const en = {
signup: 'Sign up',
account: 'Account',
guest: 'Guest user',
welcomeTo: 'Welcome to {{appName}}',
signInToAccess: 'Sign in to access your account.',
emailOrPhone: 'Email or phone',
emailPlaceholder: 'you@example.com',
password: 'Password',
passwordPlaceholder: 'Your password',
rememberMe: 'Remember me',
forgotPassword: 'Forgot password?',
signIn: 'Sign in',
signInWithPhone: 'Sign in with phone number',
noAccount: 'Don\u2019t have an account?',
createOne: 'Create one',
forgotYourPassword: 'Forgot your password?',
forgotDescription:
'Enter the email linked to your account and we\u2019ll send you a link to reset your password.',
emailAddress: 'Email address',
sendResetLink: 'Send reset link',
backToSignIn: 'Back to sign in',
checkYourEmail: 'Check your email',
resetLinkSent:
'We\u2019ve sent a password reset link to {{email}}. Follow the link in that email to choose a new password.',
openEmailApp: 'Open email app',
didNotGetEmail: 'Didn\u2019t get the email?',
resendLink: 'Resend link',
resetLinkSentAgain: 'Reset link sent again',
createAccount: 'Create account',
signupDescription: 'It only takes a minute to get started.',
nameEn: 'Name (English)',
nameEnPlaceholder: 'Abebe Bekele',
nameAm: 'Name (Amharic)',
nameAmPlaceholder: 'አበበ በቂላ',
username: 'Username',
usernamePlaceholder: 'Choose a username',
phoneNumber: 'Phone number',
phonePlaceholder: '+251 911 234 567',
confirmPassword: 'Confirm password',
confirmPasswordPlaceholder: 'Re-enter password',
agreeToTerms: 'I agree to the',
termsAndPrivacy: 'Terms & Privacy Policy',
signupWithFayda: 'Sign up with National ID (Fayda)',
alreadyHaveAccount: 'Already have an account?',
faydaFailed: 'Failed to initiate National ID verification',
resetPasswordBrandTitle: 'Reset your password securely.',
resetPasswordBrandSubtitle:
'No worries \u2014 we\u2019ll send you a secure link to create a new password and get you back on track.',
signupBrandTitle: 'Your journey begins here.',
signupBrandSubtitle: 'Create an account and unlock a world of possibilities.',
verifyAccount: 'Verify your account',
otpSent: 'A verification code has been sent to {{email}}. Enter it below to continue.',
verify: 'Verify',
havingTrouble: 'Having trouble?',
skipVerification: 'Skip verification for now',
noCode: 'Didn\u2019t receive a code?',
resendIn: 'Resend in {{seconds}}s',
resendCode: 'Resend code',
otpDigitCode: 'Enter the {{length}}-digit code',
phoneVerified: 'Phone number verified successfully',
codeResent: 'Verification code resent to your email',
otpBrandTitle: 'One last step to secure your account.',
otpBrandSubtitle:
'We use a one-time code to confirm it\u2019s really you before granting access.',
setPassword: 'Set your password',
newPassword: 'New password',
setPasswordBrandTitle: 'Set your account password.',
setPasswordBrandSubtitle:
'Choose a strong password to secure your account and access all Portal features.',
welcomeNationalId:
'Welcome, {{name}}. Your National ID has been verified successfully. Choose a password to complete your account setup.',
setPasswordAndContinue: 'Set password & continue',
passwordSet: 'Password set successfully',
sessionExpired: 'Session expired. Please sign up again.',
faydaBrandTitle: 'Verifying your National ID...',
faydaBrandSubtitle:
'Please wait while we securely verify your identity with the National ID service.',
faydaVerifying: 'Verifying your identity',
faydaFailedTitle: 'Verification failed',
faydaProcessing:
'We are securely processing your National ID information. This should only take a moment.',
faydaTryAgain:
'Please try again or use the standard sign-up method instead.',
faydaInvalidResponse:
'Invalid response from National ID service. Missing code or state.',
faydaSessionExpired: 'Session expired. Please try signing up again.',
faydaVerifyFailed: 'Failed to complete National ID verification',
faydaVerified: 'National ID verified successfully',
hero: {
brandTitle: 'Maritime licensing, made simple.',
brandSubtitle:
'Apply for vessel and seafarer licenses, upload documents, and track every application in one secure portal.',
featureOnline: 'Submit applications online, 24/7',
featureTracking: 'Real-time status tracking & alerts',
featureBilingual: 'Available in English & አማርኛ',
},
validation: {
emailInvalid: 'Enter a valid email',
passwordMin: 'Password must be at least {{min}} characters',
usernameMin: 'Username must be at least 3 characters',
phoneRequired: 'Phone number is required',
nameEnRequired: 'Name (English) is required',
confirmRequired: 'Confirm your password',
passwordMismatch: 'Passwords do not match',
},
},
dashboard: {

View File

@@ -1,7 +1,9 @@
import { I18nextProvider } from 'react-i18next';
import { Provider } from 'react-redux';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import type { ReactNode } from 'react';
import { store } from '../store';
import { i18n } from '../i18n/config';
import { MantineThemeProvider } from './MantineThemeProvider';
import { ErrorBoundary } from '../components/ErrorBoundary';
@@ -14,7 +16,9 @@ export function AppProviders({ children }: { children: ReactNode }) {
<ErrorBoundary>
<Provider store={store}>
<QueryClientProvider client={queryClient}>
<MantineThemeProvider>{children}</MantineThemeProvider>
<I18nextProvider i18n={i18n}>
<MantineThemeProvider>{children}</MantineThemeProvider>
</I18nextProvider>
</QueryClientProvider>
</Provider>
</ErrorBoundary>

View File

@@ -1,6 +1,4 @@
import { createBrowserRouter, Navigate } from 'react-router-dom';
import { I18nextProvider } from 'react-i18next';
import { i18n } from './i18n/config';
import { PortalLayout } from './layouts/PortalLayout';
import { ProtectedRoute } from './components/ProtectedRoute';
import { ProfileGuard } from './components/ProfileGuard';
@@ -45,11 +43,11 @@ import { VesselOwnerDashboardPage } from './features/vessel-owner/pages/VesselOw
export const router = createBrowserRouter([
// Public auth pages
{ path: '/login', element: <LoginPage appName="Portal" /> },
{ path: '/signup', element: <SignupPage appName="Portal" /> },
{ path: '/login', element: <LoginPage /> },
{ path: '/signup', element: <SignupPage /> },
// Public auth pages
{ path: '/forgot-password', element: <ForgotPasswordPage appName="Portal" /> },
{ path: '/forgot-password', element: <ForgotPasswordPage /> },
// Fayda / National ID callback
{ path: '/callback', element: <FaydaCallbackPage /> },
@@ -72,9 +70,7 @@ export const router = createBrowserRouter([
element: (
<ProtectedRoute>
<ProfileGuard>
<I18nextProvider i18n={i18n}>
<PortalLayout />
</I18nextProvider>
<PortalLayout />
</ProfileGuard>
</ProtectedRoute>
),