mirror of
https://github.com/Tria-plc/emaui.git
synced 2026-08-26 19:12:50 +00:00
391 lines
12 KiB
TypeScript
391 lines
12 KiB
TypeScript
export const en = {
|
||
app: {
|
||
name: 'EMA Portal',
|
||
authority: 'Ethiopian Maritime Authority',
|
||
tagline: 'Maritime licensing & certification services',
|
||
},
|
||
|
||
msg: {
|
||
genericError: 'Something went wrong. Please try again.',
|
||
serverError: 'Server error. Please try again later.',
|
||
validationError: 'Please check your input and try again.',
|
||
authError: 'Your session has expired. Please sign in again.',
|
||
permissionError: "You don't have permission to perform this action.",
|
||
notFoundError: 'The requested item was not found.',
|
||
fileTooLarge: 'The file is too large to upload.',
|
||
networkError: 'Network error. Check your connection and try again.',
|
||
},
|
||
|
||
language: {
|
||
label: 'Language',
|
||
en: 'English',
|
||
am: 'አማርኛ',
|
||
},
|
||
|
||
nav: {
|
||
groupLicensing: 'Licensing',
|
||
groupSeafarer: 'Seafarer Services',
|
||
groupVessels: 'Vessels',
|
||
groupExaminations: 'Examinations',
|
||
groupAdministration: 'Administration',
|
||
groupAccount: 'Account',
|
||
soon: 'Soon',
|
||
details: 'Details',
|
||
locations: 'Locations',
|
||
myApplications: 'My Applications',
|
||
dashboard: 'Dashboard',
|
||
seafarerRegistry: 'Seafarer Registry',
|
||
seafarerRegistration: 'Seafarer Registration',
|
||
exams: 'Examinations',
|
||
seaRecords: 'My Sea Records',
|
||
myApplication: 'My Application',
|
||
vesselRegistration: 'Vessel Registration',
|
||
vesselRegistrationDashboard: 'Vessel Registration Dashboard',
|
||
ownershipTransfer: 'Ownership Transfer',
|
||
logisticsDashboard: 'Logistics Licenses Dashboard',
|
||
freightForwarderLicense: 'Freight Forwarder License',
|
||
shippingAgentLicense: 'Shipping Agent License',
|
||
combinedLicense: 'Combined License',
|
||
jointInvestmentLicense: 'Joint Investment License',
|
||
mtoLicense: 'MTO License',
|
||
waiver: 'Waiver',
|
||
certificates: 'Certificates',
|
||
endorsements: 'Endorsements',
|
||
vesselRegistrations: 'Vessel Registration',
|
||
vesselTransfers: 'Vessel Transfers',
|
||
documents: 'My Documents',
|
||
notifications: 'Notifications',
|
||
profile: 'Profile',
|
||
support: 'Help & Support',
|
||
collapseSidebar: 'Collapse',
|
||
expandSidebar: 'Expand sidebar',
|
||
sectionSeafarerServices: 'Seafarer Services',
|
||
sectionVesselServices: 'Vessel Services',
|
||
sectionLogisticsLicensing: 'Logistics and Licensing',
|
||
sectionAccountManagement: 'Account Management',
|
||
},
|
||
|
||
common: {
|
||
back: 'Back',
|
||
continue: 'Continue',
|
||
submit: 'Submit',
|
||
cancel: 'Cancel',
|
||
save: 'Save changes',
|
||
saved: 'Changes saved',
|
||
viewAll: 'View all',
|
||
viewDetails: 'View details',
|
||
search: 'Search',
|
||
download: 'Download',
|
||
print: 'Print',
|
||
filter: 'Filter',
|
||
all: 'All',
|
||
status: 'Status',
|
||
date: 'Date',
|
||
actions: 'Actions',
|
||
loading: 'Loading…',
|
||
none: 'None',
|
||
optional: 'optional',
|
||
required: 'Required',
|
||
of: 'of',
|
||
backToList: 'Back to list',
|
||
notFound: 'Not found',
|
||
learnMore: 'Learn more',
|
||
toggleTheme: 'Toggle light / dark mode',
|
||
welcome: 'Welcome',
|
||
switchCalendar: 'Switch calendar type',
|
||
time: 'Time',
|
||
},
|
||
|
||
auth: {
|
||
login: 'Log in',
|
||
logout: 'Log out',
|
||
signup: 'Sign up',
|
||
account: 'Account',
|
||
guest: 'Guest user',
|
||
},
|
||
|
||
dashboard: {
|
||
title: 'Dashboard',
|
||
quickActions: 'Quick actions',
|
||
},
|
||
|
||
applications: {
|
||
title: 'Licence applications',
|
||
subtitle: 'Track everything you have filed with EMA.',
|
||
newApplication: 'New application',
|
||
tabs: {
|
||
applications: 'Applications',
|
||
licences: 'Licences',
|
||
apply: 'Apply',
|
||
},
|
||
stats: {
|
||
needsYou: 'Needs your action',
|
||
inProgress: 'In progress',
|
||
completed: 'Completed',
|
||
activeLicences: 'Active licences',
|
||
},
|
||
filters: {
|
||
search: 'Search',
|
||
searchPlaceholder: 'Number or applicant',
|
||
status: 'Status',
|
||
any: 'Any',
|
||
from: 'From',
|
||
to: 'To',
|
||
clear: 'Clear',
|
||
},
|
||
empty: {
|
||
noneTitle: 'You have not filed any applications yet',
|
||
noneBody: 'Pick a licence from the Apply tab to get started.',
|
||
noMatchTitle: 'No applications match these filters',
|
||
noMatchBody: 'Try widening or clearing the filters.',
|
||
clearFilters: 'Clear filters',
|
||
browse: 'Browse licences',
|
||
},
|
||
card: {
|
||
submitted: 'Submitted {{date}}',
|
||
notFiled: 'Not filed yet',
|
||
feeDue: 'Fee due',
|
||
},
|
||
table: {
|
||
licence: 'Licence',
|
||
applicant: 'Applicant',
|
||
progress: 'Progress',
|
||
},
|
||
actions: {
|
||
continue: 'Continue',
|
||
fixResubmit: 'Fix & resubmit',
|
||
pay: 'Pay {{amount}} {{currency}}',
|
||
certificate: 'Certificate',
|
||
view: 'View',
|
||
bypass: 'Bypass payment',
|
||
renew: 'Renew',
|
||
},
|
||
notice: {
|
||
paymentReceived:
|
||
'Your payment has been received. The certificate is being prepared and will appear under Licences once it is issued.',
|
||
expiringSoon_one: 'A licence is expiring soon',
|
||
expiringSoon_other: '{{count}} licences are expiring soon',
|
||
},
|
||
licences: {
|
||
empty: 'No licence has been issued to you yet. One appears here once an application is approved and paid.',
|
||
},
|
||
status: {
|
||
DRAFT: 'Draft',
|
||
SUBMITTED: 'Submitted',
|
||
UNDER_REVIEW: 'Under Review',
|
||
UNDER_EVALUATION: 'Under Evaluation',
|
||
RESUBMIT_REQUIRED: 'Resubmit Required',
|
||
INSPECTION_PENDING: 'Inspection Pending',
|
||
INSPECTION_COMPLETED: 'Inspection Completed',
|
||
APPROVED: 'Approved',
|
||
REJECTED: 'Rejected',
|
||
ON_HOLD: 'On Hold',
|
||
PAYMENT_PENDING: 'Payment Pending',
|
||
PAID: 'Paid',
|
||
PAYMENT_CONFIRMED: 'Preparing Certificate',
|
||
CERTIFICATE_ISSUED: 'Certificate Issued',
|
||
COMPLETED: 'Completed',
|
||
},
|
||
},
|
||
|
||
/** Field labels shared by the completeness nudge and the requirement gates. */
|
||
profileFields: {
|
||
firstName: 'First name',
|
||
middleName: 'Middle name',
|
||
lastName: 'Last name',
|
||
gender: 'Gender',
|
||
dob: 'Date of birth',
|
||
pob: 'Place of birth',
|
||
maritalStatus: 'Marital status',
|
||
professionId: 'Profession',
|
||
idType: 'ID type',
|
||
idNumber: 'ID number',
|
||
nationality: 'Nationality',
|
||
primaryPhoneNumber: 'Phone number',
|
||
email: 'Email address',
|
||
regionId: 'Region',
|
||
cityId: 'City',
|
||
subCityId: 'Sub-city',
|
||
woredaId: 'Woreda',
|
||
streetAddress: 'Street address',
|
||
emergencyContactName: 'Emergency contact name',
|
||
emergencyContactPhone: 'Emergency contact phone',
|
||
emergencyContactRelation: 'Emergency contact relationship',
|
||
},
|
||
|
||
profileNudge: {
|
||
title: 'Finish setting up your profile',
|
||
body: 'Still needed: {{fields}}',
|
||
andMore: 'and {{count}} more',
|
||
action: 'Complete profile',
|
||
dismiss: 'Dismiss',
|
||
},
|
||
|
||
profileGate: {
|
||
title_one: 'We need {{count}} more detail before you continue',
|
||
title_other: 'We need {{count}} more details before you continue',
|
||
addDetails: 'Add these details',
|
||
viewProfile: 'View full profile',
|
||
seafarerReason:
|
||
'Seafarer registration is built from your profile — these details fill it in for you.',
|
||
seafarerRedirect: 'Finish your profile to register as a seafarer. Still needed: {{fields}}',
|
||
},
|
||
|
||
profileSections: {
|
||
personal: 'Personal',
|
||
address: 'Identity & Address',
|
||
emergency: 'Emergency Contact',
|
||
documents: 'Documents',
|
||
completeness: '{{value}}% complete',
|
||
saveSection: 'Save this section',
|
||
sectionSaved: 'Saved',
|
||
},
|
||
|
||
profile: {
|
||
title: 'My Profile',
|
||
subtitle: 'Manage your account details and preferences.',
|
||
personal: 'Personal information',
|
||
contact: 'Contact',
|
||
preferences: 'Preferences',
|
||
security: 'Security',
|
||
securityHint: 'Choose a strong password you do not use anywhere else.',
|
||
changePassword: 'Change password',
|
||
updatePassword: 'Update password',
|
||
updateProfile: 'Save changes',
|
||
savePreferences: 'Save preferences',
|
||
cancel: 'Cancel',
|
||
verified: 'Verified',
|
||
unverified: 'Unverified',
|
||
tabs: {
|
||
profile: 'Profile',
|
||
security: 'Security',
|
||
preferences: 'Preferences',
|
||
},
|
||
personalHint: 'Your name as it appears on official EMA documents.',
|
||
languageTitle: 'Language',
|
||
languageHint: 'Choose the language used across the EMA portal.',
|
||
appearance: {
|
||
title: 'Appearance',
|
||
subtitle: 'Select how the portal looks on your device.',
|
||
light: 'Light',
|
||
dark: 'Dark',
|
||
system: 'System',
|
||
},
|
||
twoStep: {
|
||
title: 'Two-step verification',
|
||
desc: 'Require a one-time code from your phone each time you sign in.',
|
||
},
|
||
notifications: {
|
||
title: 'Email notifications',
|
||
desc: 'Receive updates about your license applications and account activity by email.',
|
||
},
|
||
strength: {
|
||
label: 'Password strength',
|
||
weak: 'Weak',
|
||
fair: 'Fair',
|
||
good: 'Good',
|
||
strong: 'Strong',
|
||
},
|
||
profileUpdated: 'Profile updated successfully',
|
||
passwordChanged: 'Password changed successfully',
|
||
updateFailed: 'Could not update profile. Please try again.',
|
||
passwordFailed:
|
||
'Could not change password. Check your current password and try again.',
|
||
fields: {
|
||
fullNameEn: 'Full name (English)',
|
||
fullNameAm: 'Full name (Amharic)',
|
||
username: 'Username',
|
||
usernameHint: 'Username cannot be changed',
|
||
organization: 'Organization',
|
||
email: 'Email address',
|
||
phone: 'Phone number',
|
||
address: 'Address',
|
||
language: 'Preferred language',
|
||
currentPassword: 'Current password',
|
||
newPassword: 'New password',
|
||
confirmPassword: 'Confirm new password',
|
||
},
|
||
validation: {
|
||
nameRequired: 'Name is required',
|
||
emailInvalid: 'Enter a valid email',
|
||
usernameRequired: 'Username is required',
|
||
phoneRequired: 'Phone number is required',
|
||
passwordMin: 'Password must be at least 8 characters',
|
||
passwordMismatch: 'Passwords do not match',
|
||
},
|
||
},
|
||
|
||
country: {
|
||
select: 'Select a country',
|
||
notFound: 'No countries found',
|
||
},
|
||
|
||
location: {
|
||
select: 'Select...',
|
||
noOptions: 'No options found',
|
||
noLocationsAvailable: 'No locations available',
|
||
chooseFirst: 'Choose a location first',
|
||
loading: 'Loading locations...',
|
||
loadFailed: 'Could not load locations',
|
||
},
|
||
|
||
support: {
|
||
title: 'Help & Support',
|
||
subtitle: 'Guidance, contact channels and answers to common questions.',
|
||
contact: 'Contact the Authority',
|
||
phone: 'Phone',
|
||
email: 'Email',
|
||
office: 'Head office',
|
||
officeValue: 'Addis Ababa, Ethiopia',
|
||
hours: 'Working hours',
|
||
hoursValue: 'Mon–Fri, 8:30 AM – 5:00 PM',
|
||
faq: 'Frequently asked questions',
|
||
faqs: {
|
||
q1: 'How long does licence processing take?',
|
||
a1: 'Most applications are reviewed within 5–15 working days, depending on the licence type and completeness of your documents.',
|
||
q2: 'What happens after I submit an application?',
|
||
a2: 'Your application is assigned to a licensing officer who verifies your documents. You can track every status change from the My Applications page.',
|
||
q3: 'How do I renew an expiring licence?',
|
||
a3: 'Open the licence from My Licences and choose Renew, or start a new application and select the Renewal request type.',
|
||
q4: 'What if EMA requests more information?',
|
||
a4: 'You will see an "Action required" notice on the application. Provide the requested document or detail to resume the review.',
|
||
},
|
||
},
|
||
|
||
waiver: {
|
||
title: 'Maritime Waiver',
|
||
subtitle: 'Apply for a waiver when Ethiopian Shipping & Logistics cannot carry your shipment. Approval issues the bank waiver letter.',
|
||
preWaiver: {
|
||
title: 'Pre-waiver',
|
||
body: 'The cargo has not yet arrived. Applying before arrival avoids the post-waiver penalty.',
|
||
apply: 'Apply for a pre-waiver',
|
||
},
|
||
postWaiver: {
|
||
title: 'Post-waiver',
|
||
body: 'The cargo has already arrived. Granted once per shipment, and only against a settled penalty with the receipt attached.',
|
||
apply: 'Apply for a post-waiver',
|
||
},
|
||
oneShipmentNotice: 'Each waiver covers one shipment, identified by its bill of lading. A second application quoting the same bill of lading is refused while the first is live.',
|
||
inProgress: 'Applications in progress',
|
||
issuedLetters: 'Issued waiver letters',
|
||
emptyLetters: 'No waiver letters issued yet.',
|
||
columns: {
|
||
reference: 'Reference',
|
||
kind: 'Kind',
|
||
issued: 'Issued',
|
||
status: 'Status',
|
||
},
|
||
letter: 'Letter',
|
||
fetchFailed: 'Could not fetch the letter',
|
||
licenseStatus: {
|
||
ACTIVE: 'Active',
|
||
EXPIRED: 'Expired',
|
||
SUSPENDED: 'Suspended',
|
||
CANCELLED: 'Cancelled',
|
||
SUPERSEDED: 'Superseded',
|
||
},
|
||
},
|
||
};
|
||
|
||
export type Translations = typeof en;
|