/opt/canhelp/apps/api/src/routes
Edit: /opt/canhelp/apps/api/src/routes/i18n.ts (167086B)
import { Hono } from 'hono'
type Locale = 'el' | 'en' | 'ru' | 'uk'
// Nested structure — matches Flutter app's _bundledFallback format
const translations: Record
> = {
el: {
common: {
loading: 'Φόρτωση...',
error: 'Σφάλμα',
retry: 'Επανάληψη',
cancel: 'Ακύρωση',
search: 'Αναζήτηση...',
send: 'Αποστολή',
block: 'Αποκλεισμός',
share: 'Κοινοποίηση',
favorites: 'Αγαπημένα',
save: 'Αποθήκευση',
ok: 'ΟΚ',
back: 'Πίσω',
optional: 'προαιρετικό',
required: 'Υποχρεωτικό',
guest: 'Επισκέπτης',
},
nav: {
home: 'Αρχική',
tasks: 'Εργασίες',
chat: 'Συνομιλίες',
notifications: 'Ειδοποιήσεις',
favorites: 'Αγαπημένα',
specialists: 'Προσφορές',
login: 'Σύνδεση',
register: 'Εγγραφή',
dashboard: 'Οι εργασίες μου',
profile: 'Προφίλ',
logout: 'Αποσύνδεση',
findTasks: 'Βρες εργασία',
newTask: 'Νέα εργασία',
schedule: 'Πρόγραμμα',
pricing: 'Πλάνα & Τιμές',
search: 'Αναζήτηση',
},
home: {
heroTitle: 'Κάθε άνθρωπος έχει κάτι να προσφέρει',
heroSubtitle: 'Βρες βοήθεια, πρόσφερε τις δεξιότητές σου ή κέρδισε βοηθώντας άλλους',
postTask: 'Ζήτησε βοήθεια',
browseTasks: 'Βρες εργασία',
heroBecomeSpecialist: 'Πρόσφερε βοήθεια',
heroFindSpecialist: 'Βρες εργασία',
howItWorks: 'Πώς λειτουργεί',
step1Title: 'Δημοσίευσε εργασία',
step1Desc: 'Περίγραψε τι χρειάζεσαι και ορίζε τον προϋπολογισμό σου',
step2Title: 'Λάβε προσφορές',
step2Desc: 'Ειδικοί θα σου στείλουν προσφορές',
step3Title: 'Επίλεξε & ξεκίνα',
step3Desc: 'Επέλεξε τον καλύτερο και ξεκίνα τη συνεργασία',
popularCategories: 'Δημοφιλείς κατηγορίες',
searchPlaceholder: 'Τι χρειάζεσαι;',
nearYou: 'Κοντά σου',
seeAll: 'Δες όλα',
map: 'Χάρτης',
noTasksNearbyTitle: 'Δεν υπάρχουν ακόμη εργασίες κοντά σου',
openMapCta: 'Άνοιγμα χάρτη',
becomeSpecialistTitle: 'Θέλεις να κερδίζεις από εργασίες;',
becomeSpecialistSubtitle: 'Δημιούργησε προφίλ ειδικού και λάβε αιτήματα από πελάτες κοντά σου.',
becomeSpecialistCta: 'Γίνε ειδικός',
selectCity: 'Επιλογή πόλης',
greeting: 'Γεια, {name} 👋',
greetingAnon: 'Γεια 👋',
recentRequests: 'Πρόσφατες αιτήσεις',
negotiable: 'Διαπραγματεύσιμο',
specialistHeroTitle: 'Βρες εργασίες κοντά σου',
specialistHeroSubtitle: 'Ανακάλυψε εργασίες στις κατηγορίες σου και στείλε προσφορά',
specialistBrowseTasks: 'Βρες εργασίες',
specialistGoToDashboard: 'Πίνακας ειδικού',
specialistPopularCategories: 'Εργασίες ανά κατηγορία',
specialistStep1Title: 'Δημιούργησε κάρτα ειδικού',
specialistStep1Desc: 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα',
specialistStep2Title: 'Βρες σχετικές εργασίες',
specialistStep2Desc: 'Ανακάλυψε εργασίες στις κατηγορίες σου',
specialistStep3Title: 'Στείλε προσφορά & κέρδισε',
specialistStep3Desc: 'Υποβάλε προσφορά με τιμή και χρόνο και ολοκλήρωσε εργασίες',
becomeSpecialist: {
badge: 'Δωρεάν εγγραφή',
title: 'Κέρδισε χρήματα κάνοντας αυτό που ξέρεις',
subtitle: 'Δημιούργησε προφίλ ειδικού και λάβε παραγγελίες από πελάτες σε όλη την Ελλάδα',
step1: { title: 'Δημιούργησε κάρτα ειδικού', desc: 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα' },
step2: { title: 'Βρες εργασίες', desc: 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Βρες εργασία»' },
step3: { title: 'Στείλε προσφορά & κέρδισε', desc: 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες' },
benefit1: 'Αναζήτηση ανά κατηγορία & τοποθεσία',
benefit2: 'Δημόσιο προφίλ με αξιολογήσεις',
benefit3: 'Πρόγραμμα διαθεσιμότητας για πελάτες',
benefit4: 'Προσθήκη στα αγαπημένα πελατών',
cta: 'Περισσότερα',
},
community: {
title: 'Το CanHelp είναι κοινότητα',
subtitle: 'Δεν είναι απλώς αγορά — είναι κοινότητα αμοιβαίας βοήθειας. Όποιος έχει δεξιότητα βρίσκει πελάτη. Όποιος έχει πρόβλημα βρίσκει ειδικό.',
point1: { title: 'Είσαι ειδικός;', desc: 'Επισκευές, μαθήματα, σχεδιασμός, μεταφράσεις — κάθε δεξιότητα αξίζει. Δημιούργησε προφίλ και βρες πελάτες κοντά σου.' },
point2: { title: 'Χρειάζεσαι βοήθεια;', desc: 'Δημοσίευσε εργασία σε λιγότερο από ένα λεπτό και λάβε προσφορές από επαληθευμένους ειδικούς στην πόλη σου.' },
point3: { title: 'Βοήθησε το έργο να αναπτυχθεί', desc: 'Μοιράσου τον σύνδεσμο με φίλους — μαζί χτίζουμε κάτι χρήσιμο για όλους.' },
share: 'Μοιράσου με φίλους',
shareCopied: 'Σύνδεσμος αντιγράφηκε!',
},
referral: {
badge: 'Πρόγραμμα παραπομπών',
title: 'Κάλεσε φίλους — κέρδισε ανταμοιβές',
subtitle: 'Μοιράσου τον σύνδεσμό σου — κάθε νέος χρήστης που εγγράφεται αποφέρει ανταμοιβή.',
step1: { title: 'Εγγραφείσε και λάβε σύνδεσμο', desc: 'Δημιούργησε λογαριασμό και βρες τον μοναδικό σου σύνδεσμο παραπομπής στο προφίλ σου.' },
step2: { title: 'Μοιράσου με φίλους', desc: 'Στείλε τον σύνδεσμο σε φίλους ή δημοσίευσέ τον στα social media.' },
step3: { title: 'Κέρδισε ανταμοιβές', desc: 'Μόλις ο φίλος σου επαληθεύσει το email του, λαμβάνεις αυτόματα την ανταμοιβή σου.' },
cta: 'Πάρε τον σύνδεσμό σου',
},
},
stats: {
specialists: 'προσφορές',
tasks: 'εργασίες',
categories: 'κατηγορίες',
free: 'δωρεάν εγγραφή',
},
tasks: {
allCategories: 'Όλες',
searchPlaceholder: 'Αναζήτηση εργασιών...',
seeAll: 'Δες όλα',
posted: 'Δημοσιεύτηκε',
timeAgo: { justNow: 'μόλις τώρα', mAgo: '{n}λ πριν', hAgo: '{n}ω πριν', yesterday: 'χθες', dAgo: '{n}ημ πριν', wAgo: '{n}εβ πριν', moAgo: '{n}μήν πριν', yAgo: '{n}έτοσ πριν' },
emptyMessage: 'Δεν βρέθηκαν εργασίες. Δημοσίευσε την πρώτη!',
createTask: 'Νέα εργασία',
makeOffer: 'Υποβολή προσφοράς',
budget: 'Προϋπολογισμός',
category: 'Κατηγορία',
location: 'Τοποθεσία',
deadline: 'Ημερομηνία έναρξης',
deadlineOutdated: 'Η ημερομηνία έναρξης είναι στο παρελθόν — ανανεώστε την',
title: 'Τίτλος',
description: 'Περιγραφή',
submit: 'Δημοσίευση εργασίας',
statusOpen: 'Ανοιχτή',
statusInProgress: 'Σε εξέλιξη',
statusCompleted: 'Ολοκληρωμένη',
statusDraft: 'Πρόχειρο',
statusCancelled: 'Ακυρωμένη',
anyLocation: 'Οπουδήποτε',
anyLanguage: 'Οποιαδήποτε γλώσσα',
filters: 'Φίλτρα',
applyFilters: 'Εφαρμογή',
resetFilters: 'Επαναφορά',
showTasks: 'Εμφάνιση εργασιών',
forMe: 'Κατάλληλες για μένα',
allTasks: 'Όλες οι εργασίες',
allCategories2: 'Όλες οι κατηγορίες',
budgetRange: 'Προϋπολογισμός (€)',
budgetFrom: 'Από',
budgetTo: 'Έως',
entireCity: 'Όλη η πόλη',
notFound: 'Δεν βρέθηκε εργασία',
respond: 'Απάντηση',
offersEmpty: 'Δεν υπάρχουν απαντήσεις',
myTask: 'Η εργασία μου',
details: 'Λεπτομέρειες',
negotiable: 'διαπραγματεύσιμη',
budgetNegotiable: 'Διαπραγματεύσιμη',
time: 'Ώρα',
photos: 'Φωτογραφίες',
offers: 'Προσφορές',
customer: 'Πελάτης',
specialist: 'Ειδικός',
offerAccepted: 'Αποδεκτό',
offerDeclined: 'Απορρίφθηκε',
offerPending: 'Αναμονή',
yourOffer: 'Η προσφορά σας',
edit: 'Επεξεργασία',
editSaved: 'Η εργασία ενημερώθηκε',
editTitle: 'Επεξεργασία εργασίας',
editStatusLabel: 'Κατάσταση',
startDate: 'Ημερομηνία έναρξης',
expiresAt: 'Ενεργό έως',
expiresAtOutdated: 'Η αγγελία έχει λήξει — ανανεώστε την',
expiresAtRequired: 'Ορίστε ημερομηνία λήξης',
createdAt: 'Δημιουργήθηκε',
confidential: 'Εμπιστευτικά στοιχεία',
chooseOffer: 'Επιλογή προσφοράς',
chooseOfferOne: 'Επιλογή προσφοράς · 1 προσφορά',
chooseOfferMany: 'Επιλογή προσφοράς · {count} προσφορές',
},
offers: {
title: 'Προσφορές',
noOffers: 'Δεν υπάρχουν προσφορές ακόμα',
accept: 'Αποδοχή',
decline: 'Απόρριψη',
yourPrice: 'Η τιμή σου (€)',
messagePlaceholder: 'Περίγραψε την εμπειρία ή προσέγγισή σου...',
submit: 'Αποστολή προσφοράς',
successMessage: 'Η προσφορά σου στάλθηκε!',
},
category: {
cleaning: 'Καθαρισμός',
plumbing: 'Υδραυλικά',
electrical: 'Ηλεκτρολογικά',
moving: 'Μετακόμιση',
tutoring: 'Μαθήματα',
beauty: 'Ομορφιά',
it_support: 'IT Υποστήριξη',
repairs: 'Επισκευές',
other: 'Άλλο',
},
auth: {
login: 'Σύνδεση',
register: 'Εγγραφή',
signIn: 'Σύνδεση',
createAccount: 'Δημιουργία λογαριασμού',
orContinueWith: 'Ή συνέχεια με',
continueWithGoogle: 'Συνέχεια με Google',
continueWithApple: 'Συνέχεια με Apple',
termsPrefix: 'Αποδέχομαι τους',
termsLink: 'Όρους χρήσης',
termsAnd: 'και τους',
communityRulesLink: 'Κανόνες κοινότητας',
termsTitle: 'Όροι χρήσης',
termsBody: 'Χρησιμοποιώντας το CanHelp, συμφωνείτε να μην δημοσιεύετε spam, παραπλανητικό, προσβλητικό ή παράνομο περιεχόμενο. Οι παραβάτες ενδέχεται να αποκλειστούν και το περιεχόμενο να αφαιρεθεί. Με τη δημοσίευση εργασιών και μηνυμάτων, αποδέχεστε την ευθύνη για το περιεχόμενό τους.',
termsRequired: 'Επιβεβαιώστε ότι αποδέχεστε τους όρους χρήσης.',
email: 'Email',
password: 'Κωδικός',
firstName: 'Όνομα',
lastName: 'Επώνυμο',
role: 'Ρόλος',
roleCustomer: 'Πελάτης',
roleSpecialist: 'Ειδικός',
roleAdmin: 'Διαχειριστής',
noAccount: 'Δεν έχεις λογαριασμό;',
haveAccount: 'Έχεις ήδη λογαριασμό;',
loginRequired: 'Απαιτείται σύνδεση',
invalidEmail: 'Εισάγετε έγκυρο email',
invalidPassword: 'Εισάγετε κωδικό',
forgotPassword: 'Ξεχάσατε τον κωδικό;',
resetPassword: 'Επαναφορά κωδικού',
resetEmailSent: 'Το email στάλθηκε!',
resetEmailSentDesc: 'Ελέγξτε το email σας για οδηγίες επαναφοράς κωδικού.',
backToLogin: 'Επιστροφή στη σύνδεση',
newPassword: 'Νέος κωδικός',
confirmPassword: 'Επιβεβαίωση κωδικού',
setNewPassword: 'Ορισμός νέου κωδικού',
passwordChanged: 'Ο κωδικός άλλαξε!',
passwordChangedDesc: 'Μπορείτε τώρα να συνδεθείτε με τον νέο σας κωδικό.',
passwordTooShort: 'Ο κωδικός πρέπει να έχει τουλάχιστον 8 χαρακτήρες',
passwordMismatch: 'Οι κωδικοί δεν ταιριάζονται',
invalidResetToken: 'Ο σύνδεσμός επαναφοράς δεν είναι έγκυρος ή έχει λήξει',
emailNotVerified: 'Το email σας δεν έχει επαληθευτεί. Ελέγξτε τα εισερχόμενά σας.',
unverifiedTitle: 'Επιβεβαιώστε το email σας',
unverifiedDesc: 'Στείλαμε σύνδεσμο επαλήθευσης στο {email}. Ανοίξτε τον για να ενεργοποιήσετε τον λογαριασμό σας.',
resendVerification: 'Επανάληψη αποστολής email επαλήθευσης',
resendSending: 'Αποστολή…',
resendSent: 'Εστάλη — ελέγξτε τα εισερχόμενα',
},
safety: {
moreActions: 'Περισσότερες ενέργειες',
report: 'Αναφορά',
reportUser: 'Αναφορά χρήστη',
blockUser: 'Αποκλεισμός χρήστη',
reportUserTitle: 'Αναφορά χρήστη',
reportTaskTitle: 'Αναφορά εργασίας',
blockUserTitle: 'Αποκλεισμός χρήστη;',
blockUserDesc: 'Δεν θα βλέπετε πλέον το περιεχόμενο αυτού του χρήστη σε συνομιλίες και λίστες ειδικών.',
reportSent: 'Η αναφορά στάλθηκε',
blockedNowHidden: 'Ο χρήστης αποκλείστηκε και κρύφτηκε από τη ροή σας',
userBlocked: 'Αυτός ο χρήστης είναι αποκλεισμένος',
unblockUser: 'Άρση αποκλεισμού χρήστη',
unblocked: 'Ο αποκλεισμός του χρήστη αφαιρέθηκε',
reasonSpam: 'Ανεπιθύμητο (spam)',
reasonInappropriate: 'Ακατάλληλο περιεχόμενο',
reasonFraud: 'Απάτη',
reasonDuplicate: 'Διπλότυπο',
reasonOther: 'Άλλο',
},
app: {
slogan: '🇬🇷 Υπηρεσίες στην Ελλάδα',
},
profile: {
title: 'Προφίλ',
editProfile: 'Επεξεργασία',
bio: 'Σχετικά με εμένα',
bioHint: 'Πες μας για σένα...',
skills: 'Δεξιότητες',
addSkill: 'Προσθήκη δεξιότητας',
phone: 'Τηλέφωνο',
firstName: 'Όνομα',
lastName: 'Επώνυμο',
memberSince: 'Μέλος από',
logout: 'Αποσύνδεση',
language: 'Γλώσσα εφαρμογής',
languages: 'Γλώσσες επικοινωνίας',
rating: 'Βαθμολογία',
reviews: 'Αξιολογήσεις',
balance: 'Υπόλοιπο',
save: 'Αποθήκευση',
saved: 'Αποθηκεύτηκε',
noReviews: 'Δεν υπάρχουν αξιολογήσεις',
emailVerified: 'Email επαληθεύτηκε',
emailNotVerified: 'Email μη επαληθευμένο',
verifiedBadge: 'Επαληθευμένος ειδικός',
categories: 'Κατηγορίες',
locations: 'Τοποθεσίες',
services: 'Υπηρεσίες',
personalSite: 'Προσωπικός ιστότοπος',
becomeSpecialist: 'Γίνε ειδικός',
tabInfo: 'Πληροφορίες',
tabCards: 'Προσφορές',
tabStatus: 'Κατάσταση',
tabNotifications: 'Ειδοποιήσεις',
blockedUsers: 'Αποκλεισμένοι χρήστες',
blockedUsersEmpty: 'Δεν έχετε αποκλεισμένους χρήστες.',
tabReviews: 'Αξιολογήσεις',
cardsCount: 'Προσφορές',
cardsAdd: 'Προσθήκη προσφοράς',
completedJobs: 'Ολοκληρωμένες',
positive: 'Θετικά',
yearsOn: 'Χρόνια',
cardsNewTitle: 'Τίτλος νέας προσφοράς',
cardsPlaceholder: 'Π.χ. Υδραυλικά, καθαρισμός...',
cardsCreate: 'Δημιουργία',
cardsCancel: 'Ακύρωση',
cardsDeleteConfirm: 'Διαγραφή αυτής της προσφοράς;',
cardsActive: 'Ενεργή',
cardsInactive: 'Ανενεργή',
cardsEmpty: 'Δεν υπάρχουν προσφορές',
cardsTitleLabel: 'Τίτλος προσφοράς',
cardsDescLabel: 'Περιγραφή',
cardsDescHint: 'Περιγράψτε τις υπηρεσίες σας...',
offer_stats: {
active: 'ενεργές',
pending: 'υπό έλεγχο',
drafts: 'πρόχειρα',
},
price_list: {
title: 'Τιμοκατάλογος',
add: 'Προσθήκη',
empty: 'Δεν έχουν προστεθεί υπηρεσίες ακόμη',
add_group: 'Προσθήκη ομάδας',
group_name: 'Όνομα ομάδας',
add_item: 'Προσθήκη υπηρεσίας',
item_name: 'Όνομα υπηρεσίας',
price: 'Τιμή (€)',
},
listing_requirements: {
title: 'Το προφίλ σας δεν εμφανίζεται ακόμη στις προσφορές',
hint: 'Για να εμφανιστεί η κάρτα, ολοκληρώστε αυτές τις προϋποθέσεις:',
card_title: 'Η κάρτα δεν εμφανίζεται στις προσφορές',
bio: 'Προσθέστε ένα σύντομο βιογραφικό στην κύρια ενότητα του προφίλ',
active_card: 'Δημιουργήστε και ενεργοποιήστε τουλάχιστον μία κάρτα',
categories: 'Προσθέστε τουλάχιστον μία κατηγορία στην ενεργή κάρτα',
locations: 'Προσθέστε τουλάχιστον μία τοποθεσία στην ενεργή κάρτα',
card_inactive: 'Κάντε την κάρτα ενεργή',
review_pending: 'Η κάρτα είναι υπό έλεγχο',
review_rejected: 'Η κάρτα απορρίφθηκε',
},
card: {
review_pending: 'Υπό έλεγχο',
review_submitted: 'Η κάρτα στάλθηκε για έλεγχο',
review_approved: 'Η κάρτα εγκρίθηκε',
review_rejected: 'Η κάρτα απορρίφθηκε',
submit_review: 'Αποστολή για έλεγχο',
cancel_review: 'Ακύρωση ελέγχου',
cancel_review: 'Ακύρωση ελέγχου',
},
tabReferral: 'Referral',
tab: { referral: 'Referral', site: 'Προσωπική σελίδα' },
site: {
slug_taken: 'Αυτή η διεύθυνση είναι ήδη κατειλημμένη',
slugHint: 'Ορίστε μοναδική διεύθυνση για την προσωπική σας σελίδα',
slugSaved: '✓ Αποθηκεύτηκε',
copy: 'Αντιγραφή συνδέσμου',
copied: 'Αντιγράφηκε!',
openSite: 'Άνοιγμα',
theme: 'Θέμα',
themeDark: 'Σκοτεινό',
themeLight: 'Φωτεινό',
nameAlwaysShown: 'Το όνομα και η φωτογραφία εμφανίζονται πάντα',
visible_title: 'Τι εμφανίζεται στη σελίδα σας',
visible: {
name: 'Όνομα και φωτογραφία',
bio: 'Βιογραφικό',
rating: 'Βαθμολογία και αξιολογήσεις',
reviews: 'Τμήμα αξιολογήσεων',
services: 'Κάρτες υπηρεσιών',
portfolio: 'Χαρτοφυλάκιο',
contacts: 'Τηλέφωνο επικοινωνίας',
full_last_name: 'Πλήρες επώνυμο',
status: 'Κατάσταση «Είμαι διαθέσιμος»',
},
},
referral: {
title: 'Πρόγραμμα παραπομπής',
desc: 'Μοιραστείτε τον σύνδεσμό σας — κάθε νέος χρήστης που εγγράφεται μέσω του λινκ σας ενεργοποιεί ανταμοιβή.',
link_label: 'Ο σύνδεσμός σας',
copy: 'Αντιγραφή',
copied: 'Αντιγράφηκε!',
share: 'Κοινοποίηση με φίλους',
invited_count: 'Χρήστες που εγγράφηκαν',
no_code: 'Δεν υπάρχει κωδικός παραπομπής.',
},
balanceHistory: {
title: 'Ιστορικό υπολοίπου',
empty: 'Δεν υπάρχουν συναλλαγές',
after: 'Υπόλοιπο μετά',
kind: {
topup: 'Κατάθεση',
planPurchase: 'Αγορά πλάνου',
adminTopUp: 'Κατάθεση από διαχειριστή',
adminAdjustment: 'Διόρθωση διαχειριστή',
},
},
plan_history: {
title: 'Ιστορικό πλάνου',
empty: 'Δεν υπάρχουν αλλαγές πλάνου',
expires: 'Έως',
days: 'ημέρες',
event: {
activated: 'Ενεργοποιήθηκε',
renewed: 'Ανανεώθηκε',
downgraded: 'Υποβαθμίστηκε',
referral_reward: 'Επιβράβευση παραπομπής',
admin_change: 'Αλλαγή διαχειριστή',
expired: 'Έληξε',
},
},
},
portfolio: {
title: 'Χαρτοφυλάκιο',
add: 'Προσθήκη φωτογραφίας',
addTitle: 'Προσθήκη φωτογραφίας',
titleHint: 'Τίτλος (προαιρετικό)',
upload: 'Μεταφόρτωση',
titleLabel: 'Τίτλος',
descLabel: 'Περιγραφή',
editTitle: 'Επεξεργασία',
deleteConfirm: 'Διαγραφή αυτής της εικόνας;',
empty: 'Δεν υπάρχουν στοιχεία χαρτοφυλακίου',
},
topup: {
title: 'Ανανέωση υπολοίπου',
topup: 'Ανανέωση',
amountLabel: 'Ποσό (EUR)',
amountError: 'Εισάγετε ποσό από 1 έως 9999 EUR',
pay: 'Μετάβαση στην πληρωμή',
info: 'Μετά την πληρωμή το υπόλοιπό σας θα ενημερωθεί αυτόματα. Η πληρωμή γίνεται μέσω ασφαλούς πύλης ePay.',
gatewayError: 'Σφάλμα πύλης πληρωμής',
cannotOpen: 'Δεν ήταν δυνατό το άνοιγμα της σελίδας πληρωμής',
},
payment: {
back_to_profile: 'Επιστροφή στο προφίλ',
success: {
title: 'Η πληρωμή ολοκληρώθηκε',
desc: 'Το υπόλοιπο θα ενημερωθεί αυτόματα σε λίγα δευτερόλεπτα.',
},
cancelled: {
title: 'Η πληρωμή ακυρώθηκε',
desc: 'Μπορείτε να δοκιμάσετε ξανά οποιαδήποτε στιγμή.',
},
failed: {
title: 'Η πληρωμή απέτυχε',
desc: 'Ελέγξτε τα στοιχεία πληρωμής και δοκιμάστε ξανά.',
},
pending: {
title: 'Η πληρωμή επεξεργάζεται',
desc: 'Αν η πληρωμή ολοκληρώθηκε, το υπόλοιπο θα ενημερωθεί αυτόματα.',
},
},
dashboard: {
inProgress: 'Σε εξέλιξη',
completed: 'Ολοκληρωμένες',
myTasks: 'Οι εργασίες μου',
newTask: 'Νέα εργασία',
emptyTitle: 'Δεν υπάρχουν εργασίες',
emptySubtitle: 'Πάτησε "Νέα εργασία" για να δημοσιεύσεις.',
myOffers: 'Οι προσφορές μου',
invitations: 'Προσκλήσεις',
completedTasks: 'Ολοκληρωμένες εργασίες',
completedOffers: 'Ολοκληρωμένες προσφορές',
offersEmpty: 'Δεν υπάρχουν προσφορές',
offersEmptyCta: 'Βρες εργασία',
findTasksTitle: 'Βρες εργασία',
findTasksHint: 'Βρες εργασίες που ταιριάζουν στο προφίλ σου',
findSpecialistTitle: 'Βρες ειδικό',
findSpecialistHint: 'Βρες επαγγελματίες για την εργασία σου',
},
notifications: {
markAllRead: 'Σήμανση όλων ως αναγνωσμένων',
empty: 'Δεν υπάρχουν ειδοποιήσεις',
clearConfirm: 'Διαγραφή όλων των ειδοποιήσεων;',
msgNotifTitle: 'Ειδοποιήσεις μηνυμάτων',
msgNotifDesc: 'Ειδοποιήσεις για νέα μηνύματα',
newTasksTitle: 'Ειδοποιήσεις νέων εργασιών',
newTasksDesc: 'Ειδοποιήσεις email για νέες εργασίες που ταιριάζουν με το προφίλ σας',
},
chat: {
empty: 'Δεν υπάρχουν συνομιλίες',
noMessages: 'Δεν υπάρχουν μηνύματα',
inputHint: 'Γράψε μήνυμα...',
},
favorites: {
empty: 'Δεν υπάρχουν αγαπημένα',
browse: 'Εξερεύνηση ειδικών',
},
specialists: {
empty: 'Δεν βρέθηκαν ειδικοί',
online: 'Ονλαϊν',
jobs: 'εργασίες',
viewProfile: 'Προφίλ',
},
specialist: {
contact: 'Επικοινωνία',
},
offer: {
pending: 'Σε αναμονή',
accepted: 'Αποδεκτή',
declined: 'Απορρίφθηκε',
withdrawn: 'Αποσύρθηκε',
price: 'Τιμή: ',
},
search: {
placeholder: 'Αναζήτηση...',
seeAll: 'Όλες οι κατηγορίες',
subcategories: 'υποκατηγορίες',
popularSearches: 'Δημοφιλείς αναζητήσεις',
modeTasks: 'Εργασίες',
modeOffers: 'Προσφορές',
results: 'αποτελέσματα',
allInCategory: 'Όλα',
},
filter: {
category: { all: 'Όλες' },
},
map: {
filterByCategory: 'Φίλτρο κατηγορίας',
clear: 'Καθαρισμός',
},
schedule: {
busy: 'Απασχολημένος',
free: 'Ελεύθερος',
range: 'Περιοχή',
rangeSelectEnd: 'Επιλογή τέλους',
dayMon: 'Δε',
dayTue: 'Τρ',
dayWed: 'Τε',
dayThu: 'Πε',
dayFri: 'Πα',
daySat: 'Σα',
daySun: 'Κυ',
},
appbar: {
notifications: 'Ειδοποιήσεις',
chat: 'Συνομιλία',
},
createTask: {
title: 'Νέα εργασία',
mainInfo: 'Βασικά',
titleLabel: 'Τίτλος',
titleHint: 'Περιγράψτε σύντομα την εργασία',
titleMinLength: 'Τουλάχιστον 5 χαρακτήρες',
descriptionLabel: 'Περιγραφή',
descriptionHint: 'Περιγράψτε λεπτομερώς τι χρειάζεστε',
descriptionMinLength: 'Τουλάχιστον 20 χαρακτήρες',
categoryAndLocation: 'Κατηγορία και τοποθεσία',
selectCategory: 'Επιλέξτε κατηγορία',
notSelected: 'Δεν επιλέχθηκε',
locationLabel: 'Τοποθεσία',
anyLocation: 'Οπουδήποτε',
addressOptional: 'Διεύθυνση (προαιρετικό)',
district: 'Περιοχή',
street: 'Οδός',
house: 'Αριθμός',
entireCity: 'Όλη η πόλη',
budgetSection: 'Προϋπολογισμός',
budgetAmount: 'Ποσό (€)',
budgetExample: 'Π.χ.: 50',
priceNegotiable: 'Διαπραγματεύσιμη τιμή',
deadlineSection: 'Ημερομηνία δημοσίευσης',
stepReview: 'Ανασκόπηση',
dateOptional: 'Ημερομηνία (προαιρετικό)',
expiresAtLabel: 'Αγγελία ενεργή για (μέρες)',
timeLabel: 'Ώρα',
photosSection: 'Φωτογραφίες',
addPhoto: 'Φωτο',
confidentialSection: 'Επιπλέον',
confidentialNote: 'Εμπιστευτική σημείωση',
confidentialHint: '🔒 Ορατό μόνο στον επιλεγμένο ειδικό',
confidentialPlaceholder: 'Π.χ.: κωδικός θυροτηλεφώνου...',
submitTask: 'Δημοσίευση εργασίας',
created: 'Η εργασία δημοσιεύτηκε!',
uploadError: 'Σφάλμα μεταφόρτωσης',
monthJan: 'ΙΑΝ', monthFeb: 'ΦΕΒ', monthMar: 'ΜΑΡ', monthApr: 'ΑΠΡ',
monthMay: 'ΜΑΪ', monthJun: 'ΙΟΥΝ', monthJul: 'ΙΟΥΛ', monthAug: 'ΑΥΓ',
monthSep: 'ΣΕΠ', monthOct: 'ΟΚΤ', monthNov: 'ΝΟΕ', monthDec: 'ΔΕΚ',
slotAny: 'Οποιοδήποτε', slotMorning: 'Πρωί', slotAfternoon: 'Απόγευμα',
slotEvening: 'Βράδυ', slotWeekend: 'Σαββατοκύριακο',
},
error: {
unknown: 'Άγνωστο σφάλμα',
},
plan: {
free: 'Free',
pro: 'Pro',
ultimate: 'Ultimate',
upgrade: 'Αναβάθμιση',
myPlan: 'Το πλάν μου',
expiresIn: 'Λήγει σε {n} ημέρες',
dailyMessages: 'Μηνύματα/ημέρα',
dailyOrders: 'Παραγγελίες/ημέρα',
unlimited: 'Απεριόριστα',
},
support: {
title: 'Υποστήριξη',
type: { label: 'Τύπος αιτήματος', bug: 'Σφάλμα', suggestion: 'Πρόταση', other: 'Άλλο' },
subject: 'Θέμα',
subjectPlaceholder: 'Σύντομη περιγραφή...',
body: 'Μήνυμα',
bodyPlaceholder: 'Περιγράψτε λεπτομερώς το πρόβλημα ή την πρότασή σας...',
submit: 'Αποστολή',
cancel: 'Ακύρωση',
error: 'Σφάλμα αποστολής. Παρακαλώ δοκιμάστε ξανά.',
sent: {
title: 'Λάβαμε το αίτημά σας!',
body: 'Θα σας απαντήσουμε στο email σας το συντομότερο δυνατόν.',
close: 'Κλείσιμο',
},
},
pricing: {
customer: 'Πελάτης',
specialist: 'Ειδικός',
compare: 'Σύγκριση πλάνων',
purchased: '{name} ενεργοποιήθηκε',
selectPlan: 'Επιλογή πλάνου',
confirm: {
title: 'Επιβεβαίωση επιλογής πλάνου',
plan: 'Πλάνο',
prorated: 'Αναλογική έκπτωση',
effective_price: 'Προς πληρωμή',
your_balance: 'Το υπόλοιπό σας',
downgrade_info: 'Η μετάβαση θα γίνει αυτόματα μετά τη λήξη της τρέχουσας περιόδου.',
insufficient: 'Ανεπαρκές υπόλοιπο.',
top_up: 'Ανανέωση',
schedule_downgrade: 'Προγραμματισμός',
pay: 'Πληρωμή',
},
},
fomo: {
alreadyOffered: '{n} ειδικοί έχουν ήδη απαντήσει',
specialistMissed: 'Χάσατε {n} παραγγελίες',
offersReceived: 'προσφορές ελήφθησαν',
completionRate: 'ολοκληρώθηκαν',
missed_prefix: 'Χάσατε ',
missed_suffix: 'παραγγελίες',
},
upgrade: {
cta: 'Pro',
available_in: 'Διαθέσιμο στο',
},
status: {
title: 'Το στάτατυς μου',
canHelpNow: 'Διαθέσιμος τώρα',
canHelpNowDesc: 'Δείξτε ότι είστε έτοιμοι να δεχτείτε παραγγελίες τώρα',
needHelp: 'Χρειάζομαι βοήθεια',
needHelpDesc: 'Δείξτε ότι χρειάζεστε βοήθεια ειδικού',
active: 'Ενεργός',
inactive: 'Ανενεργός',
autoResponse: 'Αυτόματη απάντηση',
autoResponseDesc: 'Αυτόματη απόκριση σε νέες παραγγελίες που αντιστοιχούν με τις δεξιότητές σας',
},
autoResponse: {
title: 'Αυτόματη Απάντηση',
enabled: 'Ενεργοποίηση',
saved: 'Αποθηκεύτηκε',
},
admin: {
title: 'Πίνακας Διαχείρισης',
stats: 'Στατιστικά',
sections: 'Ενότητες',
users: 'Χρήστες',
tasks: 'Εργασίες',
reports: 'Αναφορές',
offer_moderation: {
title: 'Έλεγχος προσφορών', empty: 'Δεν υπάρχουν προσφορές για έλεγχο', approve: 'Έγκριση', deactivate: 'Απενεργοποίηση', reject: 'Απόρριψη', comment_label: 'Αιτία απόρριψης', comment_hint: 'Εξηγήστε τι πρέπει να διορθωθεί',
status: { active: 'Ενεργή', pending: 'Υπό έλεγχο', inactive: 'Πρόχειρη' },
},
search: 'Αναζήτηση...',
allRoles: 'Όλα',
allStatuses: 'Όλα',
activate: 'Ενεργοποίηση',
deactivate: 'Απενεργοποίηση',
setRole: 'Αλλαγή ρόλου',
topUp: 'Χρέωση',
withdraw: 'Ανάληψη',
amount: 'Ποσό (€)',
description: 'Περιγραφή',
balance: 'Υπόλοιπο',
cancel: 'Ακύρωση εργασίας',
deleteConfirm: 'Διαγραφή αυτής της εργασίας;',
cancelConfirm: 'Ακύρωση αυτής της εργασίας;',
reportReviewed: 'Σήμανση ως εξετασμένο',
reportDismissed: 'Απόρριψη',
reportPending: 'Εκκρεμεί',
reportReviewedLabel: 'Εξετάστηκε',
reportDismissedLabel: 'Απορρίφθηκε',
noData: 'Δεν υπάρχουν δεδομένα',
total: 'Σύνολο',
userCount: 'Χρήστες',
specialistCount: 'Ειδικοί',
taskCount: 'Εργασίες',
offerCount: 'Προσφορές',
reviewCount: 'Αξιολογήσεις',
active: 'Ενεργός',
inactive: 'Ανενεργός',
role: 'Ρόλος',
changeRoleTitle: 'Αλλαγή ρόλου',
topUpTitle: 'Χρέωση υπολοίπου',
withdrawTitle: 'Ανάληψη υπολοίπου',
actions: 'Ενέργειες',
reporter: 'Αναφέρθηκε από',
target: 'Στόχος',
status: 'Κατάσταση',
reason: 'Λόγος',
invalidAmount: 'Εισάγετε έγκυρο ποσό',
backup: 'Αντίγραφο ασφαλείας',
support: 'Υποστήριξη',
},
backup: {
title: 'Αντίγραφο ασφαλείας',
exportAll: 'Εξαγωγή ολόκληρης ΒΔ',
importAll: 'Εισαγωγή ολόκληρης ΒΔ',
exportTable: 'Εξαγωγή',
importTable: 'Εισαγωγή',
autoBackup: 'Αυτόματο αντίγραφο ασφαλείας',
autoBackupDesc: 'Δημιουργία αντιγράφου κάθε μέρα',
storedBackups: 'Αποθηκευμένα αντίγραφα',
tables: 'Πίνακες',
restore: 'Επαναφορά',
restoreConfirm: 'Επαναφορά από αυτό το αντίγραφο ασφαλείας;',
today: 'Σήμερα',
yesterday: 'Χθες',
exporting: 'Εξαγωγή...',
importing: 'Εισαγωγή...',
restoring: 'Επαναφορά...',
exportSuccess: 'Εξαγωγή επιτυχής',
importSuccess: 'Εισαγωγή επιτυχής',
restoreSuccess: 'Επαναφορά επιτυχής',
noStoredBackups: 'Δεν υπάρχουν αποθηκευμένα αντίγραφα',
pickFile: 'Επιλογή αρχείου .sql.gz',
size: 'Μέγεθος',
date: 'Ημερομηνία',
savedTo: 'Αποθηκεύτηκε στο',
},
specialist_setup: {
page_title: 'Ρύθμιση προφίλ ειδικού',
step_of: 'Βήμα {current} από {total}',
next: 'Επόμενο',
back: 'Πίσω',
skip: 'Παράλειψη',
finish: 'Ολοκλήρωση',
go_to_profile: 'Μεταβείτε στο προφίλ',
browse_tasks: 'Εξερεύνηση εργασιών',
step1: {
title: 'Καλωσήλθατε!',
subtitle: 'Ας ρυθμίσουμε το προφίλ σας',
desc: 'Ένα πλήρες προφίλ σας βοηθά να βρείτε περισσότερους πελάτες. Ακολουθήστε τα βήματα για να δημιουργήσετε το τέλειο προφίλ ειδικού.',
what_next: 'Τι θα κάνουμε:',
item1: 'Συμπλήρωση βασικών πληροφοριών',
item2: 'Προσθήκη δεξιοτήτων και κατηγοριών',
item3: 'Δημιουργία κάρτας υπηρεσίας',
item4: 'Επιλογή γεωγραφικής περιοχής',
item5: 'Αποστολή κάρτας για έλεγχο',
},
step2: {
title: 'Βασικό προφίλ',
subtitle: 'Πείτε μας για σας',
bio_label: 'Σχετικά με εμένα',
bio_placeholder: 'Περιγράψτε την εμπειρία σας, τις υπηρεσίες που προσφέρετε...',
phone_label: 'Τηλέφωνο',
phone_placeholder: '+30 6900000000',
photo_label: 'Φωτογραφία προφίλ',
photo_btn: 'Μεταφόρτωση φωτογραφίας',
photo_uploading: 'Μεταφόρτωση...',
photo_hint: 'Εμφανίζεται στο προφίλ σας',
},
step3: {
title: 'Κάρτα υπηρεσίας',
subtitle: 'Δημιουργήστε την πρώτη σας κάρτα υπηρεσίας',
title_label: 'Τίτλος κάρτας',
title_placeholder: 'Π.χ. Υδραυλικός, Ηλεκτρολόγος, Καθαρισμός...',
desc_label: 'Περιγραφή',
desc_placeholder: 'Περιγράψτε λεπτομερώς τι προσφέρετε, εμπειρία, πλεονεκτήματα...',
title_required: 'Απαιτείται τίτλος',
generate_description: 'Δημιουργία περιγραφής',
},
step4: {
title: 'Δεξιότητες & Κατηγορίες',
subtitle: 'Προσθέστε δεξιότητες και επιλέξτε κατηγορίες',
skills_label: 'Δεξιότητες',
skills_placeholder: 'Π.χ. Εγκατάσταση σωληνώσεων...',
skills_add: 'Προσθήκη',
categories_label: 'Κατηγορίες',
categories_search: 'Αναζήτηση κατηγοριών',
categories_add: 'Προσθήκη «{name}»',
categories_required: 'Επιλέξτε τουλάχιστον μία κατηγορία για συνέχεια',
},
step5: {
title: 'Γεωγραφική περιοχή',
subtitle: 'Πού παρέχετε υπηρεσίες;',
hint: 'Επιλέξτε πόλεις ή συγκεκριμένες περιοχές',
},
done: {
title: 'Η κάρτα σας είναι έτοιμη',
subtitle: 'Στείλτε την για έλεγχο',
desc: 'Μετά την έγκριση από την ομάδα μας, η κάρτα σας θα εμφανίζεται στους πελάτες.',
submit_for_review: 'Αποστολή για έλεγχο',
submitted: 'Η κάρτα στάλθηκε για έλεγχο',
},
},
become_specialist: {
hero: {
title: 'Κέρδισε χρήματα κάνοντας αυτό που ξέρεις',
subtitle: 'Δημιούργησε προφίλ ειδικού και λάβε παραγγελίες από πελάτες σε όλη την Ελλάδα',
},
how: { title: 'Πώς λειτουργεί' },
step1: {
title: 'Δημιούργησε κάρτα ειδικού',
desc: 'Δήλωσε κατηγορίες, δεξιότητες και περιοχές — το σύστημα βρίσκει εργασίες αυτόματα',
},
step2: {
title: 'Βρες εργασίες',
desc: 'Ανακάλυψε εργασίες στις κατηγορίες σου στην ενότητα «Αναζήτηση εργασιών»',
},
step3: {
title: 'Στείλε προσφορά & κέρδισε',
desc: 'Υποβάλε προσφορές με τιμή και χρόνο, επικοινωνήσε με πελάτες και ολοκλήρωσε εργασίες',
},
benefits: { title: 'Πλεονεκτήματα προφίλ ειδικού' },
benefit1: 'Αναζήτηση ανά κατηγορία & τοποθεσία',
benefit2: 'Δημόσιο προφίλ με αξιολογήσεις',
benefit3: 'Πρόγραμμα διαθεσιμότητας ορατό στους πελάτες',
benefit4: 'Προσθήκη στα αγαπημένα πελατών',
free_badge: 'Δωρεάν εγγραφή',
},
site: {
member_since: 'Μαζί μας από',
rating: 'Βαθμολογία',
completed_tasks: 'Ολοκληρώθηκαν',
languages: 'Γλώσσες',
photos: 'φωτ.',
contact_form: 'Επικοινωνία',
contact_sent: 'Το μήνυμα στάλθηκε!',
contact_sent_desc: 'Ο ειδικός θα επικοινωνήσει μαζί σας σύντομα',
contact_name: 'Όνομα',
contact_name_ph: 'Το όνομά σας',
contact_email_ph: 'your@email.com',
contact_message: 'Μήνυμα',
contact_message_ph: 'Περιγράψτε την εργασία σας...',
contact_send: 'Αποστολή',
share: 'Κοινοποίηση',
speaks_languages: 'Μιλάει',
message_sent: 'Το μήνυμα εστάλη!',
message_sent_desc: 'Ο ειδικός θα το λάβει στη συνομιλία',
message_placeholder: 'Γράψτε το μήνυμά σας...',
},
user: {
specialist_cards: 'Κάρτες υπηρεσιών',
categories: 'Κατηγορίες',
work_area: 'Περιοχή εργασίας',
},
},
en: {
common: {
loading: 'Loading...',
error: 'Something went wrong',
retry: 'Retry',
cancel: 'Cancel',
search: 'Search...',
send: 'Send',
block: 'Block',
share: 'Share',
favorites: 'Favorites',
save: 'Save',
ok: 'OK',
back: 'Back',
optional: 'optional',
required: 'Required',
guest: 'Guest',
},
nav: {
home: 'Home',
tasks: 'Tasks',
chat: 'Chat',
notifications: 'Notifications',
favorites: 'Favorites',
specialists: 'Offers',
login: 'Log in',
register: 'Sign up',
dashboard: 'My Tasks',
profile: 'Profile',
logout: 'Log out',
findTasks: 'Find Tasks',
newTask: 'New Task',
schedule: 'Schedule',
pricing: 'Plans & Pricing',
search: 'Search',
},
home: {
heroTitle: 'Everyone has something valuable to offer',
heroSubtitle: 'Find help, offer your skills, or earn money helping others',
postTask: 'Find help',
browseTasks: 'Browse tasks',
heroBecomeSpecialist: 'Offer your help',
heroFindSpecialist: 'Find a job',
howItWorks: 'How it works',
step1Title: 'Post your task',
step1Desc: 'Describe what you need and set your budget',
step2Title: 'Get offers',
step2Desc: 'Specialists send you offers to choose from',
step3Title: 'Pick & start',
step3Desc: 'Select the best offer and start working together',
popularCategories: 'Popular categories',
searchPlaceholder: 'What do you need help with?',
nearYou: 'Near you',
seeAll: 'See all',
map: 'Map',
noTasksNearbyTitle: 'No tasks nearby yet',
openMapCta: 'Open map',
becomeSpecialistTitle: 'Want to earn from tasks?',
becomeSpecialistSubtitle: 'Create a specialist profile and get requests from clients near you.',
becomeSpecialistCta: 'Become a specialist',
selectCity: 'Select city',
greeting: 'Hello, {name} 👋',
greetingAnon: 'Hello 👋',
recentRequests: 'Recent requests',
negotiable: 'Negotiable',
specialistHeroTitle: 'Find tasks near you',
specialistHeroSubtitle: 'Discover tasks in your categories and send your offer',
specialistBrowseTasks: 'Browse tasks',
specialistGoToDashboard: 'My tasks',
specialistPopularCategories: 'Tasks by category',
specialistStep1Title: 'Create a specialist card',
specialistStep1Desc: 'Set categories, skills and areas — the system finds tasks automatically',
specialistStep2Title: 'Find relevant tasks',
specialistStep2Desc: 'Browse tasks in your categories and get started right away',
specialistStep3Title: 'Send offer & earn',
specialistStep3Desc: 'Submit an offer with price and timeline, then complete the task',
becomeSpecialist: {
badge: 'Free to join',
title: 'Earn money doing what you do best',
subtitle: 'Create a specialist profile and receive orders from clients across Greece',
step1: { title: 'Create a specialist card', desc: 'Set categories, skills and areas — the system will find tasks for you automatically' },
step2: { title: 'Find tasks', desc: 'Browse tasks in your categories in the «Find tasks» section' },
step3: { title: 'Send offer & earn', desc: 'Submit offers with price and timeline, chat with clients and complete tasks' },
benefit1: 'Search by category & location',
benefit2: 'Public profile with reviews',
benefit3: 'Schedule visible to clients',
benefit4: 'Save to client favorites',
cta: 'Learn more',
},
community: {
title: 'CanHelp is a community',
subtitle: 'Not just a marketplace — a community of mutual help. Anyone with a skill can find a client; anyone with a problem can find a specialist.',
point1: { title: 'Are you a specialist?', desc: 'Repairs, lessons, design, translations, care — every skill matters. Create a profile and find clients near you.' },
point2: { title: 'Need help?', desc: 'Post a task in under a minute and get offers from verified specialists in your city.' },
point3: { title: 'Help the project grow', desc: 'Share the link with friends — together we are building something useful for everyone.' },
share: 'Share with friends',
shareCopied: 'Link copied!',
},
referral: {
badge: 'Referral program',
title: 'Invite friends — earn rewards',
subtitle: 'Share your link — every new user who registers through it earns you a reward.',
step1: { title: 'Sign up & get a link', desc: 'Create an account and find your unique referral link in your profile.' },
step2: { title: 'Share with friends', desc: 'Send the link to friends or post it on social media.' },
step3: { title: 'Earn rewards', desc: 'Once your friend verifies their email, you automatically receive your reward.' },
cta: 'Get your link',
},
},
stats: {
specialists: 'offers',
tasks: 'tasks',
categories: 'categories',
free: 'free registration',
},
tasks: {
allCategories: 'All',
searchPlaceholder: 'Search tasks...',
seeAll: 'See all',
posted: 'Posted',
timeAgo: { justNow: 'just now', mAgo: '{n}m ago', hAgo: '{n}h ago', yesterday: 'yesterday', dAgo: '{n}d ago', wAgo: '{n}w ago', moAgo: '{n}mo ago', yAgo: '{n}y ago' },
emptyMessage: 'No tasks found. Be the first to post one!',
createTask: 'New task',
makeOffer: 'Make an offer',
budget: 'Budget',
category: 'Category',
location: 'Location',
deadline: 'Start date',
deadlineOutdated: 'Start date is in the past — please update it',
title: 'Title',
description: 'Description',
submit: 'Post task',
statusOpen: 'Open',
statusInProgress: 'In progress',
statusCompleted: 'Completed',
statusDraft: 'Draft',
statusCancelled: 'Cancelled',
anyLocation: 'Any location',
anyLanguage: 'Any language',
filters: 'Filters',
applyFilters: 'Apply',
resetFilters: 'Reset',
showTasks: 'Show tasks',
forMe: 'Matching me',
allTasks: 'All tasks',
allCategories2: 'All categories',
budgetRange: 'Budget (€)',
budgetFrom: 'From',
budgetTo: 'To',
entireCity: 'Entire city',
notFound: 'Task not found',
respond: 'Respond',
offersEmpty: 'No responses yet',
myTask: 'My task',
details: 'Details',
negotiable: 'negotiable',
budgetNegotiable: 'Negotiable',
time: 'Time',
photos: 'Photos',
offers: 'Responses',
customer: 'Customer',
specialist: 'Specialist',
offerAccepted: 'Accepted',
offerDeclined: 'Declined',
offerPending: 'Pending',
yourOffer: 'Your offer',
edit: 'Edit',
editSaved: 'Task updated',
editTitle: 'Edit task',
editStatusLabel: 'Status',
startDate: 'Start date',
expiresAt: 'Active until',
expiresAtOutdated: 'Listing has expired — please update it',
expiresAtRequired: 'Please set the expiry date',
createdAt: 'Created',
confidential: 'Private info',
chooseOffer: 'Choose an offer',
chooseOfferOne: 'Choose an offer · 1 offer',
chooseOfferMany: 'Choose an offer · {count} offers',
},
offers: {
title: 'Offers',
noOffers: 'No offers yet',
accept: 'Accept',
decline: 'Decline',
yourPrice: 'Your price (€)',
messagePlaceholder: 'Describe your experience or approach...',
submit: 'Submit offer',
successMessage: 'Your offer was sent!',
},
category: {
cleaning: 'Cleaning',
plumbing: 'Plumbing',
electrical: 'Electrical',
moving: 'Moving',
tutoring: 'Tutoring',
beauty: 'Beauty',
it_support: 'IT Support',
repairs: 'Repairs',
other: 'Other',
},
auth: {
login: 'Log in',
register: 'Sign up',
signIn: 'Sign in',
createAccount: 'Create account',
orContinueWith: 'Or continue with',
continueWithGoogle: 'Continue with Google',
continueWithApple: 'Continue with Apple',
termsPrefix: 'I accept the',
termsLink: 'Terms of Use',
termsAnd: 'and',
communityRulesLink: 'Community Rules',
termsTitle: 'Terms of Use',
termsBody: 'By using CanHelp, you agree not to post spam, fraudulent, abusive, or illegal content. Violators may be blocked and content may be removed. By posting tasks and messages, you accept responsibility for their content.',
termsRequired: 'Please confirm that you accept the terms of use.',
email: 'Email',
password: 'Password',
firstName: 'First name',
lastName: 'Last name',
role: 'Role',
roleCustomer: 'Customer',
roleSpecialist: 'Specialist',
roleAdmin: 'Admin',
noAccount: "Don't have an account?",
haveAccount: 'Already have an account?',
loginRequired: 'Login required',
invalidEmail: 'Enter a valid email',
invalidPassword: 'Enter your password',
forgotPassword: 'Forgot password?',
resetPassword: 'Reset password',
resetEmailSent: 'Email sent!',
resetEmailSentDesc: 'Check your email for password reset instructions.',
backToLogin: 'Back to sign in',
newPassword: 'New password',
confirmPassword: 'Confirm password',
setNewPassword: 'Set new password',
passwordChanged: 'Password changed!',
passwordChangedDesc: 'You can now sign in with your new password.',
passwordTooShort: 'Password must be at least 8 characters',
passwordMismatch: 'Passwords do not match',
invalidResetToken: 'Reset link is invalid or has expired',
emailNotVerified: 'Your email is not verified. Please check your inbox.',
unverifiedTitle: 'Confirm your email',
unverifiedDesc: 'We sent a verification link to {email}. Open it to activate your account.',
resendVerification: 'Resend verification email',
resendSending: 'Sending…',
resendSent: 'Sent — check your inbox',
},
safety: {
moreActions: 'More actions',
report: 'Report',
reportUser: 'Report user',
blockUser: 'Block user',
reportUserTitle: 'Report user',
reportTaskTitle: 'Report task',
blockUserTitle: 'Block this user?',
blockUserDesc: 'You will no longer see this user\'s content in chats and specialist lists.',
reportSent: 'Report sent',
blockedNowHidden: 'User has been blocked and hidden from your feed',
userBlocked: 'This user is blocked',
unblockUser: 'Unblock user',
unblocked: 'User unblocked',
reasonSpam: 'Spam',
reasonInappropriate: 'Inappropriate content',
reasonFraud: 'Fraud',
reasonDuplicate: 'Duplicate',
reasonOther: 'Other',
},
app: {
slogan: '🇬🇷 Services in Greece',
},
profile: {
title: 'Profile',
editProfile: 'Edit profile',
bio: 'Bio',
bioHint: 'Tell about yourself...',
skills: 'Skills',
addSkill: 'Add skill',
phone: 'Phone',
firstName: 'First name',
lastName: 'Last name',
memberSince: 'Member since',
logout: 'Log out',
language: 'App language',
languages: 'Communication languages',
rating: 'Rating',
reviews: 'Reviews',
balance: 'Balance',
save: 'Save',
saved: 'Saved',
noReviews: 'No reviews yet',
emailVerified: 'Email verified',
emailNotVerified: 'Email not verified',
verifiedBadge: 'Verified specialist',
categories: 'Categories',
locations: 'Locations',
services: 'Services',
personalSite: 'Personal website',
becomeSpecialist: 'Become a specialist',
tabInfo: 'Info',
tabCards: 'Offers',
tabStatus: 'Status',
tabNotifications: 'Notifications',
blockedUsers: 'Blocked users',
blockedUsersEmpty: 'You have no blocked users.',
tabReviews: 'Reviews',
cardsCount: 'Offers',
cardsAdd: 'Add offer',
completedJobs: 'Completed',
positive: 'Positive',
yearsOn: 'Years',
cardsNewTitle: 'New offer title',
cardsPlaceholder: 'E.g. Plumbing, cleaning...',
cardsCreate: 'Create',
cardsCancel: 'Cancel',
cardsDeleteConfirm: 'Delete this offer?',
cardsActive: 'Active',
cardsInactive: 'Inactive',
cardsEmpty: 'No offers yet',
cardsTitleLabel: 'Offer title',
cardsDescLabel: 'Description',
cardsDescHint: 'Describe your services...',
offer_stats: {
active: 'active',
pending: 'under review',
drafts: 'drafts',
},
price_list: {
title: 'Price list',
add: 'Add',
empty: 'No services added yet',
add_group: 'Add group',
group_name: 'Group name',
add_item: 'Add service',
item_name: 'Service name',
price: 'Price (€)',
},
listing_requirements: {
title: 'Your profile is not shown yet in offers',
hint: 'To make the card visible, complete these conditions:',
card_title: 'The card is not shown in offers',
bio: 'Add a short bio in the main profile section',
active_card: 'Create and activate at least one card',
categories: 'Add at least one category to the active card',
locations: 'Add at least one location to the active card',
card_inactive: 'Make the card active',
review_pending: 'Card is under review',
review_rejected: 'Card was rejected',
},
card: {
review_pending: 'Under review',
review_submitted: 'Card submitted for review',
review_approved: 'Card approved',
review_rejected: 'Card rejected',
submit_review: 'Submit for review',
cancel_review: 'Cancel review',
cancel_review: 'Cancel review',
},
tabReferral: 'Referral',
tab: { referral: 'Referral', site: 'Personal page' },
site: {
slug_taken: 'This URL is already taken',
slugHint: 'Set your unique personal page address',
slugSaved: '✓ Saved',
copy: 'Copy link',
copied: 'Copied!',
openSite: 'Open',
theme: 'Theme',
themeDark: 'Dark',
themeLight: 'Light',
nameAlwaysShown: 'Name and photo are always shown',
visible_title: 'What is shown on your page',
visible: {
name: 'Name and photo',
bio: 'Bio',
rating: 'Rating and reviews',
reviews: 'Reviews section',
services: 'Service cards',
portfolio: 'Portfolio',
contacts: 'Contact phone',
full_last_name: 'Full last name',
status: 'Status «Available now»',
},
},
referral: {
title: 'Referral Program',
desc: 'Share your link — every new user who signs up through it will earn you a reward.',
link_label: 'Your link',
copy: 'Copy',
copied: 'Copied!',
share: 'Share with friends',
invited_count: 'Users signed up',
no_code: 'No referral code available.',
},
balanceHistory: {
title: 'Balance history',
empty: 'No transactions yet',
after: 'Balance after',
kind: {
topup: 'Balance top-up',
planPurchase: 'Plan purchase',
adminTopUp: 'Admin top-up',
adminAdjustment: 'Admin adjustment',
},
},
plan_history: {
title: 'Plan history',
empty: 'No plan changes yet',
expires: 'Until',
days: 'days',
event: {
activated: 'Activated',
renewed: 'Renewed',
downgraded: 'Downgraded',
referral_reward: 'Referral reward',
admin_change: 'Admin change',
expired: 'Expired',
},
},
},
portfolio: {
title: 'Portfolio',
add: 'Add photo',
addTitle: 'Add photo',
titleHint: 'Title (optional)',
upload: 'Upload',
titleLabel: 'Title',
descLabel: 'Description',
editTitle: 'Edit',
deleteConfirm: 'Delete this image?',
empty: 'No portfolio items yet',
},
topup: {
title: 'Top up balance',
topup: 'Top up',
amountLabel: 'Amount (EUR)',
amountError: 'Enter an amount between 1 and 9999 EUR',
pay: 'Proceed to payment',
info: 'After payment your balance will be updated automatically. Payment is processed via the secure ePay gateway.',
gatewayError: 'Payment gateway error',
cannotOpen: 'Could not open payment page',
},
payment: {
back_to_profile: 'Back to profile',
success: {
title: 'Payment successful',
desc: 'Your balance will update automatically in a few seconds.',
},
cancelled: {
title: 'Payment cancelled',
desc: 'You can try again at any time.',
},
failed: {
title: 'Payment failed',
desc: 'Check your payment details and try again.',
},
pending: {
title: 'Payment is processing',
desc: 'If payment succeeded, your balance will update automatically.',
},
},
dashboard: {
emptyTitle: 'No tasks yet',
emptySubtitle: 'Tap "New Task" to post your first task.',
myOffers: 'My Offers',
invitations: 'Invitations',
completedTasks: 'Completed Tasks',
completedOffers: 'Completed Offers',
offersEmpty: 'No offers yet',
offersEmptyCta: 'Browse tasks',
findTasksTitle: 'Find Tasks',
findTasksHint: 'Browse new tasks matching your profile',
findSpecialistTitle: 'Find a Specialist',
findSpecialistHint: 'Browse professionals to help you',
},
notifications: {
markAllRead: 'Mark all as read',
empty: 'No notifications yet',
clearConfirm: 'Delete all notifications?',
msgNotifTitle: 'Message notifications',
msgNotifDesc: 'Receive notifications for new messages',
newTasksTitle: 'New task notifications',
newTasksDesc: 'Email notifications for new tasks matching your profile',
},
chat: {
empty: 'No conversations yet',
noMessages: 'No messages yet',
inputHint: 'Type a message...',
},
favorites: {
empty: 'No favorites yet',
browse: 'Browse specialists',
},
specialists: {
empty: 'No specialists found',
online: 'Online',
jobs: 'jobs',
viewProfile: 'View profile',
},
specialist: {
contact: 'Contact',
},
offer: {
pending: 'Pending',
accepted: 'Accepted',
declined: 'Declined',
withdrawn: 'Withdrawn',
price: 'Price: ',
},
search: {
placeholder: 'Search...',
seeAll: 'All categories',
subcategories: 'subcategories',
popularSearches: 'Popular searches',
modeTasks: 'Tasks',
modeOffers: 'Offers',
results: 'results',
allInCategory: 'All',
},
filter: {
category: { all: 'All' },
},
map: {
filterByCategory: 'Filter by category',
clear: 'Clear',
},
schedule: {
available: 'Available',
busy: 'Busy',
free: 'Free',
range: 'Range',
rangeSelectEnd: 'Select end',
dayMon: 'Mo',
dayTue: 'Tu',
dayWed: 'We',
dayThu: 'Th',
dayFri: 'Fr',
daySat: 'Sa',
daySun: 'Su',
},
appbar: {
notifications: 'Notifications',
chat: 'Chat',
},
createTask: {
title: 'New task',
mainInfo: 'Main info',
titleLabel: 'Title',
titleHint: 'Briefly describe the task',
titleMinLength: 'Minimum 5 characters',
descriptionLabel: 'Description',
descriptionHint: 'Describe in detail what needs to be done',
descriptionMinLength: 'Minimum 20 characters',
categoryAndLocation: 'Category & location',
selectCategory: 'Select category',
notSelected: 'Not selected',
locationLabel: 'Location',
anyLocation: 'Any location',
addressOptional: 'Address (optional)',
district: 'District',
street: 'Street',
house: 'House',
entireCity: 'Entire city',
budgetSection: 'Budget',
budgetAmount: 'Amount (€)',
budgetExample: 'E.g.: 50',
priceNegotiable: 'Price negotiable',
deadlineSection: 'Publication date',
stepReview: 'Review',
dateOptional: 'Date (optional)',
expiresAtLabel: 'Listing active for (days)',
timeLabel: 'Time',
photosSection: 'Photos',
addPhoto: 'Photo',
confidentialSection: 'Additional',
confidentialNote: 'Confidential note',
confidentialHint: '🔒 Visible only to the selected specialist',
confidentialPlaceholder: 'E.g.: intercom code, contacts...',
submitTask: 'Post task',
created: 'Task published!',
uploadError: 'Upload error',
monthJan: 'JAN', monthFeb: 'FEB', monthMar: 'MAR', monthApr: 'APR',
monthMay: 'MAY', monthJun: 'JUN', monthJul: 'JUL', monthAug: 'AUG',
monthSep: 'SEP', monthOct: 'OCT', monthNov: 'NOV', monthDec: 'DEC',
slotAny: 'Any', slotMorning: 'Morning', slotAfternoon: 'Afternoon',
slotEvening: 'Evening', slotWeekend: 'Weekend',
},
error: {
unknown: 'Unknown error',
},
plan: {
free: 'Free',
pro: 'Pro',
ultimate: 'Ultimate',
upgrade: 'Upgrade',
myPlan: 'My plan',
expiresIn: 'Expires in {n} days',
dailyMessages: 'Messages/day',
dailyOrders: 'Orders/day',
unlimited: 'Unlimited',
},
support: {
title: 'Support',
type: { label: 'Request type', bug: 'Bug report', suggestion: 'Suggestion', other: 'Other' },
subject: 'Subject',
subjectPlaceholder: 'Brief description...',
body: 'Message',
bodyPlaceholder: 'Describe the issue or suggestion in detail...',
submit: 'Submit',
cancel: 'Cancel',
error: 'Failed to send. Please try again.',
sent: {
title: 'Request received!',
body: 'We will reply to your email as soon as possible.',
close: 'Close',
},
},
pricing: {
customer: 'Customer',
specialist: 'Specialist',
compare: 'Feature comparison',
purchased: '{name} activated',
selectPlan: 'Choose plan',
confirm: {
title: 'Confirm plan selection',
plan: 'Plan',
prorated: 'Prorated credit',
effective_price: 'Amount due',
your_balance: 'Your balance',
downgrade_info: 'The switch to the new plan will happen automatically after the current period ends.',
insufficient: 'Insufficient balance.',
top_up: 'Top up',
schedule_downgrade: 'Schedule downgrade',
pay: 'Pay',
},
},
fomo: {
alreadyOffered: '{n} specialists have already responded',
specialistMissed: 'You missed {n} orders',
offersReceived: 'offers received',
completionRate: 'completed',
missed_prefix: 'Missed ',
missed_suffix: 'orders',
},
upgrade: {
cta: 'Upgrade',
available_in: 'Available in',
},
status: {
title: 'My Status',
canHelpNow: 'Available now',
canHelpNowDesc: 'Show that you are ready to accept orders right now',
needHelp: 'Need help',
needHelpDesc: 'Show that you need a specialist right now',
active: 'Active',
inactive: 'Inactive',
autoResponse: 'Auto-response',
autoResponseDesc: 'Automatically respond to new orders matching your skills',
},
autoResponse: {
title: 'Auto-Response',
enabled: 'Enable',
saved: 'Saved',
},
admin: {
title: 'Admin Panel',
stats: 'Statistics',
sections: 'Sections',
users: 'Users',
tasks: 'Tasks',
reports: 'Reports',
offer_moderation: {
title: 'Offer moderation', empty: 'No offers to moderate', approve: 'Approve', deactivate: 'Deactivate', reject: 'Reject', comment_label: 'Reason for rejection', comment_hint: 'Explain what should be corrected',
status: { active: 'Active', pending: 'Under review', inactive: 'Draft' },
},
search: 'Search...',
allRoles: 'All',
allStatuses: 'All',
activate: 'Activate',
deactivate: 'Deactivate',
setRole: 'Change role',
topUp: 'Top up',
withdraw: 'Withdraw',
amount: 'Amount (€)',
description: 'Description',
balance: 'Balance',
cancel: 'Cancel task',
deleteConfirm: 'Delete this task?',
cancelConfirm: 'Cancel this task?',
reportReviewed: 'Mark reviewed',
reportDismissed: 'Dismiss',
reportPending: 'Pending',
reportReviewedLabel: 'Reviewed',
reportDismissedLabel: 'Dismissed',
noData: 'No data',
total: 'Total',
userCount: 'Users',
specialistCount: 'Specialists',
taskCount: 'Tasks',
offerCount: 'Offers',
reviewCount: 'Reviews',
active: 'Active',
inactive: 'Inactive',
role: 'Role',
changeRoleTitle: 'Change role',
topUpTitle: 'Top up balance',
withdrawTitle: 'Withdraw balance',
actions: 'Actions',
reporter: 'Reporter',
target: 'Target',
status: 'Status',
reason: 'Reason',
invalidAmount: 'Enter a valid amount',
backup: 'Backup',
support: 'Support',
},
backup: {
title: 'Database Backup',
exportAll: 'Export Full Database',
importAll: 'Import Full Database',
exportTable: 'Export',
importTable: 'Import',
autoBackup: 'Auto Backup',
autoBackupDesc: 'Create a backup every day automatically',
storedBackups: 'Stored Backups',
tables: 'Tables',
restore: 'Restore',
restoreConfirm: 'Restore from this backup?',
today: 'Today',
yesterday: 'Yesterday',
exporting: 'Exporting...',
importing: 'Importing...',
restoring: 'Restoring...',
exportSuccess: 'Export successful',
importSuccess: 'Import successful',
restoreSuccess: 'Restore successful',
noStoredBackups: 'No stored backups',
pickFile: 'Pick .sql.gz file',
size: 'Size',
date: 'Date',
savedTo: 'Saved to',
},
specialist_setup: {
step_of: 'Step {current} of {total}',
next: 'Next',
back: 'Back',
skip: 'Skip',
finish: 'Finish',
go_to_profile: 'Go to profile',
browse_tasks: 'Browse tasks',
step1: {
title: 'Welcome!',
subtitle: "Let's set up your profile",
desc: 'A complete profile helps you find more clients. Follow the steps to create the perfect specialist profile.',
what_next: 'What we will do:',
item1: 'Fill in basic information',
item2: 'Add skills and categories',
item3: 'Create a service card',
item4: 'Select service area',
item5: 'Submit the card for review',
},
step2: {
title: 'Basic profile',
subtitle: 'Tell us about yourself',
bio_label: 'About me',
bio_placeholder: 'Describe your experience, services you offer...',
phone_label: 'Phone',
phone_placeholder: '+30 6900000000',
photo_label: 'Profile photo',
photo_btn: 'Upload photo',
photo_uploading: 'Uploading...',
photo_hint: 'Shown on your profile',
},
step3: {
title: 'Service card',
subtitle: 'Create your first service card',
title_label: 'Card title',
title_placeholder: 'E.g. Plumber, Electrician, Cleaning...',
desc_label: 'Description',
desc_placeholder: 'Describe in detail what you offer, your experience, advantages...',
title_required: 'Title is required',
generate_description: 'Create description',
},
step4: {
title: 'Skills & Categories',
subtitle: 'Add skills and select categories',
skills_label: 'Skills',
skills_placeholder: 'E.g. Pipe installation...',
skills_add: 'Add',
categories_label: 'Categories',
categories_search: 'Search categories',
categories_add: 'Add "{name}"',
categories_required: 'Select at least one category to continue',
},
step5: {
title: 'Service area',
subtitle: 'Where do you provide services?',
hint: 'Select cities or specific areas',
},
done: {
title: 'Your card is ready',
subtitle: 'Send it for review',
desc: 'After our team approves it, your card will be visible to clients.',
submit_for_review: 'Submit for review',
submitted: 'Your card was submitted for review',
},
},
become_specialist: {
hero: {
title: 'Earn money doing what you do best',
subtitle:
'Create a specialist profile and receive orders from clients across Greece',
},
how: { title: 'How it works' },
step1: {
title: 'Create a specialist card',
desc: 'Set categories, skills and areas — the system will find tasks for you automatically',
},
step2: {
title: 'Find tasks',
desc: 'Browse tasks in your categories in the «Find tasks» section',
},
step3: {
title: 'Send offer & earn',
desc: 'Submit offers with price and timeline, chat with clients and complete tasks',
},
benefits: { title: 'Specialist profile benefits' },
benefit1: 'Search by category & location',
benefit2: 'Public profile with reviews',
benefit3: 'Schedule visible to clients',
benefit4: 'Save to client favorites',
free_badge: 'Free to join',
},
site: {
member_since: 'Member since',
rating: 'Rating',
completed_tasks: 'Completed',
languages: 'Languages',
photos: 'photos',
contact_form: 'Get in touch',
contact_sent: 'Message sent!',
contact_sent_desc: 'The specialist will contact you soon',
contact_name: 'Name',
contact_name_ph: 'Your name',
contact_email_ph: 'your@email.com',
contact_message: 'Message',
contact_message_ph: 'Describe your task...',
contact_send: 'Send',
share: 'Share',
speaks_languages: 'Speaks',
message_sent: 'Message sent!',
message_sent_desc: 'The specialist will receive it in the chat',
message_placeholder: 'Write your message...',
},
user: {
specialist_cards: 'Service cards',
categories: 'Categories',
work_area: 'Work area',
},
},
ru: {
common: {
loading: 'Загрузка...',
error: 'Что-то пошло не так',
retry: 'Повторить',
cancel: 'Отмена',
search: 'Поиск...',
send: 'Отправить',
block: 'Заблокировать',
share: 'Поделиться',
favorites: 'Избранное',
save: 'Сохранить',
ok: 'ОК',
back: 'Назад',
optional: 'необязательно',
required: 'Обязательно',
guest: 'Гость',
},
nav: {
home: 'Главная',
tasks: 'Задачи',
chat: 'Чат',
notifications: 'Уведомления',
favorites: 'Избранное',
specialists: 'Предложения',
login: 'Войти',
register: 'Регистрация',
dashboard: 'Мои задачи',
profile: 'Профиль',
logout: 'Выйти',
findTasks: 'Найти задачи',
newTask: 'Новая задача',
schedule: 'Расписание',
pricing: 'Тарифы',
search: 'Поиск',
},
home: {
heroTitle: 'Каждый человек может чем-то помочь',
heroSubtitle: 'Найди помощь, предложи свои навыки или зарабатывай, помогая другим',
postTask: 'Найти помощь',
browseTasks: 'Найти работу',
heroBecomeSpecialist: 'Предложить помощь',
heroFindSpecialist: 'Найти работу',
howItWorks: 'Как это работает',
step1Title: 'Опубликуй задачу',
step1Desc: 'Опиши что нужно и установи бюджет',
step2Title: 'Получи предложения',
step2Desc: 'Специалисты пришлют предложения на выбор',
step3Title: 'Выбери и начни',
step3Desc: 'Выбери лучшего и начни сотрудничество',
popularCategories: 'Популярные категории',
searchPlaceholder: 'Что вам нужно?',
nearYou: 'Рядом с вами',
seeAll: 'Смотреть все',
map: 'Карта',
noTasksNearbyTitle: 'Рядом пока нет задач',
openMapCta: 'Открыть карту',
becomeSpecialistTitle: 'Хотите зарабатывать на заданиях?',
becomeSpecialistSubtitle: 'Создайте профиль специалиста и получайте отклики от клиентов рядом с вами.',
becomeSpecialistCta: 'Стать специалистом',
selectCity: 'Выбрать город',
greeting: 'Привет, {name} 👋',
greetingAnon: 'Привет 👋',
recentRequests: 'Последние запросы',
negotiable: 'Договорная',
specialistHeroTitle: 'Найдите заказы рядом с вами',
specialistHeroSubtitle: 'Откройте заказы в своих категориях и отправьте предложение',
specialistBrowseTasks: 'Найти заказы',
specialistGoToDashboard: 'Мои задачи',
specialistPopularCategories: 'Заказы по категории',
specialistStep1Title: 'Создайте карточку специалиста',
specialistStep1Desc: 'Укажите категории, навыки и районы — система найдёт заказы автоматически',
specialistStep2Title: 'Найдите подходящие заказы',
specialistStep2Desc: 'Просматривайте заказы в своих категориях и начните работу сразу',
specialistStep3Title: 'Отправьте предложение и зарабатывайте',
specialistStep3Desc: 'Подайте предложение с ценой и сроками и выполните заказ',
becomeSpecialist: {
badge: 'Регистрация бесплатна',
title: 'Зарабатывайте, делая то, что умеете',
subtitle: 'Создайте профиль специалиста и получайте заказы от клиентов по всей Греции',
step1: { title: 'Создайте карточку специалиста', desc: 'Укажите категории, навыки и районы — система найдёт заказы автоматически' },
step2: { title: 'Найдите заказы', desc: 'Просматривайте заказы в своих категориях в разделе «Найти заказы»' },
step3: { title: 'Отправьте предложение и зарабатывайте', desc: 'Подавайте предложения с ценой и сроками, общайтесь с клиентами и выполняйте заказы' },
benefit1: 'Поиск по категории и локации',
benefit2: 'Публичный профиль с отзывами',
benefit3: 'Расписание видно клиентам',
benefit4: 'Добавление в избранное клиентами',
cta: 'Подробнее',
},
community: {
title: 'CanHelp — это сообщество',
subtitle: 'Не просто маркетплейс — сообщество взаимопомощи. Тот, кто умеет — найдёт клиента. У кого проблема — найдёт специалиста.',
point1: { title: 'Вы в чём-то специалист?', desc: 'Ремонт, уроки, дизайн, переводы, уход — каждый навык ценится. Создайте профиль и найдите клиентов рядом.' },
point2: { title: 'Нужна помощь?', desc: 'Опубликуйте задачу за минуту и получите предложения от проверенных специалистов в вашем городе.' },
point3: { title: 'Помогите проекту расти', desc: 'Поделитесь ссылкой с друзьями — вместе строим что-то полезное для всех.' },
share: 'Поделиться с друзьями',
shareCopied: 'Ссылка скопирована!',
},
referral: {
badge: 'Реферальная программа',
title: 'Приглашайте друзей — получайте награды',
subtitle: 'Поделитесь своей ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.',
step1: { title: 'Зарегистрируйтесь и получите ссылку', desc: 'Создайте аккаунт и найдите свою уникальную реферальную ссылку в профиле.' },
step2: { title: 'Поделитесь с друзьями', desc: 'Отправьте ссылку друзьям или опубликуйте в социальных сетях.' },
step3: { title: 'Получайте награды', desc: 'Как только друг подтвердит email, вы автоматически получите награду.' },
cta: 'Получить ссылку',
},
},
stats: {
specialists: 'предложений',
tasks: 'задач',
categories: 'категорий',
free: 'бесплатная регистрация',
},
tasks: {
allCategories: 'Все',
searchPlaceholder: 'Поиск задач...',
seeAll: 'Смотреть все',
posted: 'Опубликовано',
timeAgo: { justNow: 'только что', mAgo: '{n} мин. назад', hAgo: '{n} ч. назад', yesterday: 'вчера', dAgo: '{n} дн. назад', wAgo: '{n} нед. назад', moAgo: '{n} мес. назад', yAgo: '{n} г. назад' },
emptyMessage: 'Задачи не найдены. Опубликуй первую!',
createTask: 'Новая задача',
makeOffer: 'Отправить предложение',
budget: 'Бюджет',
category: 'Категория',
location: 'Местоположение',
deadline: 'Дата начала',
deadlineOutdated: 'Дата начала устарела — обновите её',
title: 'Название',
description: 'Описание',
submit: 'Опубликовать задачу',
statusOpen: 'Открыта',
statusInProgress: 'В работе',
statusCompleted: 'Завершена',
statusDraft: 'Черновик',
statusCancelled: 'Отменена',
anyLocation: 'Любое место',
anyLanguage: 'Любой язык',
filters: 'Фильтры',
applyFilters: 'Применить',
resetFilters: 'Сбросить',
showTasks: 'Показывать задачи',
forMe: 'Подходящие мне',
allTasks: 'Все задачи',
allCategories2: 'Все категории',
budgetRange: 'Бюджет (€)',
budgetFrom: 'От',
budgetTo: 'До',
entireCity: 'Весь город',
notFound: 'Задача не найдена',
respond: 'Откликнуться',
offersEmpty: 'Откликов пока нет',
myTask: 'Моя задача',
details: 'Детали',
negotiable: 'договорная',
budgetNegotiable: 'Договорная',
time: 'Время',
photos: 'Фото',
offers: 'Отклики',
customer: 'Заказчик',
specialist: 'Специалист',
offerAccepted: 'Принят',
offerDeclined: 'Отклонён',
offerPending: 'Ожидает',
yourOffer: 'Ваш отклик',
edit: 'Редактировать',
editSaved: 'Задание обновлено',
editTitle: 'Редактирование задания',
editStatusLabel: 'Статус',
startDate: 'Дата начала',
expiresAt: 'Активно до',
expiresAtOutdated: 'Срок действия истёк — обновите дату',
expiresAtRequired: 'Укажите дату окончания',
createdAt: 'Создано',
confidential: 'Конфиденциальные данные',
chooseOffer: 'Выбрать отклик',
chooseOfferOne: 'Выбрать отклик · 1 отклик',
chooseOfferMany: 'Выбрать отклик · {count} откликов',
},
offers: {
title: 'Предложения',
noOffers: 'Предложений пока нет',
accept: 'Принять',
decline: 'Отклонить',
yourPrice: 'Ваша цена (€)',
messagePlaceholder: 'Опишите ваш опыт или подход...',
submit: 'Отправить предложение',
successMessage: 'Ваше предложение отправлено!',
},
category: {
cleaning: 'Уборка',
plumbing: 'Сантехника',
electrical: 'Электрика',
moving: 'Переезд',
tutoring: 'Репетиторство',
beauty: 'Красота',
it_support: 'IT-поддержка',
repairs: 'Ремонт',
other: 'Другое',
},
auth: {
login: 'Войти',
register: 'Регистрация',
signIn: 'Войти',
createAccount: 'Создать аккаунт',
orContinueWith: 'Или продолжить через',
continueWithGoogle: 'Продолжить через Google',
continueWithApple: 'Продолжить через Apple',
termsPrefix: 'Я принимаю',
termsLink: 'Условия использования',
termsAnd: 'и',
communityRulesLink: 'правила сообщества',
termsTitle: 'Условия использования',
termsBody: 'Используя CanHelp, вы обязуетесь не публиковать спам, мошеннический, оскорбительный или незаконный контент. Нарушители могут быть заблокированы, а контент удалён. Отправляя задания и сообщения, вы подтверждаете ответственность за их содержание.',
termsRequired: 'Подтвердите согласие с условиями использования.',
email: 'Email',
password: 'Пароль',
firstName: 'Имя',
lastName: 'Фамилия',
role: 'Роль',
roleCustomer: 'Заказчик',
roleSpecialist: 'Специалист',
roleAdmin: 'Администратор',
noAccount: 'Нет аккаунта?',
haveAccount: 'Уже есть аккаунт?',
loginRequired: 'Требуется авторизация',
invalidEmail: 'Введите правильный email',
invalidPassword: 'Введите пароль',
forgotPassword: 'Забыли пароль?',
resetPassword: 'Сбросить пароль',
resetEmailSent: 'Письмо отправлено!',
resetEmailSentDesc: 'Проверьте почту — там инструкции по сбросу пароля.',
backToLogin: 'Вернуться ко входу',
newPassword: 'Новый пароль',
confirmPassword: 'Подтверждение пароля',
setNewPassword: 'Установить новый пароль',
passwordChanged: 'Пароль изменён!',
passwordChangedDesc: 'Теперь вы можете войти с новым паролем.',
passwordTooShort: 'Пароль должен быть не менее 8 символов',
passwordMismatch: 'Пароли не совпадают',
invalidResetToken: 'Ссылка для сброса недействительна или устарела',
emailNotVerified: 'Ваш email не подтверждён. Проверьте входящие письма.',
unverifiedTitle: 'Подтвердите email',
unverifiedDesc: 'Мы отправили ссылку для подтверждения на {email}. Откройте её, чтобы активировать аккаунт.',
resendVerification: 'Отправить письмо ещё раз',
resendSending: 'Отправка…',
resendSent: 'Отправлено — проверьте почту',
},
safety: {
moreActions: 'Ещё действия',
report: 'Пожаловаться',
reportUser: 'Пожаловаться',
blockUser: 'Заблокировать',
reportUserTitle: 'Пожаловаться на пользователя',
reportTaskTitle: 'Пожаловаться на задание',
blockUserTitle: 'Заблокировать пользователя?',
blockUserDesc: 'Вы перестанете видеть контент этого пользователя в чатах и списках специалистов.',
reportSent: 'Жалоба отправлена',
blockedNowHidden: 'Пользователь заблокирован и скрыт из вашей ленты',
userBlocked: 'Этот пользователь заблокирован',
unblockUser: 'Разблокировать пользователя',
unblocked: 'Пользователь разблокирован',
reasonSpam: 'Спам',
reasonInappropriate: 'Неприемлемый контент',
reasonFraud: 'Мошенничество',
reasonDuplicate: 'Дубликат',
reasonOther: 'Другое',
},
app: {
slogan: '🇬🇷 Услуги в Греции',
},
profile: {
title: 'Профиль',
editProfile: 'Редактировать',
bio: 'О себе',
bioHint: 'Расскажите о себе...',
skills: 'Навыки',
addSkill: 'Добавить навык',
phone: 'Телефон',
firstName: 'Имя',
lastName: 'Фамилия',
memberSince: 'Участник с',
logout: 'Выйти',
language: 'Язык приложения',
languages: 'Языки общения',
rating: 'Рейтинг',
reviews: 'Отзывы',
balance: 'Баланс',
save: 'Сохранить',
saved: 'Сохранено',
noReviews: 'Отзывов пока нет',
emailVerified: 'Email подтверждён',
emailNotVerified: 'Email не подтверждён',
verifiedBadge: 'Верифицированный специалист',
categories: 'Категории',
locations: 'Локации',
services: 'Услуги',
personalSite: 'Личный сайт',
becomeSpecialist: 'Стать специалистом',
tabInfo: 'Инфо',
tabCards: 'Предложения',
tabStatus: 'Статус',
tabNotifications: 'Уведомления',
blockedUsers: 'Заблокированные пользователи',
blockedUsersEmpty: 'У вас нет заблокированных пользователей.',
tabReviews: 'Отзывы',
cardsCount: 'Предложения',
cardsAdd: 'Добавить предложение',
completedJobs: 'Выполнено',
positive: 'Положит.',
yearsOn: 'Лет',
cardsNewTitle: 'Название нового предложения',
cardsPlaceholder: 'Напр. Сантехника, уборка...',
cardsCreate: 'Создать',
cardsCancel: 'Отмена',
cardsDeleteConfirm: 'Удалить это предложение?',
cardsActive: 'Активна',
cardsInactive: 'Неактивна',
cardsEmpty: 'Предложений пока нет',
cardsTitleLabel: 'Название предложения',
cardsDescLabel: 'Описание',
cardsDescHint: 'Опишите ваши услуги...',
offer_stats: {
active: 'активных',
pending: 'на рассмотрении',
drafts: 'черновиков',
},
price_list: {
title: 'Прайс-лист',
add: 'Добавить',
empty: 'Услуги пока не добавлены',
add_group: 'Добавить группу',
group_name: 'Название группы',
add_item: 'Добавить услугу',
item_name: 'Название услуги',
price: 'Цена (€)',
},
listing_requirements: {
title: 'Ваш профиль пока не показывается в разделе «Предложения»',
hint: 'Чтобы карточка отображалась, выполните условия:',
card_title: 'Карточка не отображается в разделе «Предложения»',
bio: 'Добавьте краткую информацию о себе в «Основное»',
active_card: 'Создайте и активируйте хотя бы одну карточку',
categories: 'Укажите хотя бы одну категорию в активной карточке',
locations: 'Укажите хотя бы одну локацию в активной карточке',
card_inactive: 'Сделайте карточку активной',
review_pending: 'Карточка на рассмотрении',
review_rejected: 'Карточка отклонена',
},
card: {
review_pending: 'На рассмотрении',
review_submitted: 'Карточка отправлена на рассмотрение',
review_approved: 'Карточка одобрена',
review_rejected: 'Карточка отклонена',
submit_review: 'Отправить на проверку',
cancel_review: 'Отменить проверку',
cancel_review: 'Отменить рецензию',
},
tabReferral: 'Реферал',
tab: { referral: 'Реферал', site: 'Личная страница' },
site: {
slug_taken: 'Этот адрес уже занят',
slugHint: 'Задайте уникальный адрес для вашей страницы',
slugSaved: '✓ Сохранено',
copy: 'Скопировать ссылку',
copied: 'Скопировано!',
openSite: 'Открыть',
theme: 'Тема',
themeDark: 'Тёмная',
themeLight: 'Светлая',
nameAlwaysShown: 'Имя и фото всегда отображаются',
visible_title: 'Что отображается на вашей странице',
visible: {
name: 'Имя и фото',
bio: 'О себе',
rating: 'Рейтинг и отзывы',
reviews: 'Раздел с отзывами',
services: 'Карточки услуг',
portfolio: 'Портфолио',
contacts: 'Контактный телефон',
full_last_name: 'Фамилия полностью',
status: 'Статус «Готов помочь»',
},
},
referral: {
title: 'Реферальная программа',
desc: 'Поделитесь ссылкой — каждый новый пользователь, зарегистрировавшийся по ней, принесёт вам награду.',
link_label: 'Ваша ссылка',
copy: 'Копировать',
copied: 'Скопировано!',
share: 'Поделиться с друзьями',
invited_count: 'Зарегистрировалось',
no_code: 'Реферальный код пока не назначен.',
},
balanceHistory: {
title: 'История баланса',
empty: 'Операций пока нет',
after: 'Баланс после',
kind: {
topup: 'Пополнение баланса',
planPurchase: 'Списание за тариф',
adminTopUp: 'Пополнение администратором',
adminAdjustment: 'Корректировка администратором',
},
},
plan_history: {
title: 'История тарифного плана',
empty: 'История изменений тарифа пока пуста',
expires: 'До',
days: 'дней',
event: {
activated: 'Активирован',
renewed: 'Продлён',
downgraded: 'Понижен',
referral_reward: 'Реферальная награда',
admin_change: 'Изменён администратором',
expired: 'Истёк',
},
},
},
portfolio: {
title: 'Портфолио',
add: 'Добавить фото',
addTitle: 'Добавить фото',
titleHint: 'Название (необязательно)',
upload: 'Загрузить',
titleLabel: 'Название',
descLabel: 'Описание',
editTitle: 'Редактировать',
deleteConfirm: 'Удалить это изображение?',
empty: 'Нет элементов портфолио',
},
topup: {
title: 'Пополнение баланса',
topup: 'Пополнить',
amountLabel: 'Сумма (EUR)',
amountError: 'Введите сумму от 1 до 9999 EUR',
pay: 'Перейти к оплате',
info: 'После оплаты баланс будет пополнен автоматически. Оплата проходит через защищённый шлюз ePay.',
gatewayError: 'Ошибка платёжного шлюза',
cannotOpen: 'Не удалось открыть платёжную страницу',
},
payment: {
back_to_profile: 'Вернуться в профиль',
success: {
title: 'Оплата успешна',
desc: 'Баланс обновится автоматически в течение нескольких секунд.',
},
cancelled: {
title: 'Платёж отменён',
desc: 'Вы можете попробовать снова в любой момент.',
},
failed: {
title: 'Платёж не выполнен',
desc: 'Проверьте данные платежа и попробуйте снова.',
},
pending: {
title: 'Платёж обрабатывается',
desc: 'Если оплата прошла, баланс обновится автоматически.',
},
},
dashboard: {
inProgress: 'В работе',
completed: 'Завершённые',
myTasks: 'Мои задачи',
newTask: 'Новая задача',
emptyTitle: 'Задач пока нет',
emptySubtitle: 'Нажмите «Новая задача», чтобы опубликовать первую.',
myOffers: 'Мои предложения',
invitations: 'Приглашения',
completedTasks: 'Завершённые задачи',
completedOffers: 'Завершённые предложения',
offersEmpty: 'Предложений пока нет',
offersEmptyCta: 'Найти задачи',
findTasksTitle: 'Найти задачи',
findTasksHint: 'Просматривайте задачи, подходящие вашему профилю',
findSpecialistTitle: 'Найти специалиста',
findSpecialistHint: 'Просматривайте профессионалов для вашей задачи',
},
notifications: {
markAllRead: 'Отметить все прочитанными',
empty: 'Нет уведомлений',
clearConfirm: 'Удалить все уведомления?',
msgNotifTitle: 'Уведомления о сообщениях',
msgNotifDesc: 'Получать уведомления о новых сообщениях',
newTasksTitle: 'Уведомления о новых задачах',
newTasksDesc: 'Email-уведомления о новых задачах, подходящих вашему профилю',
},
chat: {
empty: 'Нет диалогов',
noMessages: 'Нет сообщений',
inputHint: 'Написать сообщение...',
},
favorites: {
empty: 'Нет избранного',
browse: 'Найти специалистов',
},
specialists: {
empty: 'Специалисты не найдены',
online: 'Онлайн',
jobs: 'заданий',
viewProfile: 'Профиль',
},
specialist: {
contact: 'Написать',
},
offer: {
pending: 'На рассмотрении',
accepted: 'Принято',
declined: 'Отклонено',
withdrawn: 'Отозвано',
price: 'Цена: ',
},
search: {
placeholder: 'Поиск...',
seeAll: 'Все категории',
subcategories: 'подкатегории',
popularSearches: 'Популярные запросы',
modeTasks: 'Задачи',
modeOffers: 'Предложения',
results: 'результатов',
allInCategory: 'Все',
},
filter: {
category: { all: 'Все' },
},
map: {
filterByCategory: 'Фильтр по категории',
clear: 'Очистить',
},
schedule: {
available: 'Доступен',
busy: 'Занят',
free: 'Свободен',
range: 'Период',
rangeSelectEnd: 'Выберите конец',
dayMon: 'Пн',
dayTue: 'Вт',
dayWed: 'Ср',
dayThu: 'Чт',
dayFri: 'Пт',
daySat: 'Сб',
daySun: 'Вс',
},
appbar: {
notifications: 'Уведомления',
chat: 'Чат',
},
createTask: {
title: 'Новая задача',
mainInfo: 'Основное',
titleLabel: 'Заголовок',
titleHint: 'Кратко опишите задачу',
titleMinLength: 'Минимум 5 символов',
descriptionLabel: 'Описание',
descriptionHint: 'Подробно опишите что нужно сделать',
descriptionMinLength: 'Минимум 20 символов',
categoryAndLocation: 'Категория и место',
selectCategory: 'Выберите категорию',
notSelected: 'Не выбрано',
locationLabel: 'Локация',
anyLocation: 'Любая локация',
addressOptional: 'Адрес (необязательно)',
district: 'Район',
street: 'Улица',
house: 'Дом',
entireCity: 'Весь город',
budgetSection: 'Бюджет',
budgetAmount: 'Сумма (€)',
budgetExample: 'Например: 50',
priceNegotiable: 'Цена договорная',
deadlineSection: 'Дата публикации',
stepReview: 'Просмотр',
dateOptional: 'Дата (необязательно)',
expiresAtLabel: 'Объявление активно (дней)',
timeLabel: 'Время',
photosSection: 'Фотографии',
addPhoto: 'Фото',
confidentialSection: 'Дополнительно',
confidentialNote: 'Конфиденциальная заметка',
confidentialHint: '🔒 Видно только выбранному специалисту',
confidentialPlaceholder: 'Например: код домофона, контакты...',
submitTask: 'Опубликовать задачу',
created: 'Задача опубликована!',
uploadError: 'Ошибка загрузки',
monthJan: 'ЯНВ', monthFeb: 'ФЕВ', monthMar: 'МАР', monthApr: 'АПР',
monthMay: 'МАЙ', monthJun: 'ИЮН', monthJul: 'ИЮЛ', monthAug: 'АВГ',
monthSep: 'СЕН', monthOct: 'ОКТ', monthNov: 'НОЯ', monthDec: 'ДЕК',
slotAny: 'Любое', slotMorning: 'Утро', slotAfternoon: 'День',
slotEvening: 'Вечер', slotWeekend: 'Выходные',
},
error: {
unknown: 'Неизвестная ошибка',
},
plan: {
free: 'Free',
pro: 'Pro',
ultimate: 'Ultimate',
upgrade: 'Улучшить план',
myPlan: 'Мой план',
expiresIn: 'Истекает через {n} дней',
dailyMessages: 'Сообщений/день',
dailyOrders: 'Заказов/день',
unlimited: 'Безлимитно',
},
support: {
title: 'Поддержка',
type: { label: 'Тип обращения', bug: 'Ошибка', suggestion: 'Предложение', other: 'Другое' },
subject: 'Тема',
subjectPlaceholder: 'Кратко опишите проблему...',
body: 'Сообщение',
bodyPlaceholder: 'Подробно опишите проблему или предложение...',
submit: 'Отправить',
cancel: 'Отмена',
error: 'Ошибка отправки. Попробуйте ещё раз.',
sent: {
title: 'Запрос получен!',
body: 'Мы ответим на ваш email в ближайшее время.',
close: 'Закрыть',
},
},
pricing: {
customer: 'Заказчик',
specialist: 'Специалист',
compare: 'Сравнение тарифов',
purchased: '{name} активирован',
selectPlan: 'Выбрать план',
confirm: {
title: 'Подтвердите выбор тарифа',
plan: 'Тариф',
prorated: 'Зачёт остатка',
effective_price: 'К оплате',
your_balance: 'Ваш баланс',
downgrade_info: 'Переход на новый тариф произойдёт автоматически после окончания текущего периода.',
insufficient: 'Недостаточно средств.',
top_up: 'Пополнить',
schedule_downgrade: 'Запланировать',
pay: 'Оплатить',
},
},
fomo: {
alreadyOffered: 'Уже {n} специалистов откликнулись',
specialistMissed: 'Вы пропустили {n} заказов',
offersReceived: 'предложений получено',
completionRate: 'завершено',
missed_prefix: 'Пропущено ',
missed_suffix: 'заказов',
},
upgrade: {
cta: 'Улучшить',
available_in: 'Доступно в',
},
status: {
title: 'Мой статус',
canHelpNow: 'Готов помочь сейчас',
canHelpNowDesc: 'Покажите, что готовы принимать заказы прямо сейчас',
needHelp: 'Нужна помощь',
needHelpDesc: 'Покажите, что вам нужен специалист прямо сейчас',
active: 'Активен',
inactive: 'Неактивен',
autoResponse: 'Авто-отклик',
autoResponseDesc: 'Автоматически откликаться на новые заказы по вашим навыкам',
},
autoResponse: {
title: 'Авто-ответ',
enabled: 'Включить',
saved: 'Сохранено',
},
admin: {
title: 'Панель администратора',
stats: 'Статистика',
sections: 'Разделы',
users: 'Пользователи',
tasks: 'Задачи',
reports: 'Жалобы',
offer_moderation: {
title: 'Модерация предложений', empty: 'Нет предложений для модерации', approve: 'Одобрить', deactivate: 'Деактивировать', reject: 'Отклонить', comment_label: 'Причина отклонения', comment_hint: 'Напишите, что нужно исправить',
status: { active: 'Активно', pending: 'На рассмотрении', inactive: 'Черновик' },
},
search: 'Поиск...',
allRoles: 'Все',
allStatuses: 'Все',
activate: 'Активировать',
deactivate: 'Деактивировать',
setRole: 'Изменить роль',
topUp: 'Пополнить',
withdraw: 'Вывести',
amount: 'Сумма (€)',
description: 'Описание',
balance: 'Баланс',
cancel: 'Отменить задачу',
deleteConfirm: 'Удалить эту задачу?',
cancelConfirm: 'Отменить эту задачу?',
reportReviewed: 'Отметить рассмотренным',
reportDismissed: 'Отклонить',
reportPending: 'На рассмотрении',
reportReviewedLabel: 'Рассмотрено',
reportDismissedLabel: 'Отклонено',
noData: 'Нет данных',
total: 'Всего',
userCount: 'Пользователи',
specialistCount: 'Специалисты',
taskCount: 'Задачи',
offerCount: 'Предложения',
reviewCount: 'Отзывы',
active: 'Активен',
inactive: 'Неактивен',
role: 'Роль',
changeRoleTitle: 'Изменить роль',
topUpTitle: 'Пополнение баланса',
withdrawTitle: 'Вывод с баланса',
actions: 'Действия',
reporter: 'Отправитель жалобы',
target: 'Цель',
status: 'Статус',
reason: 'Причина',
invalidAmount: 'Введите корректную сумму',
backup: 'Резервная копия',
support: 'Поддержка',
},
backup: {
title: 'Резервное копирование',
exportAll: 'Экспорт всей БД',
importAll: 'Импорт всей БД',
exportTable: 'Экспорт',
importTable: 'Импорт',
autoBackup: 'Авто-резервирование',
autoBackupDesc: 'Создавать резервную копию каждый день',
storedBackups: 'Сохранённые копии',
tables: 'Таблицы',
restore: 'Восстановить',
restoreConfirm: 'Восстановить из этой резервной копии?',
today: 'Сегодня',
yesterday: 'Вчера',
exporting: 'Экспорт...',
importing: 'Импорт...',
restoring: 'Восстановление...',
exportSuccess: 'Экспорт выполнен',
importSuccess: 'Импорт выполнен',
restoreSuccess: 'Восстановление выполнено',
noStoredBackups: 'Нет сохранённых копий',
pickFile: 'Выбрать файл .sql.gz',
size: 'Размер',
date: 'Дата',
savedTo: 'Сохранено в',
},
specialist_setup: {
page_title: 'Настройка профиля специалиста',
step_of: 'Шаг {current} из {total}',
next: 'Далее',
back: 'Назад',
skip: 'Пропустить',
finish: 'Завершить',
go_to_profile: 'Перейти в профиль',
browse_tasks: 'Найти задачи',
step1: {
title: 'Добро пожаловать!',
subtitle: 'Давайте настроим ваш профиль',
desc: 'Полный профиль помогает находить больше клиентов. Следуйте шагам, чтобы создать идеальный профиль специалиста.',
what_next: 'Что мы сделаем:',
item1: 'Заполним основную информацию',
item2: 'Добавим навыки и категории',
item3: 'Создадим карточку услуги',
item4: 'Выберем географию обслуживания',
item5: 'Отправим карточку на проверку',
},
step2: {
title: 'Базовый профиль',
subtitle: 'Расскажите о себе',
bio_label: 'О себе',
bio_placeholder: 'Опишите ваш опыт, услуги которые вы предлагаете...',
phone_label: 'Телефон',
phone_placeholder: '+30 6900000000',
photo_label: 'Фото профиля',
photo_btn: 'Загрузить фото',
photo_uploading: 'Загрузка...',
photo_hint: 'Отображается в вашем профиле',
},
step3: {
title: 'Карточка услуги',
subtitle: 'Создайте вашу первую карточку услуги',
title_label: 'Название карточки',
title_placeholder: 'Напр. Сантехник, Электрик, Уборка...',
desc_label: 'Описание',
desc_placeholder: 'Подробно опишите что вы предлагаете, ваш опыт, преимущества...',
title_required: 'Название обязательно',
generate_description: 'Создать описание',
},
step4: {
title: 'Навыки и категории',
subtitle: 'Добавьте навыки и выберите категории',
skills_label: 'Навыки',
skills_placeholder: 'Напр. Монтаж труб...',
skills_add: 'Добавить',
categories_label: 'Категории',
categories_search: 'Поиск категорий',
categories_add: 'Добавить «{name}»',
categories_required: 'Выберите хотя бы одну категорию, чтобы продолжить',
},
step5: {
title: 'География обслуживания',
subtitle: 'Где вы оказываете услуги?',
hint: 'Выберите города или конкретные районы',
},
done: {
title: 'Ваша карточка готова',
subtitle: 'Отправьте её на проверку',
desc: 'После одобрения нашей командой карточка будет видна клиентам.',
submit_for_review: 'Отправить на проверку',
submitted: 'Карточка отправлена на проверку',
},
},
become_specialist: {
hero: {
title: 'Зарабатывайте, делая то, что умеете',
subtitle:
'Создайте профиль специалиста и получайте заказы от клиентов по всей Греции',
},
how: { title: 'Как это работает' },
step1: {
title: 'Создайте карточку специалиста',
desc: 'Укажите категории, навыки и районы — система найдёт задачи автоматически',
},
step2: {
title: 'Найдите задачи',
desc: 'Просматривайте задачи в своих категориях в разделе «Найти задачи»',
},
step3: {
title: 'Отправьте предложение и зарабатывайте',
desc: 'Подавайте предложения с ценой и сроками, общайтесь с клиентами и выполняйте задачи',
},
benefits: { title: 'Преимущества профиля специалиста' },
benefit1: 'Поиск по категории и локации',
benefit2: 'Публичный профиль с отзывами',
benefit3: 'Расписание видно клиентам',
benefit4: 'Добавление в избранное клиентами',
free_badge: 'Регистрация бесплатна',
},
site: {
member_since: 'С нами с',
rating: 'Рейтинг',
completed_tasks: 'Выполнено',
languages: 'Языков',
photos: 'фото',
contact_form: 'Связаться',
contact_sent: 'Сообщение отправлено!',
contact_sent_desc: 'Специалист свяжется с вами в ближайшее время',
contact_name: 'Имя',
contact_name_ph: 'Ваше имя',
contact_email_ph: 'your@email.com',
contact_message: 'Сообщение',
contact_message_ph: 'Опишите вашу задачу...',
contact_send: 'Отправить',
share: 'Поделиться',
speaks_languages: 'Говорит на языках',
message_sent: 'Сообщение отправлено!',
message_sent_desc: 'Специалист получит его в чате',
message_placeholder: 'Напишите сообщение...',
},
user: {
specialist_cards: 'Карточки услуг',
categories: 'Категории',
work_area: 'Район работы',
},
},
uk: {
common: {
loading: 'Завантаження...',
error: 'Щось пішло не так',
retry: 'Повторити',
cancel: 'Скасувати',
search: 'Пошук...',
send: 'Надіслати',
block: 'Заблокувати',
share: 'Поділитися',
favorites: 'Вибране',
save: 'Зберегти',
ok: 'ОК',
back: 'Назад',
optional: 'необов\'язково',
required: 'Обов\'язково',
guest: 'Гість',
},
nav: {
home: 'Головна',
tasks: 'Завдання',
chat: 'Чат',
notifications: 'Сповіщення',
favorites: 'Вибране',
specialists: 'Пропозиції',
login: 'Увійти',
register: 'Реєстрація',
dashboard: 'Мої завдання',
profile: 'Профіль',
logout: 'Вийти',
findTasks: 'Знайти завдання',
newTask: 'Нове завдання',
schedule: 'Розклад',
pricing: 'Тарифи',
search: 'Пошук',
},
home: {
heroTitle: 'Кожен має навичку, яка може допомогти іншому',
heroSubtitle: 'Знайди допомогу, запропонуй свої навички або заробляй, допомагаючи іншим',
postTask: 'Знайти допомогу',
browseTasks: 'Знайти роботу',
heroBecomeSpecialist: 'Запропонувати допомогу',
heroFindSpecialist: 'Знайти роботу',
howItWorks: 'Як це працює',
step1Title: 'Опублікуй завдання',
step1Desc: 'Опиши що потрібно і встанови бюджет',
step2Title: 'Отримай пропозиції',
step2Desc: 'Спеціалісти надішлють пропозиції на вибір',
step3Title: 'Обери і починай',
step3Desc: 'Обери найкращого і починай співпрацю',
popularCategories: 'Популярні категорії',
searchPlaceholder: 'Що вам потрібно?',
nearYou: 'Поруч з вами',
seeAll: 'Дивитись всі',
map: 'Карта',
noTasksNearbyTitle: 'Поруч поки немає завдань',
openMapCta: 'Відкрити карту',
becomeSpecialistTitle: 'Хочете заробляти на завданнях?',
becomeSpecialistSubtitle: 'Створіть профіль спеціаліста і отримуйте відгуки від клієнтів поруч із вами.',
becomeSpecialistCta: 'Стати спеціалістом',
selectCity: 'Вибрати місто',
greeting: 'Привіт, {name} 👋',
greetingAnon: 'Привіт 👋',
recentRequests: 'Останні запити',
negotiable: 'Договірна',
specialistHeroTitle: 'Знайдіть замовлення поруч з вами',
specialistHeroSubtitle: 'Відкрийте замовлення у своїх категоріях і надішліть пропозицію',
specialistBrowseTasks: 'Знайти замовлення',
specialistGoToDashboard: 'Мої завдання',
specialistPopularCategories: 'Замовлення за категорією',
specialistStep1Title: 'Створіть картку спеціаліста',
specialistStep1Desc: 'Вкажіть категорії, навички і райони — система знайде замовлення автоматично',
specialistStep2Title: 'Знайдіть підходящі замовлення',
specialistStep2Desc: 'Переглядайте замовлення у своїх категоріях і починайте роботу відразу',
specialistStep3Title: 'Надішліть пропозицію і заробляйте',
specialistStep3Desc: 'Подайте пропозицію з ціною і термінами та виконайте замовлення',
becomeSpecialist: {
badge: 'Реєстрація безкоштовна',
title: 'Заробляйте, роблячи те, що вмієте',
subtitle: 'Створіть профіль спеціаліста і отримуйте замовлення від клієнтів по всій Греції',
step1: { title: 'Створіть картку спеціаліста', desc: 'Вкажіть категорії, навички і райони — система знайде замовлення автоматично' },
step2: { title: 'Знайдіть замовлення', desc: 'Переглядайте замовлення у своїх категоріях в розділі «Знайти замовлення»' },
step3: { title: 'Надішліть пропозицію і заробляйте', desc: 'Подавайте пропозиції з ціною і термінами, спілкуйтеся з клієнтами і виконуйте замовлення' },
benefit1: 'Пошук за категорією і локацією',
benefit2: 'Публічний профіль з відгуками',
benefit3: 'Розклад видно клієнтам',
benefit4: 'Додавання до вибраного клієнтами',
cta: 'Детальніше',
},
community: {
title: 'CanHelp — це спільнота',
subtitle: 'Не просто маркетплейс — спільнота взаємодопомоги. Той, хто вміє — знайде клієнта. У кого проблема — знайде спеціаліста.',
point1: { title: 'Ви в чомусь спеціаліст?', desc: 'Ремонт, уроки, дизайн, переклади, догляд — кожна навичка цінується. Створіть профіль і знайдіть клієнтів поруч.' },
point2: { title: 'Потрібна допомога?', desc: 'Опублікуйте завдання за хвилину і отримайте пропозиції від перевірених спеціалістів у вашому місті.' },
point3: { title: 'Допоможіть проекту рости', desc: 'Поділіться посиланням з друзями — разом будуємо щось корисне для всіх.' },
share: 'Поділитися з друзями',
shareCopied: 'Посилання скопійовано!',
},
referral: {
badge: 'Реферальна програма',
title: 'Запрошуйте друзів — отримуйте нагороди',
subtitle: 'Поділіться своїм посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.',
step1: { title: 'Зареєструйтеся і отримайте посилання', desc: 'Створіть акаунт і знайдіть своє унікальне реферальне посилання в профілі.' },
step2: { title: 'Поділіться з друзями', desc: 'Надішліть посилання друзям або опублікуйте в соціальних мережах.' },
step3: { title: 'Отримуйте нагороди', desc: 'Як тільки друг підтвердить email, ви автоматично отримаєте нагороду.' },
cta: 'Отримати посилання',
},
},
stats: {
specialists: 'пропозицій',
tasks: 'завдань',
categories: 'категорій',
free: 'безкоштовна реєстрація',
},
tasks: {
allCategories: 'Всі',
searchPlaceholder: 'Пошук завдань...',
seeAll: 'Дивитись всі',
posted: 'Опубліковано',
timeAgo: { justNow: 'щойно', mAgo: '{n} хв. тому', hAgo: '{n} год. тому', yesterday: 'вчора', dAgo: '{n} дн. тому', wAgo: '{n} тиж. тому', moAgo: '{n} міс. тому', yAgo: '{n} р. тому' },
emptyMessage: 'Завдань не знайдено. Опублікуй перше!',
createTask: 'Нове завдання',
makeOffer: 'Надіслати пропозицію',
budget: 'Бюджет',
category: 'Категорія',
location: 'Місцезнаходження',
deadline: 'Дата початку',
deadlineOutdated: 'Дата початку застаріла — оновіть її',
title: 'Назва',
description: 'Опис',
submit: 'Опублікувати завдання',
statusOpen: 'Відкрито',
statusInProgress: 'В роботі',
statusCompleted: 'Завершено',
statusDraft: 'Чернетка',
statusCancelled: 'Скасовано',
anyLocation: 'Будь-яке місце',
anyLanguage: 'Будь-яка мова',
filters: 'Фільтри',
applyFilters: 'Застосувати',
resetFilters: 'Скинути',
showTasks: 'Показувати завдання',
forMe: 'Підходящі мені',
allTasks: 'Всі завдання',
allCategories2: 'Всі категорії',
budgetRange: 'Бюджет (€)',
budgetFrom: 'Від',
budgetTo: 'До',
entireCity: 'Все місто',
notFound: 'Завдання не знайдено',
respond: 'Відгукнутися',
offersEmpty: 'Відгуків поки немає',
myTask: 'Моє завдання',
details: 'Деталі',
negotiable: 'договірна',
budgetNegotiable: 'Договірна',
time: 'Час',
photos: 'Фото',
offers: 'Відгуки',
customer: 'Замовник',
specialist: 'Спеціаліст',
offerAccepted: 'Прийнято',
offerDeclined: 'Відхилено',
offerPending: 'Очікує',
yourOffer: 'Ваш відгук',
edit: 'Редагувати',
editSaved: 'Завдання оновлено',
editTitle: 'Редагування завдання',
editStatusLabel: 'Статус',
createdAt: 'Створено',
expiresAt: 'Активно до',
expiresAtOutdated: 'Термін дії минув — оновіть дату',
expiresAtRequired: 'Вкажіть дату закінчення',
confidential: 'Конфіденційні дані',
chooseOffer: 'Вибрати пропозицію',
chooseOfferOne: 'Вибрати пропозицію · 1 пропозиція',
chooseOfferMany: 'Вибрати пропозицію · {count} пропозицій',
},
offers: {
title: 'Пропозиції',
noOffers: 'Пропозицій поки немає',
accept: 'Прийняти',
decline: 'Відхилити',
yourPrice: 'Ваша ціна (€)',
messagePlaceholder: 'Опишіть ваш досвід або підхід...',
submit: 'Надіслати пропозицію',
successMessage: 'Ваша пропозиція надіслана!',
},
category: {
cleaning: 'Прибирання',
plumbing: 'Сантехніка',
electrical: 'Електрика',
moving: 'Переїзд',
tutoring: 'Репетиторство',
beauty: 'Краса',
it_support: 'IT-підтримка',
repairs: 'Ремонт',
other: 'Інше',
},
auth: {
login: 'Увійти',
register: 'Реєстрація',
signIn: 'Увійти',
createAccount: 'Створити акаунт',
orContinueWith: 'Або продовжити через',
continueWithGoogle: 'Продовжити через Google',
continueWithApple: 'Продовжити через Apple',
termsPrefix: 'Я приймаю',
termsLink: 'Умови використання',
termsAnd: 'та',
communityRulesLink: 'правила спільноти',
termsTitle: 'Умови використання',
termsBody: 'Використовуючи CanHelp, ви зобовʼязуєтесь не публікувати спам, шахрайський, образливий або незаконний контент. Порушники можуть бути заблоковані, а контент видалений. Публікуючи завдання та повідомлення, ви підтверджуєте відповідальність за їхній зміст.',
termsRequired: 'Підтвердіть згоду з умовами використання.',
email: 'Email',
password: 'Пароль',
firstName: 'Ім\'я',
lastName: 'Прізвище',
role: 'Роль',
roleCustomer: 'Замовник',
roleSpecialist: 'Спеціаліст',
roleAdmin: 'Адміністратор',
noAccount: 'Немає акаунту?',
haveAccount: 'Вже є акаунт?',
loginRequired: 'Потрібна авторизація',
invalidEmail: 'Введіть правильний email',
invalidPassword: 'Введіть пароль',
forgotPassword: 'Забули пароль?',
resetPassword: 'Скинути пароль',
resetEmailSent: 'Лист надіслано!',
resetEmailSentDesc: 'Перевірте пошту — там інструкції з відновлення пароля.',
backToLogin: 'Повернутися до входу',
newPassword: 'Новий пароль',
confirmPassword: 'Підтвердження пароля',
setNewPassword: 'Встановити новий пароль',
passwordChanged: 'Пароль змінено!',
passwordChangedDesc: 'Тепер ви можете увійти з новим паролем.',
passwordTooShort: 'Пароль має бути не менше 8 символів',
passwordMismatch: 'Паролі не співпадають',
invalidResetToken: 'Посилання для скидання недійсне або застаріле',
emailNotVerified: 'Ваш email не підтверджено. Перевірте вхідні листи.',
unverifiedTitle: 'Підтвердіть email',
unverifiedDesc: 'Ми надіслали посилання для підтвердження на {email}. Відкрийте його, щоб активувати акаунт.',
resendVerification: 'Надіслати лист ще раз',
resendSending: 'Надсилання…',
resendSent: 'Надіслано — перевірте пошту',
},
safety: {
moreActions: 'Інші дії',
report: 'Поскаржитися',
reportUser: 'Поскаржитися',
blockUser: 'Заблокувати',
reportUserTitle: 'Поскаржитися на користувача',
reportTaskTitle: 'Поскаржитися на завдання',
blockUserTitle: 'Заблокувати користувача?',
blockUserDesc: 'Ви більше не бачитимете контент цього користувача у чатах і списках спеціалістів.',
reportSent: 'Скаргу надіслано',
blockedNowHidden: 'Користувача заблоковано і приховано з вашої стрічки',
userBlocked: 'Цей користувач заблокований',
unblockUser: 'Розблокувати користувача',
unblocked: 'Користувача розблоковано',
reasonSpam: 'Спам',
reasonInappropriate: 'Неприйнятний контент',
reasonFraud: 'Шахрайство',
reasonDuplicate: 'Дублікат',
reasonOther: 'Інше',
},
app: {
slogan: '🇬🇷 Послуги в Греції',
},
profile: {
title: 'Профіль',
editProfile: 'Редагувати',
bio: 'Про себе',
bioHint: 'Розкажіть про себе...',
skills: 'Навички',
addSkill: 'Додати навичку',
phone: 'Телефон',
firstName: 'Ім\'я',
lastName: 'Прізвище',
memberSince: 'Учасник з',
logout: 'Вийти',
language: 'Мова застосунку',
languages: 'Мови спілкування',
rating: 'Рейтинг',
reviews: 'Відгуки',
balance: 'Баланс',
save: 'Зберегти',
saved: 'Збережено',
noReviews: 'Відгуків поки немає',
emailVerified: 'Email підтверджено',
emailNotVerified: 'Email не підтверджено',
verifiedBadge: 'Верифікований спеціаліст',
categories: 'Категорії',
locations: 'Локації',
services: 'Послуги',
personalSite: 'Особистий сайт',
becomeSpecialist: 'Стати спеціалістом',
tabInfo: 'Інфо',
tabCards: 'Пропозиції',
tabStatus: 'Статус',
tabNotifications: 'Сповіщення',
blockedUsers: 'Заблоковані користувачі',
blockedUsersEmpty: 'У вас немає заблокованих користувачів.',
tabReviews: 'Відгуки',
cardsCount: 'Пропозиції',
cardsAdd: 'Додати пропозицію',
completedJobs: 'Виконано',
positive: 'Позитивних',
yearsOn: 'Років',
cardsNewTitle: 'Назва нової пропозиції',
cardsPlaceholder: 'Напр. Сантехніка, прибирання...',
cardsCreate: 'Створити',
cardsCancel: 'Скасувати',
cardsDeleteConfirm: 'Видалити цю пропозицію?',
cardsActive: 'Активна',
cardsInactive: 'Неактивна',
cardsEmpty: 'Пропозицій поки немає',
cardsTitleLabel: 'Назва пропозиції',
cardsDescLabel: 'Опис',
cardsDescHint: 'Опишіть ваші послуги...',
offer_stats: {
active: 'активних',
pending: 'на розгляді',
drafts: 'чернеток',
},
price_list: {
title: 'Прайс-лист',
add: 'Додати',
empty: 'Послуги ще не додані',
add_group: 'Додати групу',
group_name: 'Назва групи',
add_item: 'Додати послугу',
item_name: 'Назва послуги',
price: 'Ціна (€)',
},
listing_requirements: {
title: 'Ваш профіль поки не показується в розділі «Пропозиції»',
hint: 'Щоб картка відображалась, виконайте умови:',
card_title: 'Картка не відображається в розділі «Пропозиції»',
bio: 'Додайте коротку інформацію про себе в «Основне»',
active_card: 'Створіть і активуйте хоча б одну картку',
categories: 'Укажіть хоча б одну категорію в активній картці',
locations: 'Укажіть хоча б одну локацію в активній картці',
card_inactive: 'Зробіть картку активною',
review_pending: 'Картка на розгляді',
review_rejected: 'Картку відхилено',
},
card: {
review_pending: 'На розгляді',
review_submitted: 'Картку відправлено на розгляд',
review_approved: 'Картку схвалено',
review_rejected: 'Картку відхилено',
submit_review: 'Надіслати на перевірку',
cancel_review: 'Скасувати перевірку',
cancel_review: 'Скасувати рецензію',
},
tabReferral: 'Реферал',
tab: { referral: 'Реферал', site: 'Особиста сторінка' },
site: {
slug_taken: 'Ця адреса вже зайнята',
slugHint: 'Задайте унікальну адресу для вашої сторінки',
slugSaved: '✓ Збережено',
copy: 'Скопіювати посилання',
copied: 'Скопійовано!',
openSite: 'Відкрити',
theme: 'Тема',
themeDark: 'Темна',
themeLight: 'Світла',
nameAlwaysShown: 'Ім\'я і фото завжди відображаються',
visible_title: 'Що відображається на вашій сторінці',
visible: {
name: 'Ім\'я і фото',
bio: 'Про себе',
rating: 'Рейтинг і відгуки',
reviews: 'Розділ з відгуками',
services: 'Картки послуг',
portfolio: 'Портфоліо',
contacts: 'Контактний телефон',
full_last_name: 'Прізвище повністю',
status: 'Статус «Готовий допомогти»',
},
},
referral: {
title: 'Реферальна програма',
desc: 'Поділіться посиланням — кожен новий користувач, зареєстрований через нього, принесе вам нагороду.',
link_label: 'Ваше посилання',
copy: 'Копіювати',
copied: 'Скопійовано!',
share: 'Поділитися з друзями',
invited_count: 'Зареєструвалося',
no_code: 'Реферальний код поки не призначено.',
},
balanceHistory: {
title: 'Історія балансу',
empty: 'Операцій поки немає',
after: 'Баланс після',
kind: {
topup: 'Поповнення балансу',
planPurchase: 'Списання за тариф',
adminTopUp: 'Поповнення адміністратором',
adminAdjustment: 'Коригування адміністратором',
},
},
plan_history: {
title: 'Історія тарифного плану',
empty: 'Історія змін тарифу поки порожня',
expires: 'До',
days: 'днів',
event: {
activated: 'Активовано',
renewed: 'Продовжено',
downgraded: 'Знижено',
referral_reward: 'Реферальна нагорода',
admin_change: 'Змінено адміністратором',
expired: 'Закінчився',
},
},
},
portfolio: {
title: 'Портфоліо',
add: 'Додати фото',
addTitle: 'Додати фото',
titleHint: 'Назва (необов\'язково)',
upload: 'Завантажити',
titleLabel: 'Назва',
descLabel: 'Опис',
editTitle: 'Редагувати',
deleteConfirm: 'Видалити це зображення?',
empty: 'Немає елементів портфоліо',
},
topup: {
title: 'Поповнення балансу',
topup: 'Поповнити',
amountLabel: 'Сума (EUR)',
amountError: 'Введіть суму від 1 до 9999 EUR',
pay: 'Перейти до оплати',
info: 'Після оплати баланс буде поповнено автоматично. Оплата проходить через захищений шлюз ePay.',
gatewayError: 'Помилка платіжного шлюзу',
cannotOpen: 'Не вдалося відкрити платіжну сторінку',
},
payment: {
back_to_profile: 'Повернутися до профілю',
success: {
title: 'Оплата успішна',
desc: 'Баланс оновиться автоматично протягом кількох секунд.',
},
cancelled: {
title: 'Платіж скасовано',
desc: 'Ви можете спробувати ще раз у будь-який момент.',
},
failed: {
title: 'Платіж не виконано',
desc: 'Перевірте платіжні дані та спробуйте знову.',
},
pending: {
title: 'Платіж обробляється',
desc: 'Якщо оплату завершено, баланс оновиться автоматично.',
},
},
dashboard: {
inProgress: 'В роботі',
completed: 'Завершені',
myTasks: 'Мої завдання',
newTask: 'Нове завдання',
emptyTitle: 'Завдань поки немає',
emptySubtitle: 'Натисніть «Нове завдання», щоб опублікувати перше.',
myOffers: 'Мої пропозиції',
invitations: 'Запрошення',
completedTasks: 'Завершені завдання',
completedOffers: 'Завершені пропозиції',
offersEmpty: 'Пропозицій поки немає',
offersEmptyCta: 'Знайти завдання',
findTasksTitle: 'Знайти завдання',
findTasksHint: 'Переглядайте завдання, що підходять вашому профілю',
findSpecialistTitle: 'Знайти спеціаліста',
findSpecialistHint: 'Переглядайте професіоналів для вашого завдання',
},
notifications: {
markAllRead: 'Позначити всі прочитаними',
empty: 'Немає сповіщень',
clearConfirm: 'Видалити всі сповіщення?',
msgNotifTitle: 'Сповіщення про повідомлення',
msgNotifDesc: 'Отримувати сповіщення про нові повідомлення',
newTasksTitle: 'Сповіщення про нові завдання',
newTasksDesc: 'Email-сповіщення про нові завдання, що відповідають вашому профілю',
},
chat: {
empty: 'Немає діалогів',
noMessages: 'Немає повідомлень',
inputHint: 'Написати повідомлення...',
},
favorites: {
empty: 'Немає вибраного',
browse: 'Знайти спеціалістів',
},
specialists: {
empty: 'Спеціалістів не знайдено',
online: 'Онлайн',
jobs: 'завдань',
viewProfile: 'Профіль',
},
specialist: {
contact: 'Написати',
},
offer: {
pending: 'На розгляді',
accepted: 'Прийнято',
declined: 'Відхилено',
withdrawn: 'Відкликано',
price: 'Ціна: ',
},
search: {
placeholder: 'Пошук...',
seeAll: 'Всі категорії',
subcategories: 'підкатегорії',
popularSearches: 'Популярні запити',
modeTasks: 'Завдання',
modeOffers: 'Пропозиції',
results: 'результатів',
allInCategory: 'Всі',
},
filter: {
category: { all: 'Всі' },
},
map: {
filterByCategory: 'Фільтр за категорією',
clear: 'Очистити',
},
schedule: {
available: 'Доступний',
busy: 'Зайнятий',
free: 'Вільний',
range: 'Період',
rangeSelectEnd: 'Оберіть кінець',
dayMon: 'Пн',
dayTue: 'Вт',
dayWed: 'Ср',
dayThu: 'Чт',
dayFri: 'Пт',
daySat: 'Сб',
daySun: 'Нд',
},
appbar: {
notifications: 'Сповіщення',
chat: 'Чат',
},
createTask: {
title: 'Нове завдання',
mainInfo: 'Основне',
titleLabel: 'Заголовок',
titleHint: 'Коротко опишіть завдання',
titleMinLength: 'Мінімум 5 символів',
descriptionLabel: 'Опис',
descriptionHint: 'Детально опишіть що потрібно зробити',
descriptionMinLength: 'Мінімум 20 символів',
categoryAndLocation: 'Категорія і місце',
selectCategory: 'Оберіть категорію',
notSelected: 'Не обрано',
locationLabel: 'Локація',
anyLocation: 'Будь-яка локація',
addressOptional: 'Адреса (необов\'язково)',
district: 'Район',
street: 'Вулиця',
house: 'Будинок',
entireCity: 'Все місто',
budgetSection: 'Бюджет',
budgetAmount: 'Сума (€)',
budgetExample: 'Наприклад: 50',
priceNegotiable: 'Ціна договірна',
deadlineSection: 'Дата публікації',
stepReview: 'Перегляд',
dateOptional: 'Дата (необов\'язково)',
expiresAtLabel: 'Оголошення активне (днів)',
timeLabel: 'Час',
photosSection: 'Фотографії',
addPhoto: 'Фото',
confidentialSection: 'Додатково',
confidentialNote: 'Конфіденційна нотатка',
confidentialHint: '🔒 Видно тільки обраному спеціалісту',
confidentialPlaceholder: 'Наприклад: код домофону, контакти...',
submitTask: 'Опублікувати завдання',
created: 'Завдання опубліковано!',
uploadError: 'Помилка завантаження',
monthJan: 'СІЧ', monthFeb: 'ЛЮТ', monthMar: 'БЕР', monthApr: 'КВІ',
monthMay: 'ТРА', monthJun: 'ЧЕР', monthJul: 'ЛИП', monthAug: 'СЕР',
monthSep: 'ВЕР', monthOct: 'ЖОВ', monthNov: 'ЛИС', monthDec: 'ГРУ',
slotAny: 'Будь-який', slotMorning: 'Ранок', slotAfternoon: 'День',
slotEvening: 'Вечір', slotWeekend: 'Вихідні',
},
error: {
unknown: 'Невідома помилка',
},
plan: {
free: 'Free',
pro: 'Pro',
ultimate: 'Ultimate',
upgrade: 'Покращити план',
myPlan: 'Мій план',
expiresIn: 'Закінчується через {n} днів',
dailyMessages: 'Повідомлень/день',
dailyOrders: 'Замовлень/день',
unlimited: 'Безліміт',
},
support: {
title: 'Підтримка',
type: { label: 'Тип звернення', bug: 'Помилка', suggestion: 'Пропозиція', other: 'Інше' },
subject: 'Тема',
subjectPlaceholder: 'Коротко опишіть проблему...',
body: 'Повідомлення',
bodyPlaceholder: 'Детально опишіть проблему або пропозицію...',
submit: 'Надіслати',
cancel: 'Скасувати',
error: 'Помилка надсилання. Спробуйте ще раз.',
sent: {
title: 'Запит отримано!',
body: 'Ми відповімо на ваш email якнайшвидше.',
close: 'Закрити',
},
},
pricing: {
customer: 'Замовник',
specialist: 'Спеціаліст',
compare: 'Порівняння тарифів',
purchased: '{name} активовано',
selectPlan: 'Обрати тариф',
confirm: {
title: 'Підтвердіть вибір тарифу',
plan: 'Тариф',
prorated: 'Залік залишку',
effective_price: 'До оплати',
your_balance: 'Ваш баланс',
downgrade_info: 'Перехід на новий тариф відбудеться автоматично після закінчення поточного періоду.',
insufficient: 'Недостатньо коштів.',
top_up: 'Поповнити',
schedule_downgrade: 'Запланувати',
pay: 'Оплатити',
},
},
fomo: {
alreadyOffered: 'Вже {n} спеціалістів відгукнулися',
specialistMissed: 'Ви пропустили {n} замовлень',
offersReceived: 'пропозицій отримано',
completionRate: 'завершено',
missed_prefix: 'Пропущено ',
missed_suffix: 'замовлень',
},
upgrade: {
cta: 'Покращити',
available_in: 'Доступно в',
},
status: {
title: 'Мій статус',
canHelpNow: 'Готовий допомогти зараз',
canHelpNowDesc: 'Покажіть, що готові приймати замовлення прямо зараз',
needHelp: 'Потрібна допомога',
needHelpDesc: 'Покажіть, що вам потрібен спеціаліст прямо зараз',
active: 'Активний',
inactive: 'Неактивний',
autoResponse: 'Авто-відповідь',
autoResponseDesc: 'Автоматично відповідати на нові замовлення за вашими навичками',
},
autoResponse: {
title: 'Авто-відповідь',
enabled: 'Увімкнути',
saved: 'Збережено',
},
admin: {
title: 'Панель адміністратора',
stats: 'Статистика',
sections: 'Розділи',
users: 'Користувачі',
tasks: 'Завдання',
reports: 'Скарги',
offer_moderation: {
title: 'Модерація пропозицій', empty: 'Немає пропозицій для модерації', approve: 'Схвалити', deactivate: 'Деактивувати', reject: 'Відхилити', comment_label: 'Причина відхилення', comment_hint: 'Напишіть, що потрібно виправити',
status: { active: 'Активна', pending: 'На розгляді', inactive: 'Чернетка' },
},
search: 'Пошук...',
allRoles: 'Всі',
allStatuses: 'Всі',
activate: 'Активувати',
deactivate: 'Деактивувати',
setRole: 'Змінити роль',
topUp: 'Поповнити',
withdraw: 'Вивести',
amount: 'Сума (€)',
description: 'Опис',
balance: 'Баланс',
cancel: 'Скасувати завдання',
deleteConfirm: 'Видалити це завдання?',
cancelConfirm: 'Скасувати це завдання?',
reportReviewed: 'Позначити розглянутим',
reportDismissed: 'Відхилити',
reportPending: 'На розгляді',
reportReviewedLabel: 'Розглянуто',
reportDismissedLabel: 'Відхилено',
noData: 'Немає даних',
total: 'Всього',
userCount: 'Користувачі',
specialistCount: 'Спеціалісти',
taskCount: 'Завдання',
offerCount: 'Пропозиції',
reviewCount: 'Відгуки',
active: 'Активний',
inactive: 'Неактивний',
role: 'Роль',
changeRoleTitle: 'Змінити роль',
topUpTitle: 'Поповнення балансу',
withdrawTitle: 'Виведення з балансу',
actions: 'Дії',
reporter: 'Відправник скарги',
target: 'Ціль',
status: 'Статус',
reason: 'Причина',
invalidAmount: 'Введіть коректну суму',
backup: 'Резервна копія',
support: 'Підтримка',
},
backup: {
title: 'Резервне копіювання',
exportAll: 'Експорт всієї БД',
importAll: 'Імпорт всієї БД',
exportTable: 'Експорт',
importTable: 'Імпорт',
autoBackup: 'Авто-резервування',
autoBackupDesc: 'Створювати резервну копію щодня',
storedBackups: 'Збережені копії',
tables: 'Таблиці',
restore: 'Відновити',
restoreConfirm: 'Відновити з цієї резервної копії?',
today: 'Сьогодні',
yesterday: 'Вчора',
exporting: 'Експорт...',
importing: 'Імпорт...',
restoring: 'Відновлення...',
exportSuccess: 'Експорт виконано',
importSuccess: 'Імпорт виконано',
restoreSuccess: 'Відновлення виконано',
noStoredBackups: 'Немає збережених копій',
pickFile: 'Обрати файл .sql.gz',
size: 'Розмір',
date: 'Дата',
savedTo: 'Збережено в',
},
specialist_setup: {
page_title: 'Налаштування профілю спеціаліста',
step_of: 'Крок {current} з {total}',
next: 'Далі',
back: 'Назад',
skip: 'Пропустити',
finish: 'Завершити',
go_to_profile: 'Перейти в профіль',
browse_tasks: 'Знайти завдання',
step1: {
title: 'Ласкаво просимо!',
subtitle: 'Давайте налаштуємо ваш профіль',
desc: 'Повний профіль допомагає знаходити більше клієнтів. Слідуйте крокам, щоб створити ідеальний профіль спеціаліста.',
what_next: 'Що ми зробимо:',
item1: 'Заповнимо основну інформацію',
item2: 'Додамо навички і категорії',
item3: 'Створимо картку послуги',
item4: 'Оберемо географію обслуговування',
item5: 'Надішлемо картку на перевірку',
},
step2: {
title: 'Базовий профіль',
subtitle: 'Розкажіть про себе',
bio_label: 'Про себе',
bio_placeholder: 'Опишіть ваш досвід, послуги які ви пропонуєте...',
phone_label: 'Телефон',
phone_placeholder: '+30 6900000000',
photo_label: 'Фото профілю',
photo_btn: 'Завантажити фото',
photo_uploading: 'Завантаження...',
photo_hint: 'Відображається у вашому профілі',
},
step3: {
title: 'Картка послуги',
subtitle: 'Створіть вашу першу картку послуги',
title_label: 'Назва картки',
title_placeholder: 'Напр. Сантехнік, Електрик, Прибирання...',
desc_label: 'Опис',
desc_placeholder: 'Детально опишіть що ви пропонуєте, ваш досвід, переваги...',
title_required: 'Назва обов\'язкова',
generate_description: 'Створити опис',
},
step4: {
title: 'Навички і категорії',
subtitle: 'Додайте навички і оберіть категорії',
skills_label: 'Навички',
skills_placeholder: 'Напр. Монтаж труб...',
skills_add: 'Додати',
categories_label: 'Категорії',
categories_search: 'Пошук категорій',
categories_add: 'Додати «{name}»',
categories_required: 'Оберіть щонайменше одну категорію, щоб продовжити',
},
step5: {
title: 'Географія обслуговування',
subtitle: 'Де ви надаєте послуги?',
hint: 'Оберіть міста або конкретні райони',
},
done: {
title: 'Ваша картка готова',
subtitle: 'Надішліть її на перевірку',
desc: 'Після схвалення нашою командою картка буде видима клієнтам.',
submit_for_review: 'Надіслати на перевірку',
submitted: 'Картку надіслано на перевірку',
},
},
become_specialist: {
hero: {
title: 'Заробляйте, роблячи те, що вмієте',
subtitle: 'Створіть профіль спеціаліста і отримуйте замовлення від клієнтів по всій Греції',
},
how: { title: 'Як це працює' },
step1: {
title: 'Створіть картку спеціаліста',
desc: 'Вкажіть категорії, навички і райони — система знайде завдання автоматично',
},
step2: {
title: 'Знайдіть завдання',
desc: 'Переглядайте завдання у своїх категоріях в розділі «Знайти завдання»',
},
step3: {
title: 'Надішліть пропозицію і заробляйте',
desc: 'Подавайте пропозиції з ціною і термінами, спілкуйтеся з клієнтами і виконуйте завдання',
},
benefits: { title: 'Переваги профілю спеціаліста' },
benefit1: 'Пошук за категорією і локацією',
benefit2: 'Публічний профіль з відгуками',
benefit3: 'Розклад видно клієнтам',
benefit4: 'Додавання до вибраного клієнтами',
free_badge: 'Реєстрація безкоштовна',
},
site: {
member_since: 'З нами з',
rating: 'Рейтинг',
completed_tasks: 'Виконано',
languages: 'Мов',
photos: 'фото',
contact_form: 'Зв\'язатися',
contact_sent: 'Повідомлення надіслано!',
contact_sent_desc: 'Спеціаліст зв\'яжеться з вами найближчим часом',
contact_name: 'Ім\'я',
contact_name_ph: 'Ваше ім\'я',
contact_email_ph: 'your@email.com',
contact_message: 'Повідомлення',
contact_message_ph: 'Опишіть ваше завдання...',
contact_send: 'Надіслати',
share: 'Поділитися',
speaks_languages: 'Розмовляє мовами',
message_sent: 'Повідомлення надіслано!',
message_sent_desc: 'Спеціаліст отримає його в чаті',
message_placeholder: 'Напишіть повідомлення...',
},
user: {
specialist_cards: 'Картки послуг',
categories: 'Категорії',
work_area: 'Район роботи',
},
},
}
const app = new Hono()
app.get('/locales', (c) => c.json(['el', 'en', 'uk', 'ru']))
app.get('/:locale', (c) => {
const locale = c.req.param('locale') as Locale
const t = translations[locale]
if (!t) return c.json({ error: 'Locale not found' }, 404)
return c.json(t)
})
export default app