diff --git a/backend/src/infrastructure/providers/cognito/module/cognito.service.ts b/backend/src/infrastructure/providers/cognito/module/cognito.service.ts index 927df7368..44a6d8872 100644 --- a/backend/src/infrastructure/providers/cognito/module/cognito.service.ts +++ b/backend/src/infrastructure/providers/cognito/module/cognito.service.ts @@ -4,6 +4,7 @@ import { CognitoModuleOptions } from './cognito.interfaces'; import { AdminDeleteUserCommand, AdminUserGlobalSignOutCommand, + AdminUpdateUserAttributesCommand, CognitoIdentityProviderClient, } from '@aws-sdk/client-cognito-identity-provider'; @@ -24,6 +25,21 @@ export class CognitoService { }); } + async updateUser(cognitoId: string, phoneNumber: string): Promise { + const command = new AdminUpdateUserAttributesCommand({ + UserPoolId: this.options.defaultUserPoolId, + Username: cognitoId, + UserAttributes: [ + { + Name: 'phone_number', + Value: phoneNumber, + }, + ], + }); + + return await this.cognitoProvider.send(command); + } + async deleteUser(cognitoId: string): Promise { const deleteUserCommand = new AdminDeleteUserCommand({ UserPoolId: this.options.defaultUserPoolId, diff --git a/backend/src/modules/event/exceptions/event-rsvp.exceptions.ts b/backend/src/modules/event/exceptions/event-rsvp.exceptions.ts index 8b1cba208..2d5a4f322 100644 --- a/backend/src/modules/event/exceptions/event-rsvp.exceptions.ts +++ b/backend/src/modules/event/exceptions/event-rsvp.exceptions.ts @@ -28,7 +28,7 @@ export const EventRSVPExceptionMessages: Record< }, [EventsRSVPExceptionCodes.EVENT_RSVP_003]: { code_error: EventsRSVPExceptionCodes.EVENT_RSVP_003, - message: 'Only ACTIVE volunteers can join events.', + message: 'Only ACTIVE or ARCHIVED volunteers can join events.', }, [EventsRSVPExceptionCodes.EVENT_RSVP_004]: { code_error: EventsRSVPExceptionCodes.EVENT_RSVP_004, diff --git a/backend/src/modules/event/repositories/event.repository.ts b/backend/src/modules/event/repositories/event.repository.ts index 7297fb149..d37d00cd2 100644 --- a/backend/src/modules/event/repositories/event.repository.ts +++ b/backend/src/modules/event/repositories/event.repository.ts @@ -206,7 +206,7 @@ export class EventRepository // Get all events in progress from the organizations i am part or public events query.andWhere( - '(event.endDate > :currentDate OR event.endDate IS NULL) AND event.startDate <= :currentDate AND ((event.isPublic = :isPublic AND event.organizationId NOT IN ' + + '(event.endDate > :currentDate OR event.endDate IS NULL) AND ((event.isPublic = :isPublic AND event.organizationId NOT IN ' + query .subQuery() .select('vol.organizationId') @@ -255,10 +255,11 @@ export class EventRepository const query = this.createSelectOpenOrganizationGoingEventsBaseSelectQuery(); query.andWhere( - '(event.endDate > :currentDate OR event.endDate IS NULL) AND v.status = :active AND v.userId = :userId', + '(event.endDate > :currentDate OR event.endDate IS NULL) AND ((v.status = :active AND v.userId = :userId) OR event.isPublic = :isPublic)', { currentDate: new Date(), active: VolunteerStatus.ACTIVE, + isPublic: true, }, ); diff --git a/backend/src/modules/user/exceptions/exceptions.ts b/backend/src/modules/user/exceptions/exceptions.ts index 850cda71d..23e42fef5 100644 --- a/backend/src/modules/user/exceptions/exceptions.ts +++ b/backend/src/modules/user/exceptions/exceptions.ts @@ -8,6 +8,7 @@ export enum UserExceptionCodes { USER_005 = 'USER_005', USER_006 = 'USER_006', USER_007 = 'USER_007', + USER_008 = 'USER_008', } type UserExceptionCodeType = keyof typeof UserExceptionCodes; @@ -45,4 +46,8 @@ export const UserExceptionMessages: Record< code_error: UserExceptionCodes.USER_007, message: 'Error while trying to delete user account', }, + [UserExceptionCodes.USER_008]: { + code_error: UserExceptionCodes.USER_008, + message: 'Error while trying to update the user data', + }, }; diff --git a/backend/src/usecases/activity-log/update-activity-log.usecase.ts b/backend/src/usecases/activity-log/update-activity-log.usecase.ts index c0a03cfc5..6713ccd06 100644 --- a/backend/src/usecases/activity-log/update-activity-log.usecase.ts +++ b/backend/src/usecases/activity-log/update-activity-log.usecase.ts @@ -50,7 +50,7 @@ export class UpdateActivityLogUsecase if (updates.activityTypeId) { const taskExists = await this.activityTypeFacade.exists( [updates.activityTypeId], - { organizationId: log.event.organization.id }, + { organizationId: log.event?.organization.id || log.organization.id }, // in case the organization doesn't have an event associated with it ); if (!taskExists) { this.exceptionService.badRequestException( diff --git a/backend/src/usecases/event/RSVP/create-rsvp.usecase.ts b/backend/src/usecases/event/RSVP/create-rsvp.usecase.ts index 382bd9e0c..5be29b5d5 100644 --- a/backend/src/usecases/event/RSVP/create-rsvp.usecase.ts +++ b/backend/src/usecases/event/RSVP/create-rsvp.usecase.ts @@ -52,27 +52,27 @@ export class CreateEventRSVPUseCase organizationId: event.organization.id, }); - if (volunteer) { - // 4. Only ACTIVE volunteers can join events. In case the user is already a volunteer and is BLOCKED or ARCHIVED. Non-volunteers will pass this validation for public events - if (volunteer.status !== VolunteerStatus.ACTIVE) { - this.exceptionsService.badRequestException( - EventRSVPExceptionMessages.EVENT_RSVP_003, - ); - } else if (!volunteer.volunteerProfile) { - // 5. Volunteers must have the profile completed to RSVP. - this.exceptionsService.badRequestException( - EventRSVPExceptionMessages.EVENT_RSVP_005, - ); - } + // 4. If the volunteer is blocked the user should not be able to join the event + if (volunteer?.status === VolunteerStatus.BLOCKED) { + this.exceptionsService.badRequestException( + EventRSVPExceptionMessages.EVENT_RSVP_003, + ); } - // 6. For "private" events, check if the USER is VOLUNTEER in the ORGANIZATION of the EVENT + // 5. For "private" events, check if the USER is VOLUNTEER in the ORGANIZATION of the EVENT if (!event.isPublic && !volunteer) { this.exceptionsService.badRequestException( EventRSVPExceptionMessages.EVENT_RSVP_002, ); } + // 6. For private events volunteers must have the profile completed to RSVP. + if (!event.isPublic && volunteer && !volunteer.volunteerProfile) { + this.exceptionsService.badRequestException( + EventRSVPExceptionMessages.EVENT_RSVP_005, + ); + } + // 7. Check if userId and eventId is unique in RSVP, if exists, update only the "going" response const existingRSVP = await this.eventFacade.findRSVP({ userId: data.userId, diff --git a/backend/src/usecases/user/create-regular-user.usecase.ts b/backend/src/usecases/user/create-regular-user.usecase.ts index 74fffd9d8..ef160ace3 100644 --- a/backend/src/usecases/user/create-regular-user.usecase.ts +++ b/backend/src/usecases/user/create-regular-user.usecase.ts @@ -9,6 +9,8 @@ import { ExceptionsService } from 'src/infrastructure/exceptions/exceptions.serv import { UserExceptionMessages } from 'src/modules/user/exceptions/exceptions'; import { NotificationsSettingsFacade } from 'src/modules/notifications/notifications-settings.facade'; import { GetOneRegularUserProfileUseCase } from './get-regule-user-profile.usecase'; +import { CognitoService } from 'src/infrastructure/providers/cognito/module/cognito.service'; +import { JSONStringifyError } from 'src/common/helpers/utils'; @Injectable() export class CreateRegularUsereUseCaseService @@ -21,6 +23,7 @@ export class CreateRegularUsereUseCaseService private exceptionService: ExceptionsService, private readonly notificationSettingsFacade: NotificationsSettingsFacade, private readonly getRegularUserProfileUsecase: GetOneRegularUserProfileUseCase, + private readonly cognitoService: CognitoService, ) {} async execute( @@ -40,11 +43,27 @@ export class CreateRegularUsereUseCaseService const notificationsSettings = await this.notificationSettingsFacade.create(); + // 1. update cognito phone number + // OBS: This needs to be done as cognito accepts duplicates in regards to phone numbers and this will keep the data in sync + try { + await this.cognitoService.updateUser(newUser.cognitoId, newUser.phone); + } catch (error) { + this.logger.error({ + ...UserExceptionMessages.USER_008, + error: JSONStringifyError(error), + }); + this.exceptionService.internalServerErrorException( + UserExceptionMessages.USER_008, + ); + } + + // 2. create new user const user = await this.userService.createRegularUser({ ...newUser, notificationsSettingsId: notificationsSettings.id, }); + // 3. get user profile return this.getRegularUserProfileUsecase.execute({ id: user.id }); } } diff --git a/backend/src/usecases/user/update-regular-user.usecase.ts b/backend/src/usecases/user/update-regular-user.usecase.ts index 6a0fca75b..5c128eea8 100644 --- a/backend/src/usecases/user/update-regular-user.usecase.ts +++ b/backend/src/usecases/user/update-regular-user.usecase.ts @@ -11,6 +11,7 @@ import { S3Service } from 'src/infrastructure/providers/s3/module/s3.service'; import { S3_FILE_PATHS } from 'src/common/constants/constants'; import { JSONStringifyError } from 'src/common/helpers/utils'; import { GetOneRegularUserProfileUseCase } from './get-regule-user-profile.usecase'; +import { CognitoService } from 'src/infrastructure/providers/cognito/module/cognito.service'; @Injectable() export class UpdateRegularUserUsecase @@ -23,6 +24,7 @@ export class UpdateRegularUserUsecase private readonly getRegularUserProfileUsecase: GetOneRegularUserProfileUseCase, private readonly exceptionService: ExceptionsService, private readonly s3Service: S3Service, + private readonly cognitoService: CognitoService, ) {} async execute( @@ -38,7 +40,22 @@ export class UpdateRegularUserUsecase this.exceptionService.notFoundException(UserExceptionMessages.USER_001); } - // 3. check if new profilePicture is provided + // 3. Check if the user phone number is the same as the one from the request + if (user.phone !== userUpdates.phone) { + try { + await this.cognitoService.updateUser(user.cognitoId, userUpdates.phone); + } catch (error) { + this.logger.error({ + ...UserExceptionMessages.USER_008, + error: JSONStringifyError(error), + }); + this.exceptionService.internalServerErrorException( + UserExceptionMessages.USER_008, + ); + } + } + + // 4. check if new profilePicture is provided if (profilePicture) { try { // 3.1 upload File and get path @@ -67,13 +84,13 @@ export class UpdateRegularUserUsecase } } - // 4 update db structure + // 5 update db structure const updatedUser = await this.userService.updateRegularUser( id, userUpdates, ); - // 5. return user profile with presigned url + // 6. return user profile with presigned url return this.getRegularUserProfileUsecase.execute({ id: updatedUser.id }); } } diff --git a/backend/src/usecases/volunteer/join-organization-by-access-code.usecase.ts b/backend/src/usecases/volunteer/join-organization-by-access-code.usecase.ts index c476b3a05..4f4a15a47 100644 --- a/backend/src/usecases/volunteer/join-organization-by-access-code.usecase.ts +++ b/backend/src/usecases/volunteer/join-organization-by-access-code.usecase.ts @@ -9,7 +9,13 @@ import { } from 'src/modules/volunteer/model/volunteer.model'; import { CreateVolunteerUseCase } from './create-volunteer.usecase'; import { AccessCodeFacade } from 'src/modules/organization/services/access-code.facade'; -import { compareAsc } from 'date-fns'; +import { + endOfDay, + endOfToday, + endOfTomorrow, + isWithinInterval, + startOfDay, +} from 'date-fns'; import { AccessCodeExceptionMessages } from 'src/modules/organization/exceptions/access-codes.exceptions'; @Injectable() @@ -50,10 +56,19 @@ export class JoinOrganizationByAccessCodeUsecase ); } + // Added this to have more control over the time. + const today = endOfToday(); + // start of the day to have the full interval + const startDate = startOfDay(accessCode.startDate); + // end of the day to have the full interval, and also in case the interval is open ended end of tomorrow will always include today + const endDate = endOfDay(accessCode.endDate || endOfTomorrow()); + // check fi the access code is valid if ( - compareAsc(accessCode.startDate, new Date()) > 0 || - (accessCode.endDate && compareAsc(accessCode.endDate, new Date()) < 0) + !isWithinInterval(today, { + start: startDate, + end: endDate, + }) ) { this.exceptionService.badRequestException( AccessCodeExceptionMessages.ACCESS_CODE_001, diff --git a/frontend/src/pages/EditVolunteer.tsx b/frontend/src/pages/EditVolunteer.tsx index cb4a0dcbf..336e179b8 100644 --- a/frontend/src/pages/EditVolunteer.tsx +++ b/frontend/src/pages/EditVolunteer.tsx @@ -30,7 +30,7 @@ export type VolunteerFormTypes = { branch?: SelectItem; role?: SelectItem; department?: SelectItem; - activeSince?: Date; + activeSince?: Date | null; }; const schema = yup.object({ @@ -43,6 +43,7 @@ const schema = yup.object({ activeSince: yup .date() .optional() + .nullable() .typeError(`${i18n.t('general:invalid_date')}`), }); diff --git a/mobile/app.config.ts b/mobile/app.config.ts index d851267c7..76a0c377e 100644 --- a/mobile/app.config.ts +++ b/mobile/app.config.ts @@ -7,7 +7,7 @@ const expoConfig: ExpoConfig = { name: 'vic', slug: 'vic', scheme: 'vic', - version: '1.0.14', + version: '1.0.19', orientation: 'portrait', icon: './src/assets/images/icon.png', userInterfaceStyle: 'light', @@ -18,7 +18,7 @@ const expoConfig: ExpoConfig = { }, assetBundlePatterns: ['**/*'], ios: { - buildNumber: '17', + buildNumber: '22', supportsTablet: false, bundleIdentifier: 'org.commitglobal.vic', entitlements: { @@ -32,7 +32,7 @@ const expoConfig: ExpoConfig = { }, }, android: { - versionCode: 15, + versionCode: 22, adaptiveIcon: { foregroundImage: './src/assets/images/adaptive-icon.png', backgroundColor: '#ffffff', diff --git a/mobile/eas.json b/mobile/eas.json index 266081e54..ab3b8b25c 100644 --- a/mobile/eas.json +++ b/mobile/eas.json @@ -32,11 +32,15 @@ } }, "preview": { - "distribution": "internal", + // "distribution": "internal", "channel": "staging", "env": { "EXPO_PUBLIC_ENVIRONMENT": "staging", "EXPO_PUBLIC_API_URL": "https://api-vic-staging.ngohub.ro", + "EXPO_PUBLIC_AWS_REGION": "eu-west-1", + "EXPO_PUBLIC_USER_POOL_ID": "eu-west-1_HRB7J3vjJ", + "EXPO_PUBLIC_USER_POOL_CLIENT_ID": "4sihusclii449k2otmeetl4dgq", + "EXPO_PUBLIC_AWS_DOMAIN": "vic-staging.auth.eu-west-1.amazoncognito.com", "EXPO_PUBLIC_PRIVACY_POLICY_LINK": "https://www.ngohub.ro/ro/politica-de-confidentialitate", "EXPO_PUBLIC_TERMS_AND_CONDITIONS_LINK": "https://www.ngohub.ro/ro/termeni-si-conditii", "EXPO_PUBLIC_INFORMATION_LINK": "https://www.ngohub.ro/ro/vic", diff --git a/mobile/src/assets/locales/en/translation.json b/mobile/src/assets/locales/en/translation.json index 6efcbb2f1..e20a6545b 100644 --- a/mobile/src/assets/locales/en/translation.json +++ b/mobile/src/assets/locales/en/translation.json @@ -1,778 +1,782 @@ { - "general": { - "current_month": "This month", - "about_vic": "About VIC", - "event": "Event", - "news": "Latest news", - "organizations": "Organizations", - "organization": "Organization", - "active_volunteers": "active volunteers", - "documents": "Documents", - "updates": "updates", - "edit": "Edit {{item}}", - "add": "Add {{item}}", - "role": "Role", - "department": "Department", - "branch": "Branch", - "phone": "Phone", - "join": "Join", - "select": "Select", - "sex": "Sex {{sex_type}}", - "male": "Manly", - "female": "Female", - "register": "Register", - "continue": "Continue", - "save": "Save", - "send": "Send", - "delete": "Delete", - "volunteers": "Volunteers", - "loading": "Loading...", - "empty_list": "No results", - "error": { - "load_entries": "Error loading data", - "unknown": "An unknown error has occurred", - "generic_error": "Data processing error, code: #{{code}}" - }, - "back": "Back to" - }, - "landing": { - "message": "Register in the app using one of the following ways", - "registered": "Already have an account?", - "email": "E-mail or phone", - "login": "Log in", - "social": { - "facebook": "Facebook", - "apple": "Apple", - "google": "Google" - } + "general": { + "current_month": "This month", + "about_vic": "About VIC", + "event": "Event", + "news": "Latest news", + "organizations": "Organizations", + "organization": "Organization", + "active_volunteers": "active volunteers", + "documents": "Documents", + "updates": "updates", + "edit": "Edit {{item}}", + "add": "Add {{item}}", + "role": "Role", + "department": "Department", + "branch": "Branch", + "phone": "Phone", + "join": "Join", + "select": "Select", + "sex": "Sex {{sex_type}}", + "male": "Manly", + "female": "Female", + "register": "Register", + "continue": "Continue", + "save": "Save", + "send": "Send", + "delete": "Delete", + "volunteers": "Volunteers", + "loading": "Loading...", + "empty_list": "No results", + "error": { + "load_entries": "Error loading data", + "unknown": "An unknown error has occurred", + "generic_error": "Data processing error, code: #{{code}}" }, - "register": { - "title": "Create account", - "create_account": { - "heading": "Account data", - "paragraph": "Fill in the fields below to register", - "form": { - "email": { - "label": "E-mail", - "placeholder": "Enter your email address", - "required": "Email is required", - "pattern": "Email format is invalid" - }, - "phone": { - "label": "Phone", - "placeholder": "Enter your phone", - "length": "Phone number must have {{number}} characters", - "required": "Phone is mandatory", - "pattern": "The telephone number must contain only numbers" - }, - "password": { - "label": "Password", - "placeholder": "Enter your password", - "required": "Password is required", - "pattern": "The password must contain a minimum of 8 characters, uppercase letters, lowercase letters, numbers and special characters, without spaces" - }, - "confirm_password": { - "label": "Confirm password", - "placeholder": "Confirm password", - "required": "Password is required", - "match": "Passwords must be identical" - }, - "terms": { - "agree": "I agree with ", - "conditions": "Terms and Conditions", - "and": "as well as with ", - "privacy_policy": "Privacy Policy ", - "application": "of the application", - "required": "You must accept the Terms, Conditions and Privacy Policy in order to proceed." - } - }, - "secondary_action": { - "label": "Already have an account?", - "link": "Log in" - } - }, - "validate_account": { - "heading": "Check code received by email", - "paragraph": "Fill in the fields below to register.", - "form": { - "code": { - "label": "Enter the code received by email", - "placeholder": "Enter the code received by email", - "required": "The code is mandatory", - "length": "The code must be 6 characters long", - "pattern": "The code must contain only digits" - } - } - }, - "create_user": { - "heading": "User data", - "paragraph": "Fill in the fields below to complete the registration.", - "form": { - "first_name": { - "label": "First name", - "placeholder": "Enter first name", - "required": "First name is required", - "min": "The first name can be a minimum of {{value}} characters", - "max": "The first name can have a maximum of {{value}} characters" - }, - "last_name": { - "label": "Name", - "placeholder": "Enter your surname", - "required": "Surname is required", - "min": "The name can have a minimum of {{value}} characters", - "max": "The name can have a maximum of {{value}} characters" - }, - "county": { - "label": "County" - }, - "city": { - "label": "City" - }, - "birthday": { - "label": "Date of birth" - } - } + "back": "Back to" + }, + "landing": { + "message": "Register in the app using one of the following ways", + "registered": "Already have an account?", + "email": "E-mail or phone", + "login": "Log in", + "social": { + "facebook": "Facebook", + "apple": "Apple", + "google": "Google" + } + }, + "register": { + "title": "Create account", + "create_account": { + "heading": "Account data", + "paragraph": "Fill in the fields below to register", + "form": { + "email": { + "label": "E-mail", + "placeholder": "Enter your email address", + "required": "Email is required", + "pattern": "Email format is invalid" + }, + "phone": { + "label": "Phone", + "placeholder": "Enter your phone", + "length": "Phone number must have {{number}} characters", + "required": "Phone is mandatory", + "pattern": "The telephone number must contain only numbers" + }, + "password": { + "label": "Password", + "placeholder": "Enter your password", + "required": "Password is required", + "pattern": "The password must contain a minimum of 8 characters, uppercase letters, lowercase letters, numbers and special characters, without spaces" + }, + "confirm_password": { + "label": "Confirm password", + "placeholder": "Confirm password", + "required": "Password is required", + "match": "Passwords must be identical" + }, + "terms": { + "agree": "I agree with ", + "conditions": "Terms and Conditions", + "and": "as well as with ", + "privacy_policy": "Privacy Policy ", + "application": "of the application", + "required": "You must accept the Terms, Conditions and Privacy Policy in order to proceed." } + }, + "secondary_action": { + "label": "Already have an account?", + "link": "Log in" + } }, - "auth": { - "errors": { - "unauthorized": "Wrong username or password", - "username_exists": "There is already a user with this email address", - "signup": "Registration error. Check your registration details and try again.", - "resend_code": "Error sending confirmation code", - "init_profile": "Error loading profile", - "login": "Login error, please try again", - "invalid_password": "Password is not compliant with security policy", - "password": "Password change error", - "code_mismatch": "Code is invalid", - "forgot_password": "Password reset error" + "validate_account": { + "heading": "Check code received by email", + "paragraph": "Fill in the fields below to register.", + "form": { + "code": { + "label": "Enter the code received by email", + "placeholder": "Enter the code received by email", + "required": "The code is mandatory", + "length": "The code must be 6 characters long", + "pattern": "The code must contain only digits" } + } }, - "login": { - "title": "Login", - "paragraph": "Enter your email and password to log in.", - "submit": "Log in", - "forgot_password": "Forgot your password? ", - "form": { - "email": { - "label": "E-mail", - "placeholder": "Enter your email address", - "required": "Email is required", - "pattern": "Email format is invalid" - }, - "password": { - "label": "Password", - "placeholder": "Enter your password", - "required": "Password is required" - } + "create_user": { + "heading": "User data", + "paragraph": "Fill in the fields below to complete the registration.", + "form": { + "first_name": { + "label": "First name", + "placeholder": "Enter first name", + "required": "First name is required", + "min": "The first name can be a minimum of {{value}} characters", + "max": "The first name can have a maximum of {{value}} characters" + }, + "last_name": { + "label": "Name", + "placeholder": "Enter your surname", + "required": "Surname is required", + "min": "The name can have a minimum of {{value}} characters", + "max": "The name can have a maximum of {{value}} characters" + }, + "county": { + "label": "County" + }, + "city": { + "label": "City" + }, + "birthday": { + "label": "Date of birth" } + } + } + }, + "auth": { + "errors": { + "unauthorized": "Wrong username or password", + "username_exists": "There is already a user with this email address", + "signup": "Registration error. Check your registration details and try again.", + "resend_code": "Error sending confirmation code", + "init_profile": "Error loading profile", + "login": "Login error, please try again", + "invalid_password": "Password is not compliant with security policy", + "password": "Password change error", + "code_mismatch": "Code is invalid", + "forgot_password": "Password reset error" + } + }, + "login": { + "title": "Login", + "paragraph": "Enter your email and password to log in.", + "submit": "Log in", + "forgot_password": "Forgot your password? ", + "form": { + "email": { + "label": "E-mail", + "placeholder": "Enter your email address", + "required": "Email is required", + "pattern": "Email format is invalid" + }, + "password": { + "label": "Password", + "placeholder": "Enter your password", + "required": "Password is required" + } + } + }, + "forgot_password": { + "header": "Reset password", + "paragraph": "Please enter your account email or phone number to reset your password.", + "form": { + "email": { + "label": "E-mail", + "required": "Email is required", + "pattern": "Email format is invalid" + } }, - "forgot_password": { - "header": "Reset password", - "paragraph": "Please enter your account email or phone number to reset your password.", - "form": { - "email": { - "label": "E-mail", - "required": "Email is required", - "pattern": "Email format is invalid" - } - }, - "submit": { - "label": "Send reset code" - } + "submit": { + "label": "Send reset code" + } + }, + "confirm_password": { + "header": "Reset password", + "form": { + "code": { + "label": "Enter the code received by email", + "placeholder": "Enter the code received by email", + "required": "The code is mandatory", + "length": "The code must be 6 characters long", + "pattern": "The code must contain only digits" + }, + "password": { + "label": "Password", + "placeholder": "Enter your password", + "required": "Password is required", + "pattern": "The password must contain a minimum of 8 characters, uppercase letters, lowercase letters, numbers and special characters, without spaces" + }, + "confirm_password": { + "label": "Confirm password", + "placeholder": "Confirm password", + "required": "Password is required", + "match": "Passwords must be identical" + } }, - "confirm_password": { - "header": "Reset password", - "form": { - "code": { - "label": "Enter the code received by email", - "placeholder": "Enter the code received by email", - "required": "The code is mandatory", - "length": "The code must be 6 characters long", - "pattern": "The code must contain only digits" - }, - "password": { - "label": "Password", - "placeholder": "Enter your password", - "required": "Password is required", - "pattern": "The password must contain a minimum of 8 characters, uppercase letters, lowercase letters, numbers and special characters, without spaces" - }, - "confirm_password": { - "label": "Confirm password", - "placeholder": "Confirm password", - "required": "Password is required", - "match": "Passwords must be identical" - } - }, - "submit": { - "label": "Save changes" - } + "submit": { + "label": "Save changes" + } + }, + "settings": { + "title": "Account settings", + "heading": "Account data", + "identity": "Identity data", + "password": "Change password", + "notification": "Notifications settings", + "information": "Information", + "logout": "Log out", + "delete": "Delete account" + }, + "account_data": { + "title": "Account data", + "profile_picture": "Profile picture", + "change_profile_picture": "Change photo", + "submit": { + "success": "The dates have been changed!" }, - "settings": { - "title": "Account settings", - "heading": "Account data", - "identity": "Identity data", - "password": "Change password", - "notification": "Notifications settings", - "information": "Information", - "logout": "Log out", - "delete": "Delete account" - }, - "account_data": { - "title": "Account data", - "profile_picture": "Profile picture", - "change_profile_picture": "Change photo", - "submit": { - "success": "The dates have been changed!" - }, - "errors": { - "USER_006": "Error changing profile photo" - } + "errors": { + "USER_006": "Error changing profile photo" + } + }, + "identity_data": { + "title": "Identity data", + "description": "Enter your ID card details. These will be used to generate the volunteer contract.", + "privacy_policy": "Privacy Policy", + "form": { + "series": { + "label": "Identity document (ID) series", + "matches": "The series must contain only letters", + "placeholder": "Enter series (GZ, RX, etc.)", + "length": "Series must have {{number}} characters", + "required": "The series is mandatory" + }, + "number": { + "label": "Identity document number (CI)", + "placeholder": "Enter the 6-digit number", + "matches": "The number must contain only digits", + "length": "The number must have {{number}} characters", + "required": "The number is mandatory" + }, + "address": { + "label": "Domiciled in", + "placeholder": "Enter address", + "required": "Domicile is mandatory", + "helper": "Enter the full address from your ID.", + "min": "The address can have a minimum of {{value}} characters", + "max": "The address can have a maximum of {{value}} characters" + }, + "issue_date": { + "label": "Date of issue", + "required": "Date of issue is mandatory" + }, + "expiration_date": { + "label": "Expiry date", + "required": "Expiry date is mandatory" + }, + "submit": { + "success": "The dates have been changed!" + } + } + }, + "change_password": { + "title": "Change password", + "submit": { + "success": "Password has been changed!" + } + }, + "organizations": { + "title": "Search", + "search": { + "placeholder": "Name of organization" }, - "identity_data": { - "title": "Identity data", - "description": "Enter your ID card details. These will be used to generate the volunteer contract.", - "privacy_policy": "Privacy Policy", - "form": { - "series": { - "label": "Identity document (ID) series", - "matches": "The series must contain only letters", - "placeholder": "Enter series (GZ, RX, etc.)", - "length": "Series must have {{number}} characters", - "required": "The series is mandatory" - }, - "number": { - "label": "Identity document number (CI)", - "placeholder": "Enter the 6-digit number", - "matches": "The number must contain only digits", - "length": "The number must have {{number}} characters", - "required": "The number is mandatory" - }, - "address": { - "label": "Domiciled in", - "placeholder": "Enter address", - "required": "Domicile is mandatory", - "helper": "Enter the full address from your ID.", - "min": "The address can have a minimum of {{value}} characters", - "max": "The address can have a maximum of {{value}} characters" - }, - "issue_date": { - "label": "Date of issue", - "required": "Date of issue is mandatory" - }, - "expiration_date": { - "label": "Expiry date", - "required": "Expiry date is mandatory" - }, - "submit": { - "success": "The dates have been changed!" - } - } + "errors": { + "generic": "Error loading data" + } + }, + "organization_profile": { + "title": "Organization profile", + "description": "About the organization", + "email": "Contact email", + "phone": "Phone", + "address": "Head office address", + "area": "Area of activity", + "events": "Open events", + "volunteers": "{{number}} volunteers", + "join": "Join the organization", + "leave": "Leaving the organization", + "rejoin": "Rejoin the organization", + "cancel_request": "Cancel request", + "no_events": "No events to display", + "code": "Do you have an access code?", + "disclaimer": { + "access_request_pending": "Your registration awaits approval from the organization", + "joined_from": "You joined from {{date}}", + "volunteer_archived": "Your volunteer profile has been deactivated!", + "volunteer_blocked": "Your access to the organization has been restricted" }, - "change_password": { - "title": "Change password", - "submit": { - "success": "Password has been changed!" - } + "modal": { + "identity_data_missing": { + "heading": "Oops!", + "paragraph": "You didn't fill in the identity data in my Account. Fill it in to join an organization.", + "action_label": "Fill in the data" + }, + "confirm_cancel_request": { + "heading": "Are you cancelling your application?", + "paragraph": "The application has been sent to the organization's coordinators. Are you sure you want to withdraw your application?", + "action_label": "Cancel request" + } + } + }, + "join_ngo": { + "registration_form": "Application form", + "complete": "Fill in the details below to join the organization.", + "form": { + "referral": { + "label": "How did you hear about us?", + "required": "This field is mandatory", + "social": "Social networks", + "vic": "From the VIC app", + "friend": "From a colleague or friend", + "event": "From an event", + "other": "Another option" + }, + "motivation": { + "required": "This field is mandatory", + "label": "What motivates you to volunteer?", + "min": "The motivation can be a minimum of {{value}} characters", + "max": "The motivation can be up to {{value}} characters long", + "helper": "Fill in the field to register." + } }, - "organizations": { - "title": "Search", - "search": { - "placeholder": "Name of organization" - }, - "errors": { - "generic": "Error loading data" - } + "errors": { + "ACCESS_CODE_001": "Access code is invalid", + "ACCESS_REQUEST_001": "There is already an access request for this organization", + "ORG_001": "The organization has not been found", + "USER_001": "User not found", + "VOLUNTEER_002": "The user is already part of the organization", + "USER_005": "The user does not have the identification data filled in" }, - "organization_profile": { - "title": "Organization profile", - "description": "About the organization", - "email": "Contact email", - "phone": "Phone", - "address": "Head office address", - "area": "Area of activity", - "events": "Open events", - "volunteers": "{{number}} volunteers", - "join": "Join the organization", - "leave": "Leaving the organization", - "rejoin": "Rejoin the organization", - "cancel_request": "Cancel request", - "no_events": "No events to display", - "code": "Do you have an access code?", - "disclaimer": { - "access_request_pending": "Your registration awaits approval from the organization", - "joined_from": "You joined from {{date}}", - "volunteer_archived": "Your volunteer profile has been deactivated!", - "volunteer_blocked": "Your access to the organization has been restricted" - }, - "modal": { - "identity_data_missing": { - "heading": "Oops!", - "paragraph": "You didn't fill in the identity data in my Account. Fill it in to join an organization.", - "action_label": "Fill in the data" - }, - "confirm_cancel_request": { - "heading": "Are you cancelling your application?", - "paragraph": "The application has been sent to the organization's coordinators. Are you sure you want to withdraw your application?", - "action_label": "Cancel request" - } - } + "modal": { + "success": { + "heading": "Congratulations!", + "paragraph": "The application has been sent to the organization's coordinators. You will be notified as soon as they have responded.", + "primary_action_label": "Search for other organizations", + "secondary_action_label": "Close" + } + } + }, + "access_request": { + "title": "Application for access refused", + "paragraph": "Your access request dated {{date}} has been rejected.", + "reason": "Reason for rejection", + "errors": { + "ACCESS_REQUEST_002": "Request not found" + } + }, + "leave_ngo": { + "header": "Leaving the organization", + "paragraph": "If you leave the organization, it will delete your data.", + "action_btn": "Leaving the organization", + "modal": { + "confirm_leave_organization": { + "heading": "Are you sure you want to leave the organization?", + "paragraph": "If you leave the organization, it will delete your data, including your registered hours and volunteer documents. For more details, you can contact the organization.", + "action_label": "Leaving the organization" + } + } + }, + "volunteer": { + "title": "Volunteer profile", + "no_org_added": "You have not added any organizations yet", + "no_org_description": "", + "my_organizations": "My organizations", + "join_organization": "Join an organization", + "edit": "Edit volunteer profile", + "form": { + "email": { + "label": "Contact email", + "required": "Email is required", + "pattern": "The email format is invalid" + }, + "phone": { + "label": "Phone", + "info": "You cannot change this field." + }, + "active_since": { + "label": "Volunteer from", + "required": "Date is mandatory" + } }, - "join_ngo": { - "registration_form": "Application form", - "complete": "Fill in the details below to join the organization.", - "form": { - "referral": { - "label": "How did you hear about us?", - "required": "This field is mandatory", - "social": "Social networks", - "vic": "From the VIC app", - "friend": "From a colleague or friend", - "event": "From an event", - "other": "Another option" - }, - "motivation": { - "required": "This field is mandatory", - "label": "What motivates you to volunteer?", - "min": "The motivation can be a minimum of {{value}} characters", - "max": "The motivation can be up to {{value}} characters long", - "helper": "Fill in the field to register." - } - }, - "errors": { - "ACCESS_CODE_001": "Access code is invalid", - "ACCESS_REQUEST_001": "There is already an access request for this organization", - "ORG_001": "The organization has not been found", - "USER_001": "User not found", - "VOLUNTEER_002": "The user is already part of the organization", - "USER_005": "The user does not have the identification data filled in" - }, - "modal": { - "success": { - "heading": "Congratulations!", - "paragraph": "The application has been sent to the organization's coordinators. You will be notified as soon as they have responded.", - "primary_action_label": "Search for other organizations", - "secondary_action_label": "Close" - } + "details": "", + "menu_items": { + "organization_profile": { + "title": "Organization profile" + }, + "activity_log": { + "title": "Volunteer hours", + "subtitle": { + "one": "{{number}} request awaiting approval", + "many": "{{number}} requests awaiting approval" } + }, + "documents": { + "title": "Documents", + "subtitle": "{{number}} documents await response" + }, + "volunteer_profile": { + "title": "Volunteer profile", + "subtitle": "Incomplete profile" + } + }, + "age": "{{years}} years", + "county": ", jud {{name}}", + "information": "Voluntary information", + "email": "Contact email", + "active_since": "Volunteer from", + "created_on": "Registered in VIC since", + "errors": { + "VOLUNTEER_PROFILE_003": "The volunteer has no profile created. Create one first!", + "VOLUNTEER_003": "Only active volunteers can be archived", + "VOLUNTEER_004": "Only archived volunteers can be activated", + "VOLUNTEER_005": "The user has no organization profile for this NGO" }, - "access_request": { - "title": "Application for access refused", - "paragraph": "Your access request dated {{date}} has been rejected.", - "reason": "Reason for rejection", + "missing_profile": { + "heading": "You have not yet created a user profile", + "paragraph": "", + "action_btn": "Create profile" + } + }, + "create_volunteer": { + "heading": "Complete volunteer profile", + "paragraph": "Fill in your volunteer profile to be contacted and start reporting your volunteer hours!", + "form": { + "email": { + "label": "Contact e-mail", + "required": "Email is required", + "placeholder": "Enter your email", + "pattern": "Email format is invalid" + }, + "checkbox": { + "label": "Same as VIC account email" + }, + "branch": { + "label": "Subsidiary or branch" + }, + "active_since": { + "label": "Volunteer from" + }, + "submit": { "errors": { - "ACCESS_REQUEST_002": "Request not found" + "VOLUNTEER_001": "The volunteer has not been found!", + "VOLUNTEER_PROFILE_001": "The volunteer already has a profile!", + "ORGANIZATION_STRUCTURE_001": "Organizational structure does not exist" } + } + } + }, + "events": { + "header": "Events", + "search": { + "placeholder": "Search" }, - "leave_ngo": { - "header": "Leaving the organization", - "paragraph": "If you leave the organization, it will delete your data.", - "action_btn": "Leaving the organization", - "modal": { - "confirm_leave_organization": { - "heading": "Are you sure you want to leave the organization?", - "paragraph": "If you leave the organization, it will delete your data, including your registered hours and volunteer documents. For more details, you can contact the organization.", - "action_label": "Leaving the organization" - } + "tabs": { + "going": "Particip", + "organizations": "My organizations", + "open": "Open" + } + }, + "event": { + "join": { + "header": "I want to participate", + "form": { + "mention": { + "label": "Mention", + "required": "The mention is mandatory", + "min": "The mention can be a minimum of {{value}} characters", + "max": "The mention can have a maximum of {{value}} characters", + "helper": "Fill in the field to register." } + } }, - "volunteer": { - "title": "Volunteer profile", - "no_org_added": "You have not added any organizations yet", - "no_org_description": "", - "my_organizations": "My organizations", - "join_organization": "Join an organization", - "edit": "Edit volunteer profile", - "form": { - "email": { - "label": "Contact email", - "required": "Email is required", - "pattern": "The email format is invalid" - }, - "phone": { - "label": "Phone", - "info": "You cannot change this field." - }, - "active_since": { - "label": "Volunteer from", - "required": "Date is mandatory" - } - }, - "details": "", - "menu_items": { - "organization_profile": { - "title": "Organization profile" - }, - "activity_log": { - "title": "Volunteer hours", - "subtitle": "{{number}} hours awaiting approval" - }, - "documents": { - "title": "Documents", - "subtitle": "{{number}} documents await response" - }, - "volunteer_profile": { - "title": "Volunteer profile", - "subtitle": "Incomplete profile" - } - }, - "age": "{{years}} years", - "county": ", jud {{name}}", - "information": "Voluntary information", - "email": "Contact email", - "active_since": "Volunteer from", - "created_on": "Registered in VIC since", - "errors": { - "VOLUNTEER_PROFILE_003": "The volunteer has no profile created. Create one first!", - "VOLUNTEER_003": "Only active volunteers can be archived", - "VOLUNTEER_004": "Only archived volunteers can be activated", - "VOLUNTEER_005": "The user has no organization profile for this NGO" - }, - "missing_profile": { - "heading": "You have not yet created a user profile", - "paragraph": "", - "action_btn": "Create profile" - } + "details": "Event details", + "date": "Date and time", + "name": "Event name", + "target": "Target", + "location": "Location", + "description": "Event description", + "tasks": "Related tasks", + "attending": "{{numberOfVolunteer}} people participate!", + "attending_of": "{{numberOfVolunteer}} of people participate!", + "attending_one": "One person participates!", + "attending_other": "", + "type": { + "public": "Public event", + "all_organization": "The whole organization" }, - "create_volunteer": { - "heading": "Complete volunteer profile", - "paragraph": "Fill in your volunteer profile to be contacted and start reporting your volunteer hours!", - "form": { - "email": { - "label": "Contact e-mail", - "required": "Email is required", - "placeholder": "Enter your email", - "pattern": "Email format is invalid" - }, - "checkbox": { - "label": "Same as VIC account email" - }, - "branch": { - "label": "Subsidiary or branch" - }, - "active_since": { - "label": "Volunteer from" - }, - "submit": { - "errors": { - "VOLUNTEER_001": "The volunteer has not been found!", - "VOLUNTEER_PROFILE_001": "The volunteer already has a profile!", - "ORGANIZATION_STRUCTURE_001": "Organizational structure does not exist" - } - } - } + "errors": { + "EVENT_RSVP_001": "The event was not found!", + "EVENT_RSVP_006": "The event is not yet published", + "EVENT_RSVP_007": "The event is closed", + "EVENT_RSVP_003": "Volunteer profile is not active", + "EVENT_RSVP_005": "Please fill in your volunteer profile before joining the event", + "EVENT_RSVP_002": "You must be a volunteer in the organization to participate in this event", + "EVENT_RSVP_004": "For this event it is mandatory to mention" }, - "events": { - "header": "Events", - "search": { - "placeholder": "Search" - }, - "tabs": { - "going": "Particip", - "organizations": "My organizations", - "open": "Open" - } + "rsvp": { + "going": "Particip", + "not_going": "Not participating", + "cancel": "Withdraw reply" }, - "event": { - "join": { - "header": "I want to participate", - "form": { - "mention": { - "label": "Mention", - "required": "The mention is mandatory", - "min": "The mention can be a minimum of {{value}} characters", - "max": "The mention can have a maximum of {{value}} characters", - "helper": "Fill in the field to register." - } - } - }, - "details": "Event details", - "date": "Date and time", - "name": "Event name", - "target": "Target", - "location": "Location", - "description": "Event description", - "tasks": "Related tasks", - "attending": "{{numberOfVolunteer}} people participate!", - "attending_of": "{{numberOfVolunteer}} of people participate!", - "attending_one": "One person participates!", - "attending_other": "", - "type": { - "public": "Public event", - "all_organization": "The whole organization" - }, - "errors": { - "EVENT_RSVP_001": "The event was not found!", - "EVENT_RSVP_006": "The event is not yet published", - "EVENT_RSVP_007": "The event is closed", - "EVENT_RSVP_003": "Volunteer profile is not active", - "EVENT_RSVP_005": "Please fill in your volunteer profile before joining the event", - "EVENT_RSVP_002": "You must be a volunteer in the organization to participate in this event", - "EVENT_RSVP_004": "For this event it is mandatory to mention" - }, - "rsvp": { - "going": "Particip", - "not_going": "Not participating", - "cancel": "Withdraw reply" - }, - "error_modal": { - "title": "Ups!", - "description": "You did not fill in the data for your volunteer profile. Fill it out in order to be able to attend the event.", - "action_btn_label": "Complete data" - } + "error_modal": { + "title": "Ups!", + "description": "You did not fill in the data for your volunteer profile. Fill it out in order to be able to attend the event.", + "action_btn_label": "Complete data" + } + }, + "activity_logs": { + "title": "Volunteer hours", + "tabs": { + "pending": "Waiting", + "approved": "Approved", + "rejected": "Rejected" }, - "activity_logs": { - "title": "Volunteer hours", - "tabs": { - "pending": "Waiting", - "approved": "Approved", - "rejected": "Rejected" - }, - "search": { - "placeholder": "Search" - }, - "error_modal": { - "title": "Ups!", - "description": "You did not fill in the data for your volunteer profile. Fill it out in order to be able to log volunteering hours.", - "action_btn_label": "Complete data" - } + "search": { + "placeholder": "Search" }, - "activity_log": { - "title": "Log", - "add_title": "Add volunteer hours", - "rejection_reason": "Reason for rejection", - "other": "Another option", - "total": "Total", - "disclaimer": { - "approved": "Approved at {{date}}", - "pending": "Requires approval from the organization", - "rejected": "Rejected at {{date}}" - }, - "form": { - "event": { - "label": "Event" - }, - "task": { - "label": "Task", - "required": "Choice of task is mandatory" - }, - "date": { - "label": "Date", - "required": "Date is mandatory" - }, - "hours": { - "label": "Number of hours", - "number": "The number must contain only digits", - "placeholder": "Add number of hours", - "required": "The number of hours is compulsory", - "min": "The number of hours must be greater than {{value}}", - "max": "The number of hours must be less than {{value}}", - "integer": "The number of hours must be whole" - }, - "mentions": { - "label": "Mentions", - "placeholder": "Add mention", - "min": "The mention can be a minimum of {{value}} characters", - "max": "The mention can have a maximum of {{value}} characters" - } - }, - "errors": { - "ACTIVITY_LOG_001": "No logging of hours", - "ACTIVITY_LOG_002": "The volunteer does not have a completed profile", - "ACTIVITY_LOG_004": "Cannot cancel approved or rejected requests", - "VOLUNTEER_001": "Volunteer does not exist", - "EVENT_001": "The event does not exist", - "ACTIVITY_TYPE_001": "Type of activity does not exist" - }, - "confirmation_modal": { - "paragraph": " Are you sure you want to delete this log?" - }, - "toast": { - "success": "The log was successfully deleted." - } + "error_modal": { + "title": "Ups!", + "description": "You did not fill in the data for your volunteer profile. Fill it out in order to be able to log volunteering hours.", + "action_btn_label": "Complete data" + } + }, + "activity_log": { + "title": "Log", + "add_title": "Add volunteer hours", + "rejection_reason": "Reason for rejection", + "other": "Another option", + "total": "Total", + "disclaimer": { + "approved": "Approved at {{date}}", + "pending": "Requires approval from the organization", + "rejected": "Rejected at {{date}}" }, - "tabs": { - "home": "Home", - "volunteer": "Voluntar", - "events": "Events", - "search": "Search", - "account_settings": "Account settings" - }, - "home": { - "greeting": "Hi, {{name}}!", - "paragraph": "Welcome to your VIC account, the place that connects NGOs and those who want to contribute to creating a better world.", - "no_ngo_title": "You didn't add any organizations yet", - "no_ngo_paragraph": "Discover the organizations registered in VIC and the events you want to dedicate your time to.", - "add_hours": "Add volunteer hours!", - "join_ngo": "Join an organization!", - "statistics": { - "events": { - "title": "{{number}} events", - "description": "this month" - }, - "hours": { - "title": "{{number}} updates", - "description": "in volunteer hours" - }, - "documents": { - "title": "{{number}} updates", - "description": "in documents" - }, - "organizations": { - "title": "{{number}} updates", - "description": "in organizations" - } - }, - "anouncements": { - "section": { - "header": "Latest news", - "see_all": "See all", - "empty_list": "No new ads!" - } - } + "form": { + "event": { + "label": "Event" + }, + "task": { + "label": "Task", + "required": "Choice of task is mandatory" + }, + "date": { + "label": "Date", + "required": "Date is mandatory" + }, + "hours": { + "label": "Number of hours", + "number": "The number must contain only digits", + "placeholder": "Add number of hours", + "required": "The number of hours is compulsory", + "min": "The number of hours must be greater than {{value}}", + "max": "The number of hours must be less than {{value}}", + "integer": "The number of hours must be whole" + }, + "mentions": { + "label": "Mentions", + "placeholder": "Add mention", + "min": "The mention can be a minimum of {{value}} characters", + "max": "The mention can have a maximum of {{value}} characters" + } }, - "access_code": { - "title": "Access code", - "description": "If you have an access code from your organization, enter it below to join automatically.", - "form": { - "code": { - "placeholder": "Enter code", - "required": "The access code is mandatory", - "invalid": "The code entered is invalid.", - "min": "The code can be a minimum of {{value}} characters", - "max": "The code can have a maximum of {{value}} characters" - } - }, - "modal": { - "success": { - "heading": "Congratulations!", - "paragraph": "The code entered is correct, and you have successfully joined the organization. To continue, you need to complete your volunteer profile.", - "primary_action_label": "Complete the volunteer profile", - "secondary_action_label": "Close" - } - } + "errors": { + "ACTIVITY_LOG_001": "No logging of hours", + "ACTIVITY_LOG_002": "The volunteer does not have a completed profile", + "ACTIVITY_LOG_004": "Cannot cancel approved or rejected requests", + "VOLUNTEER_001": "Volunteer does not exist", + "EVENT_001": "The event does not exist", + "ACTIVITY_TYPE_001": "Type of activity does not exist" }, - "documents": { - "contract_prefix": "Contract", - "description": "Manage your contracts in the sections below. Download old contracts or sign contracts sent by your organization.", - "sections": { - "pending": "Contract proposal", - "closed": "History of signed contracts" - }, - "contract_status": { - "active": "active", - "closed": "concluded", - "not_started": "Unbeaten" - }, - "contract": { - "title": "Contract {{contractNumber}}", - "paragraph": { - "PENDING_VOLUNTEER": "The contract has been generated and requires your approval. Download the template below and read the document carefully. Please print out a copy of it, which you can sign, scan and upload here.", - "PENDING_ADMIN": "You sent a document for signature. The contract has been generated and requires approval from the organization.", - "NOT_STARTED": "Not started", - "CLOSED": "Closed", - "ACTIVE": "Active", - "REJECTED": "Rejected" - }, - "disclaimer": { - "PENDING_VOLUNTEER": "The contract needs your signature", - "PENDING_ADMIN": "The contract requires the signature of the organization" - }, - "actions": { - "upload": "Upload signed contract", - "cancel": "Cancel and upload another" - }, - "bottom_sheet": { - "heading": "Confirm document?", - "paragraph": "You have uploaded the document", - "label": "Send for signature" - }, - "upload": { - "success": "The contract has been sent!" - }, - "cancel": { - "success": "The contract has been returned to its original state!" - }, - "errors": { - "CONTRACT_002": "Contract not found", - "CONTRACT_001": "Could not upload the contract", - "CONTRACT_003": "Could not delete the document", - "CONTRACT_007": "Cannot cancel a contract approved by the admin", - "TEMPLATE_002": "Contract template not found!" - } - }, - "contract_rejected": { - "header": "Contract Rejected", - "paragraph": "Your contract has been rejected", - "label": "Reason for rejection" - }, - "confirmation_modal": { - "paragraph": "Are you sure you wish to cancel and upload a different contract?" - } + "confirmation_modal": { + "paragraph": " Are you sure you want to delete this log?" }, - "notifications": { - "header": "Notifications settings", - "from": { - "title": "Receive notifications from", - "options": { - "all_organizations": "All organizations", - "my_organizations": "My organizations" - } - }, - "by": { - "title": "Receive notifications via", - "options": { - "email": "Email", - "push": "Push Notifications" - } - }, - "disabled": "Notifications are disabled", - "errors": { - "NOTIFICATIONS_002": "Error changing settings!" - }, - "warning_modal": { - "description": "Notifications are currently disabled for this app. To receive important updates and alerts, please enable notifications in your phone's settings.", - "btn_label": "Open settings" - } + "toast": { + "success": "The log was successfully deleted." + } + }, + "tabs": { + "home": "Home", + "volunteer": "Voluntar", + "events": "Events", + "search": "Search", + "account_settings": "Account settings" + }, + "home": { + "greeting": "Hi, {{name}}!", + "paragraph": "Welcome to your VIC account, the place that connects NGOs and those who want to contribute to creating a better world.", + "no_ngo_title": "You didn't add any organizations yet", + "no_ngo_paragraph": "Discover the organizations registered in VIC and the events you want to dedicate your time to.", + "add_hours": "Add volunteer hours!", + "join_ngo": "Join an organization!", + "statistics": { + "events": { + "title": "{{number}} events", + "description": "this month" + }, + "hours": { + "title": "{{number}} updates", + "description": "in volunteer hours" + }, + "documents": { + "title": "{{number}} updates", + "description": "in documents" + }, + "organizations": { + "title": "{{number}} updates", + "description": "in organizations" + } }, - "user": { - "errors": { - "USER_001": "User not found", - "USER_004": "Identification number already exists", - "USER_003": "Email or phone are already used", - "USER_006": "Error saving profile photo!" - } + "anouncements": { + "section": { + "header": "Latest news", + "see_all": "See all", + "empty_list": "No new ads!" + } + } + }, + "access_code": { + "title": "Access code", + "description": "If you have an access code from your organization, enter it below to join automatically.", + "form": { + "code": { + "placeholder": "Enter code", + "required": "The access code is mandatory", + "invalid": "The code entered is invalid.", + "min": "The code can be a minimum of {{value}} characters", + "max": "The code can have a maximum of {{value}} characters" + } }, - "news": { - "header": { - "logs": "Updates in Volunteering Hours", - "documents": "Update in Documents", - "organizations": "Update in Organizations" - }, - "item": { - "logs": { - "approved": "Registered volunteer hours approved", - "rejected": "Registered volunteer hours were rejected" - }, - "documents": { - "new": "generated your volunteer contract. Download and sign.", - "approved_start": "Your contract with", - "approved_end": "has been approved and signed.", - "rejected_start": "Your contract with", - "rejected_end": "was rejected. See reason." - }, - "organization": { - "request": "Application to join the organization", - "approved": "has been approved", - "rejected": "was rejected" - } - } + "modal": { + "success": { + "heading": "Congratulations!", + "paragraph": "The code entered is correct, and you have successfully joined the organization. To continue, you need to complete your volunteer profile.", + "primary_action_label": "Complete the volunteer profile", + "secondary_action_label": "Close" + } + } + }, + "documents": { + "contract_prefix": "Contract", + "description": "Manage your contracts in the sections below. Download old contracts or sign contracts sent by your organization.", + "sections": { + "pending": "Contract proposal", + "closed": "History of signed contracts" + }, + "contract_status": { + "active": "active", + "closed": "concluded", + "not_started": "Unbeaten" + }, + "contract": { + "title": "Contract {{contractNumber}}", + "paragraph": { + "PENDING_VOLUNTEER": "The contract has been generated and requires your approval. Download the template below and read the document carefully. Please print out a copy of it, which you can sign, scan and upload here.", + "PENDING_ADMIN": "You sent a document for signature. The contract has been generated and requires approval from the organization.", + "NOT_STARTED": "Not started", + "CLOSED": "Closed", + "ACTIVE": "Active", + "REJECTED": "Rejected" + }, + "disclaimer": { + "PENDING_VOLUNTEER": "The contract needs your signature", + "PENDING_ADMIN": "The contract requires the signature of the organization" + }, + "actions": { + "upload": "Upload signed contract", + "cancel": "Cancel and upload another" + }, + "bottom_sheet": { + "heading": "Confirm document?", + "paragraph": "You have uploaded the document", + "label": "Send for signature" + }, + "upload": { + "success": "The contract has been sent!" + }, + "cancel": { + "success": "The contract has been returned to its original state!" + }, + "errors": { + "CONTRACT_002": "Contract not found", + "CONTRACT_001": "Could not upload the contract", + "CONTRACT_003": "Could not delete the document", + "CONTRACT_007": "Cannot cancel a contract approved by the admin", + "TEMPLATE_002": "Contract template not found!" + } + }, + "contract_rejected": { + "header": "Contract Rejected", + "paragraph": "Your contract has been rejected", + "label": "Reason for rejection" + }, + "confirmation_modal": { + "paragraph": "Are you sure you wish to cancel and upload a different contract?" + } + }, + "notifications": { + "header": "Notifications settings", + "from": { + "title": "Receive notifications from", + "options": { + "all_organizations": "All organizations", + "my_organizations": "My organizations" + } + }, + "by": { + "title": "Receive notifications via", + "options": { + "email": "Email", + "push": "Push Notifications" + } + }, + "disabled": "Notifications are disabled", + "errors": { + "NOTIFICATIONS_002": "Error changing settings!" + }, + "warning_modal": { + "description": "Notifications are currently disabled for this app. To receive important updates and alerts, please enable notifications in your phone's settings.", + "btn_label": "Open settings" + } + }, + "user": { + "errors": { + "USER_001": "User not found", + "USER_004": "Identification number already exists", + "USER_003": "Email or phone are already used", + "USER_006": "Error saving profile photo!", + "USER_008": "Error while updating user phone number!" + } + }, + "news": { + "header": { + "logs": "Updates in Volunteering Hours", + "documents": "Update in Documents", + "organizations": "Update in Organizations" }, - "delete_account": { - "title": "Confirm account deletion", - "header": "Are you sure you wish to permanently delete your account?", - "paragraph": "To delete your account on the VIC application, please confirm your decision below. Deleting your account will result in the permanent loss of your data and access to the application. If you are certain about this action, click the 'Confirm Deletion' button. Keep in mind that this process is irreversible, and you will need to create a new account if you wish to use VIC in the future.", - "confirm": "Confirm Deletion", - "error": "There was an error trying to delete your account. Please contact us at {{value}} to finalize the process." + "item": { + "logs": { + "approved": "Registered volunteer hours approved", + "rejected": "Registered volunteer hours were rejected" + }, + "documents": { + "new": "generated your volunteer contract. Download and sign.", + "approved_start": "Your contract with", + "approved_end": "has been approved and signed.", + "rejected_start": "Your contract with", + "rejected_end": "was rejected. See reason." + }, + "organization": { + "request": "Application to join the organization", + "approved": "has been approved", + "rejected": "was rejected" + } } + }, + "delete_account": { + "title": "Confirm account deletion", + "header": "Are you sure you wish to permanently delete your account?", + "paragraph": "To delete your account on the VIC application, please confirm your decision below. Deleting your account will result in the permanent loss of your data and access to the application. If you are certain about this action, click the 'Confirm Deletion' button. Keep in mind that this process is irreversible, and you will need to create a new account if you wish to use VIC in the future.", + "confirm": "Confirm Deletion", + "error": "There was an error trying to delete your account. Please contact us at {{value}} to finalize the process." + } } \ No newline at end of file diff --git a/mobile/src/assets/locales/ro/translation.json b/mobile/src/assets/locales/ro/translation.json index 0e884e606..3d5d17ed8 100644 --- a/mobile/src/assets/locales/ro/translation.json +++ b/mobile/src/assets/locales/ro/translation.json @@ -1,776 +1,783 @@ { - "general": { - "current_month": "Luna aceasta", - "about_vic": "Despre VIC", - "event": "Eveniment", - "news": "Ultimele noutăți", - "organizations": "Organizații", - "organization": "Organizație", - "active_volunteers": "voluntari activi", - "documents": "Documente", - "updates": "actualizări", - "edit": "Editează {{item}}", - "add": "Adaugă {{item}}", - "role": "Rol", - "department": "Departament", - "branch": "Filială", - "phone": "Telefon", - "join": "Alătură-te", - "select": "Selectează", - "sex": "Sex {{sex_type}}", - "male": "Bărbătesc", - "female": "Feminin", - "register": "Înregistrează-te", - "continue": "Continuă", - "save": "Salvează", - "send": "Trimite", - "delete": "Șterge", - "volunteers": "Voluntari", - "loading": "Se încarcă...", - "empty_list": "Nu există rezultate", - "error": { - "load_entries": "Eroare la încărcarea datelor", - "unknown": "A apărut o eroare necunoscută", - "generic_error": "Eroare de procesare a datelor, cod: #{{code}}" - }, - "back": "Înapoi" - }, - "landing": { - "message": "Înregistrează-te în aplicație folosind una dintre modalitățile următoare", - "registered": "Ai deja cont?", - "email": "E-mail sau telefon", - "login": "Autentifică-te", - "social": { - "facebook": "Facebook", - "apple": "Apple", - "google": "Google" - } + "general": { + "current_month": "Luna aceasta", + "about_vic": "Despre VIC", + "event": "Eveniment", + "news": "Ultimele noutăți", + "organizations": "Organizații", + "organization": "Organizație", + "active_volunteers": "voluntari activi", + "documents": "Documente", + "updates": "actualizări", + "edit": "Editează {{item}}", + "add": "Adaugă {{item}}", + "role": "Rol", + "department": "Departament", + "branch": "Filială", + "phone": "Telefon", + "join": "Alătură-te", + "select": "Selectează", + "sex": "Sex {{sex_type}}", + "male": "Bărbătesc", + "female": "Feminin", + "register": "Înregistrează-te", + "continue": "Continuă", + "save": "Salvează", + "send": "Trimite", + "delete": "Șterge", + "volunteers": "Voluntari", + "loading": "Se încarcă...", + "empty_list": "Nu există rezultate", + "error": { + "load_entries": "Eroare la încărcarea datelor", + "unknown": "A apărut o eroare necunoscută", + "generic_error": "Eroare de procesare a datelor, cod: #{{code}}" }, - "register": { - "title": "Creare cont", - "create_account": { - "heading": "Date cont", - "paragraph": "Completează câmpurile de mai jos pentru înregistrare", - "form": { - "email": { - "label": "E-mail", - "placeholder": "Introdu adresa de email", - "required": "Email-ul este obligatoriu", - "pattern": "Formatul email-ului nu este valid" - }, - "phone": { - "label": "Telefon", - "placeholder": "Introdu telefonul", - "length": "Numărul de telefon trebuie să aibă {{number}} caractere", - "required": "Telefonul este obligatoriu", - "pattern": "Numărul de telefon trebuie să conțină doar numere" - }, - "password": { - "label": "Parola", - "placeholder": "Introdu parola", - "required": "Parola este obligatorie", - "pattern": "Parola trebuie să conțină minim 8 caractere, litere mari, litere mici, numere și caractere speciale, fără spații" - }, - "confirm_password": { - "label": "Confirmă parola", - "placeholder": "Confirmați parola", - "required": "Parola este obligatorie", - "match": "Parolele trebuie să fie identice" - }, - "terms": { - "agree": "Sunt de acord cu ", - "conditions": "Termenii și Condițiile", - "and": "cât și cu ", - "privacy_policy": "Politica de Confidențialitate ", - "application": "a aplicației", - "required": "Trebuie să accepți Termenii, Condițiile și Politica de Confidențialitate pentru a putea merge mai departe" - } - }, - "secondary_action": { - "label": "Ai deja cont?", - "link": "Autentifică-te" - } - }, - "validate_account": { - "heading": "Verificare cod primit prin email", - "paragraph": "Completează câmpurile de mai jos pentru înregistrare.", - "form": { - "code": { - "label": "Introdu codul primit prin email", - "placeholder": "Introdu codul primit prin email", - "required": "Codul este obligatoriu", - "length": "Codul trebuie să aibă o lungime de 6 caractere", - "pattern": "Codul trebuie să conțină doar cifre" - } - } - }, - "create_user": { - "heading": "Date utilizator", - "paragraph": "Completează câmpurile de mai jos pentru finalizarea înregistrării.", - "form": { - "first_name": { - "label": "Prenume", - "placeholder": "Introdu prenumele", - "required": "Prenumele este obligatoriu", - "min": "Prenumele poate să aibă minim {{value}} caractere", - "max": "Prenumele poate să aibă maxim {{value}} caractere" - }, - "last_name": { - "label": "Nume", - "placeholder": "Introdu numele de familie", - "required": "Numele de familie este obligatoriu", - "min": "Numele poate să aibă minim {{value}} caractere", - "max": "Numele poate să aibă maxim {{value}} caractere" - }, - "county": { - "label": "Județ" - }, - "city": { - "label": "Oraș" - }, - "birthday": { - "label": "Data nașterii" - } - } + "back": "Înapoi" + }, + "landing": { + "message": "Înregistrează-te în aplicație folosind una dintre modalitățile următoare", + "registered": "Ai deja cont?", + "email": "E-mail sau telefon", + "login": "Autentifică-te", + "social": { + "facebook": "Facebook", + "apple": "Apple", + "google": "Google" + } + }, + "register": { + "title": "Creare cont", + "create_account": { + "heading": "Date cont", + "paragraph": "Completează câmpurile de mai jos pentru înregistrare", + "form": { + "email": { + "label": "E-mail", + "placeholder": "Introdu adresa de email", + "required": "Email-ul este obligatoriu", + "pattern": "Formatul email-ului nu este valid" + }, + "phone": { + "label": "Telefon", + "placeholder": "Introdu telefonul", + "length": "Numărul de telefon trebuie să aibă {{number}} caractere", + "required": "Telefonul este obligatoriu", + "pattern": "Numărul de telefon trebuie să conțină doar numere" + }, + "password": { + "label": "Parola", + "placeholder": "Introdu parola", + "required": "Parola este obligatorie", + "pattern": "Parola trebuie să conțină minim 8 caractere, litere mari, litere mici, numere și caractere speciale, fără spații" + }, + "confirm_password": { + "label": "Confirmă parola", + "placeholder": "Confirmați parola", + "required": "Parola este obligatorie", + "match": "Parolele trebuie să fie identice" + }, + "terms": { + "agree": "Sunt de acord cu ", + "conditions": "Termenii și Condițiile", + "and": "cât și cu ", + "privacy_policy": "Politica de Confidențialitate ", + "application": "a aplicației", + "required": "Trebuie să accepți Termenii, Condițiile și Politica de Confidențialitate pentru a putea merge mai departe" } + }, + "secondary_action": { + "label": "Ai deja cont?", + "link": "Autentifică-te" + } }, - "auth": { - "errors": { - "unauthorized": "Numele de utilizator sau parola sunt greșite", - "username_exists": "Există deja un utilizator cu această adresă de email", - "signup": "Eroare la înregistrare. Verifică datele de înregistrare și încearcă din nou.", - "resend_code": "Eroare la trimiterea codului de confirmare", - "init_profile": "Eroare la încărcarea profilului", - "login": "Eroare la autentificare, vă rugăm încercați din nou", - "invalid_password": "Parola nu este conformă cu politica de securitate", - "password": "Eroare la schimbarea parolei", - "code_mismatch": "Codul este invalid", - "forgot_password": "Eroare la resetarea parolei" + "validate_account": { + "heading": "Verificare cod primit prin email", + "paragraph": "Completează câmpurile de mai jos pentru înregistrare.", + "form": { + "code": { + "label": "Introdu codul primit prin email", + "placeholder": "Introdu codul primit prin email", + "required": "Codul este obligatoriu", + "length": "Codul trebuie să aibă o lungime de 6 caractere", + "pattern": "Codul trebuie să conțină doar cifre" } + } }, - "login": { - "title": "Autentificare", - "paragraph": "Introdu e-mailul și parola pentru a intra în cont.", - "submit": "Intra în cont", - "forgot_password": "Ai uitat parola? ", - "form": { - "email": { - "label": "E-mail", - "placeholder": "Introdu adresa de email", - "required": "Email-ul este obligatoriu", - "pattern": "Formatul email-ului nu este valid" - }, - "password": { - "label": "Parola", - "placeholder": "Introdu parola", - "required": "Parola este obligatorie" - } + "create_user": { + "heading": "Date utilizator", + "paragraph": "Completează câmpurile de mai jos pentru finalizarea înregistrării.", + "form": { + "first_name": { + "label": "Prenume", + "placeholder": "Introdu prenumele", + "required": "Prenumele este obligatoriu", + "min": "Prenumele poate să aibă minim {{value}} caractere", + "max": "Prenumele poate să aibă maxim {{value}} caractere" + }, + "last_name": { + "label": "Nume", + "placeholder": "Introdu numele de familie", + "required": "Numele de familie este obligatoriu", + "min": "Numele poate să aibă minim {{value}} caractere", + "max": "Numele poate să aibă maxim {{value}} caractere" + }, + "county": { + "label": "Județ" + }, + "city": { + "label": "Oraș" + }, + "birthday": { + "label": "Data nașterii" } + } + } + }, + "auth": { + "errors": { + "unauthorized": "Numele de utilizator sau parola sunt greșite", + "username_exists": "Există deja un utilizator cu această adresă de email", + "signup": "Eroare la înregistrare. Verifică datele de înregistrare și încearcă din nou.", + "resend_code": "Eroare la trimiterea codului de confirmare", + "init_profile": "Eroare la încărcarea profilului", + "login": "Eroare la autentificare, vă rugăm încercați din nou", + "invalid_password": "Parola nu este conformă cu politica de securitate", + "password": "Eroare la schimbarea parolei", + "code_mismatch": "Codul este invalid", + "forgot_password": "Eroare la resetarea parolei" + } + }, + "login": { + "title": "Autentificare", + "paragraph": "Introdu e-mailul și parola pentru a intra în cont.", + "submit": "Intra în cont", + "forgot_password": "Ai uitat parola? ", + "form": { + "email": { + "label": "E-mail", + "placeholder": "Introdu adresa de email", + "required": "Email-ul este obligatoriu", + "pattern": "Formatul email-ului nu este valid" + }, + "password": { + "label": "Parola", + "placeholder": "Introdu parola", + "required": "Parola este obligatorie" + } + } + }, + "forgot_password": { + "header": "Resetare parola", + "paragraph": "Te rugăm să introduci email-ul sau numărul de telefon al contului pentru a reseta parola.", + "form": { + "email": { + "label": "E-mail", + "required": "Email-ul este obligatoriu", + "pattern": "Formatul email-ului nu este valid" + } }, - "forgot_password": { - "header": "Resetare parola", - "paragraph": "Te rugăm să introduci email-ul sau numărul de telefon al contului pentru a reseta parola.", - "form": { - "email": { - "label": "E-mail", - "required": "Email-ul este obligatoriu", - "pattern": "Formatul email-ului nu este valid" - } - }, - "submit": { - "label": "Trimite cod resetare" - } + "submit": { + "label": "Trimite cod resetare" + } + }, + "confirm_password": { + "header": "Resetare parola", + "form": { + "code": { + "label": "Introdu codul primit prin email", + "placeholder": "Introdu codul primit prin email", + "required": "Codul este obligatoriu", + "length": "Codul trebuie să aibă o lungime de 6 caractere", + "pattern": "Codul trebuie să conțină doar cifre" + }, + "password": { + "label": "Parola", + "placeholder": "Introdu parola", + "required": "Parola este obligatorie", + "pattern": "Parola trebuie să conțină minim 8 caractere, litere mari, litere mici, numere și caractere speciale, fără spații" + }, + "confirm_password": { + "label": "Confirma parola", + "placeholder": "Confirmați parola", + "required": "Parola este obligatorie", + "match": "Parolele trebuie să fie identice" + } }, - "confirm_password": { - "header": "Resetare parola", - "form": { - "code": { - "label": "Introdu codul primit prin email", - "placeholder": "Introdu codul primit prin email", - "required": "Codul este obligatoriu", - "length": "Codul trebuie să aibă o lungime de 6 caractere", - "pattern": "Codul trebuie să conțină doar cifre" - }, - "password": { - "label": "Parola", - "placeholder": "Introdu parola", - "required": "Parola este obligatorie", - "pattern": "Parola trebuie să conțină minim 8 caractere, litere mari, litere mici, numere și caractere speciale, fără spații" - }, - "confirm_password": { - "label": "Confirma parola", - "placeholder": "Confirmați parola", - "required": "Parola este obligatorie", - "match": "Parolele trebuie să fie identice" - } - }, - "submit": { - "label": "Salvează modificările" - } + "submit": { + "label": "Salvează modificările" + } + }, + "settings": { + "title": "Setări cont", + "heading": "Date cont", + "identity": "Date identitate", + "password": "Schimbă parola", + "notification": "Setări notificări", + "information": "Informații", + "logout": "Log out", + "delete": "Șterge cont" + }, + "account_data": { + "title": "Date cont", + "profile_picture": "Poza profil", + "change_profile_picture": "Schimbă poza", + "submit": { + "success": "Datele au fost modificate!" }, - "settings": { - "title": "Setări cont", - "heading": "Date cont", - "identity": "Date identitate", - "password": "Schimbă parola", - "notification": "Setări notificări", - "information": "Informații", - "logout": "Log out", - "delete": "Șterge cont" - }, - "account_data": { - "title": "Date cont", - "profile_picture": "Poza profil", - "change_profile_picture": "Schimbă poza", - "submit": { - "success": "Datele au fost modificate!" - }, - "errors": { - "USER_006": "Eroare la modificarea fotografiei de profil" - } + "errors": { + "USER_006": "Eroare la modificarea fotografiei de profil" + } + }, + "identity_data": { + "title": "Date identitate", + "description": "Introdu datele din actul de identitate. Acestea vor fi folosite pentru generarea contractului de voluntariat.", + "privacy_policy": "Politica de Confidențialitate", + "form": { + "series": { + "label": "Serie document identitate (CI)", + "matches": "Seria trebuie să conțină doar litere", + "placeholder": "Introdu seria (GZ, RX...)", + "length": "Seria trebuie să aibă {{number}} caractere", + "required": "Seria este obligatorie" + }, + "number": { + "label": "Număr document identitate (CI)", + "placeholder": "Introdu numărul din 6 cifre", + "matches": "Numărul trebuie să conțină doar cifre", + "length": "Numărul trebuie să aibă {{number}} caractere", + "required": "Numărul este obligatoriu" + }, + "address": { + "label": "Domiciliat în", + "placeholder": "Introdu adresa", + "required": "Domiciliul este obligatoriu", + "helper": "Introdu adresa completa din buletin.", + "min": "Domiciliul poate să aibă minim {{value}} caractere", + "max": "Domiciliul poate să aibă maxim {{value}} caractere" + }, + "issue_date": { + "label": "Data emitere", + "required": "Data emiterii este obligatorie" + }, + "expiration_date": { + "label": "Data expirare", + "required": "Data expirării este obligatorie" + }, + "submit": { + "success": "Datele au fost modificate!" + } + } + }, + "change_password": { + "title": "Schimbă parola", + "submit": { + "success": "Parola a fost schimbata!" + } + }, + "organizations": { + "title": "Caută", + "search": { + "placeholder": "Denumirea organizației" }, - "identity_data": { - "title": "Date identitate", - "description": "Introdu datele din actul de identitate. Acestea vor fi folosite pentru generarea contractului de voluntariat.", - "privacy_policy": "Politica de Confidențialitate", - "form": { - "series": { - "label": "Serie document identitate (CI)", - "matches": "Seria trebuie să conțină doar litere", - "placeholder": "Introdu seria (GZ, RX...)", - "length": "Seria trebuie să aibă {{number}} caractere", - "required": "Seria este obligatorie" - }, - "number": { - "label": "Număr document identitate (CI)", - "placeholder": "Introdu numărul din 6 cifre", - "matches": "Numărul trebuie să conțină doar cifre", - "length": "Numărul trebuie să aibă {{number}} caractere", - "required": "Numărul este obligatoriu" - }, - "address": { - "label": "Domiciliat în", - "placeholder": "Introdu adresa", - "required": "Domiciliul este obligatoriu", - "helper": "Introdu adresa completa din buletin.", - "min": "Domiciliul poate să aibă minim {{value}} caractere", - "max": "Domiciliul poate să aibă maxim {{value}} caractere" - }, - "issue_date": { - "label": "Data emitere", - "required": "Data emiterii este obligatorie" - }, - "expiration_date": { - "label": "Data expirare", - "required": "Data expirării este obligatorie" - }, - "submit": { - "success": "Datele au fost modificate!" - } - } + "errors": { + "generic": "Eroare la încărcarea datelor" + } + }, + "organization_profile": { + "title": "Profil organizație", + "description": "Despre organizație", + "email": "Email de contact", + "phone": "Telefon", + "address": "Adresa sediu", + "area": "Arie de desfășurare a activității", + "events": "Evenimente deschise", + "volunteers": "{{number}} voluntari", + "join": "Alătură-te organizației", + "leave": "Părăsește organizația", + "rejoin": "Reintra în organizație", + "cancel_request": "Anulează cererea", + "no_events": "Nu sunt evenimente de afișat", + "code": "Ai cod de acces?", + "disclaimer": { + "access_request_pending": "Înscrierea ta așteaptă aprobare de la organizație", + "joined_from": "Te-ai alăturat din {{date}}", + "volunteer_archived": "Profilul tau de voluntar a fost dezactivat!", + "volunteer_blocked": "Accesul tau la organizație a fost restricționat" }, - "change_password": { - "title": "Schimbă parola", - "submit": { - "success": "Parola a fost schimbata!" - } + "modal": { + "identity_data_missing": { + "heading": "Ups!", + "paragraph": "Nu ai completat datele de identitate din Contul meu. Completează pentru a putea să te alături unei organizații.", + "action_label": "Completează datele" + }, + "confirm_cancel_request": { + "heading": "Anulezi cererea de înscriere?", + "paragraph": "Cererea de înscriere a fost trimisă către coordonatorii organizației. Ești sigur că vrei să retragi cererea?", + "action_label": "Anulează cererea" + } + } + }, + "join_ngo": { + "registration_form": "Formular de înscriere", + "complete": "Completează datele de mai jos pentru a te putea înscrie în organizație.", + "form": { + "referral": { + "label": "De unde ai aflat de noi?", + "required": "Acest câmp este obligatoriu", + "social": "Rețelele de socializare", + "vic": "Din aplicația VIC", + "friend": "De la un coleg sau prieten", + "event": "Dintr-un eveniment", + "other": "Altă opțiune" + }, + "motivation": { + "required": "Acest câmp este obligatoriu", + "label": "Ce te motivează să fii voluntar?", + "min": "Motivația poate să aibă minim {{value}} caractere", + "max": "Motivația poate să aibă maxim {{value}} caractere", + "helper": "Completează câmpul pentru a te înscrie." + } }, - "organizations": { - "title": "Caută", - "search": { - "placeholder": "Denumirea organizației" - }, - "errors": { - "generic": "Eroare la încărcarea datelor" - } + "errors": { + "ACCESS_CODE_001": "Codul de access este invalid", + "ACCESS_REQUEST_001": "Există deja un request de access pentru aceasta organizație", + "ORG_001": "Organizația nu a fost găsită", + "USER_001": "Utilizatorul nu a fost găsit", + "VOLUNTEER_002": "Utilizatorul este deja parte a organizației", + "USER_005": "Utilizatorul nu are datele de identificare completate" }, - "organization_profile": { - "title": "Profil organizație", - "description": "Despre organizație", - "email": "Email de contact", - "phone": "Telefon", - "address": "Adresa sediu", - "area": "Arie de desfășurare a activității", - "events": "Evenimente deschise", - "volunteers": "{{number}} voluntari", - "join": "Alătură-te organizației", - "leave": "Părăsește organizația", - "rejoin": "Reintra în organizație", - "cancel_request": "Anulează cererea", - "no_events": "Nu sunt evenimente de afișat", - "code": "Ai cod de acces?", - "disclaimer": { - "access_request_pending": "Înscrierea ta așteaptă aprobare de la organizație", - "joined_from": "Te-ai alăturat din {{date}}", - "volunteer_archived": "Profilul tau de voluntar a fost dezactivat!", - "volunteer_blocked": "Accesul tau la organizație a fost restricționat" - }, - "modal": { - "identity_data_missing": { - "heading": "Ups!", - "paragraph": "Nu ai completat datele de identitate din Contul meu. Completează pentru a putea să te alături unei organizații.", - "action_label": "Completează datele" - }, - "confirm_cancel_request": { - "heading": "Anulezi cererea de înscriere?", - "paragraph": "Cererea de înscriere a fost trimisă către coordonatorii organizației. Ești sigur că vrei să retragi cererea?", - "action_label": "Anulează cererea" - } - } + "modal": { + "success": { + "heading": "Felicitări!", + "paragraph": "Cererea de înscriere a fost trimisă către coordonatorii organizației. Vei primi o notificare îndată ce aceștia vor răspunde.", + "primary_action_label": "Caută alte organizații", + "secondary_action_label": "Închide" + } + } + }, + "access_request": { + "title": "Cerere de acces respinsă", + "paragraph": "Cererea ta de acces din data {{date}} a fost respinsă.", + "reason": "Motivul respingerii", + "errors": { + "ACCESS_REQUEST_002": "Request-ul nu a fost găsit" + } + }, + "leave_ngo": { + "header": "Părăsește organizația", + "paragraph": "Daca părăsești organizația, aceasta îți va șterge datele.", + "action_btn": "Părăsește organizația", + "modal": { + "confirm_leave_organization": { + "heading": "Ești sigur ca dorești să părăsești organizația?", + "paragraph": "Daca părăsești organizația, aceasta îți va șterge datele, inclusiv orele înregistrate și documentele de voluntar. Pentru mai multe detalii, poți contacta organizația.", + "action_label": "Părăsește organizația" + } + } + }, + "volunteer": { + "title": "Profil voluntar", + "no_org_added": "Nu ai adăugat încă nicio organizație", + "no_org_description": "", + "my_organizations": "Organizațiile mele", + "join_organization": "Alătură-te unei organizații", + "edit": "Editează profil voluntar", + "form": { + "email": { + "label": "Email de contact", + "required": "Email-ul este obligatoriu", + "pattern": "Formatul email-ului nu este valid" + }, + "phone": { + "label": "Telefon", + "info": "Nu poți modifica acest câmp." + }, + "active_since": { + "label": "Voluntar din", + "required": "Data este obligatorie" + } }, - "join_ngo": { - "registration_form": "Formular de înscriere", - "complete": "Completează datele de mai jos pentru a te putea înscrie în organizație.", - "form": { - "referral": { - "label": "De unde ai aflat de noi?", - "required": "Acest câmp este obligatoriu", - "social": "Rețelele de socializare", - "vic": "Din aplicația VIC", - "friend": "De la un coleg sau prieten", - "event": "Dintr-un eveniment", - "other": "Altă opțiune" - }, - "motivation": { - "required": "Acest câmp este obligatoriu", - "label": "Ce te motivează să fii voluntar?", - "min": "Motivația poate să aibă minim {{value}} caractere", - "max": "Motivația poate să aibă maxim {{value}} caractere", - "helper": "Completează câmpul pentru a te înscrie." - } - }, - "errors": { - "ACCESS_CODE_001": "Codul de access este invalid", - "ACCESS_REQUEST_001": "Există deja un request de access pentru aceasta organizație", - "ORG_001": "Organizația nu a fost găsită", - "USER_001": "Utilizatorul nu a fost găsit", - "VOLUNTEER_002": "Utilizatorul este deja parte a organizației", - "USER_005": "Utilizatorul nu are datele de identificare completate" - }, - "modal": { - "success": { - "heading": "Felicitări!", - "paragraph": "Cererea de înscriere a fost trimisă către coordonatorii organizației. Vei primi o notificare îndată ce aceștia vor răspunde.", - "primary_action_label": "Caută alte organizații", - "secondary_action_label": "Închide" - } + "details": "", + "menu_items": { + "organization_profile": { + "title": "Profil organizație" + }, + "activity_log": { + "title": "Ore de voluntariat", + "subtitle": { + "one": "{{number}} cerere așteaptă aprobare", + "many": "{{number}} cereri așteaptă aprobare" } + }, + "documents": { + "title": "Documente", + "subtitle": "{{number}} documente așteaptă răspuns" + }, + "volunteer_profile": { + "title": "Profil voluntar", + "subtitle": "Profil incomplet" + } + }, + "age": "{{years}} de ani", + "county": ", jud {{name}}", + "information": "Informații voluntar", + "email": "Email de contact", + "active_since": "Voluntar din", + "created_on": "Înregistrat în VIC din", + "errors": { + "VOLUNTEER_PROFILE_003": "Voluntarul nu are profil creat. Creează unul înainte!", + "VOLUNTEER_003": "Doar voluntarii activi pot fi arhivați", + "VOLUNTEER_004": "Doar voluntarii arhivați pot fi activați", + "VOLUNTEER_005": "Utilizatorul nu are profil de organizație pentru acest ONG" }, - "access_request": { - "title": "Cerere de acces respinsă", - "paragraph": "Cererea ta de acces din data {{date}} a fost respinsă.", - "reason": "Motivul respingerii", + "missing_profile": { + "heading": "Nu ai creat încă un profil de utilizator", + "paragraph": "", + "action_btn": "Creează profil" + } + }, + "create_volunteer": { + "heading": "Completează profil voluntar", + "paragraph": "Completează profilul tău de voluntar pentru a putea fi contactat și începe să raportezi orele de voluntariat!", + "form": { + "email": { + "label": "E-mail de contact", + "required": "Email-ul este obligatoriu", + "placeholder": "Introdu emailul", + "pattern": "Formatul email-ului nu este valid" + }, + "checkbox": { + "label": "Același ca email cont VIC" + }, + "branch": { + "label": "Filială sau sucursală" + }, + "active_since": { + "label": "Voluntar din" + }, + "submit": { "errors": { - "ACCESS_REQUEST_002": "Request-ul nu a fost găsit" + "VOLUNTEER_001": "Voluntarul nu a fost găsit!", + "VOLUNTEER_PROFILE_001": "Voluntarul are deja un profil!", + "ORGANIZATION_STRUCTURE_001": "Structura organizaționala nu există" } + } + } + }, + "events": { + "header": "Evenimente", + "search": { + "placeholder": "Caută" }, - "leave_ngo": { - "header": "Părăsește organizația", - "paragraph": "Daca părăsești organizația, aceasta îți va șterge datele.", - "action_btn": "Părăsește organizația", - "modal": { - "confirm_leave_organization": { - "heading": "Ești sigur ca dorești să părăsești organizația?", - "paragraph": "Daca părăsești organizația, aceasta îți va șterge datele, inclusiv orele înregistrate și documentele de voluntar. Pentru mai multe detalii, poți contacta organizația.", - "action_label": "Părăsește organizația" - } + "tabs": { + "going": "Particip", + "organizations": "Ale organizațiilor mele", + "open": "Deschise" + } + }, + "event": { + "join": { + "header": "Doresc să particip", + "form": { + "mention": { + "label": "Mențiune", + "required": "Mențiunea este obligatorie", + "min": "Mențiunea poate să aibă minim {{value}} caractere", + "max": "Mențiunea poate să aibă maxim {{value}} caractere", + "helper": "Completează câmpul pentru a te înscrie." } + } }, - "volunteer": { - "title": "Profil voluntar", - "no_org_added": "Nu ai adăugat încă nicio organizație", - "my_organizations": "Organizațiile mele", - "join_organization": "Alătură-te unei organizații", - "edit": "Editează profil voluntar", - "form": { - "email": { - "label": "Email de contact", - "required": "Email-ul este obligatoriu", - "pattern": "Formatul email-ului nu este valid" - }, - "phone": { - "label": "Telefon", - "info": "Nu poți modifica acest câmp." - }, - "active_since": { - "label": "Voluntar din", - "required": "Data este obligatorie" - } - }, - "menu_items": { - "organization_profile": { - "title": "Profil organizație" - }, - "activity_log": { - "title": "Ore de voluntariat", - "subtitle": "{{number}} ore așteaptă aprobare" - }, - "documents": { - "title": "Documente", - "subtitle": "{{number}} documente așteaptă răspuns" - }, - "volunteer_profile": { - "title": "Profil voluntar", - "subtitle": "Profil incomplet" - } - }, - "age": "{{years}} de ani", - "county": ", jud {{name}}", - "information": "Informații voluntar", - "email": "Email de contact", - "active_since": "Voluntar din", - "created_on": "Înregistrat în VIC din", - "errors": { - "VOLUNTEER_PROFILE_003": "Voluntarul nu are profil creat. Creează unul înainte!", - "VOLUNTEER_003": "Doar voluntarii activi pot fi arhivați", - "VOLUNTEER_004": "Doar voluntarii arhivați pot fi activați", - "VOLUNTEER_005": "Utilizatorul nu are profil de organizație pentru acest ONG" - }, - "missing_profile": { - "heading": "Nu ai creat încă un profil de utilizator", - "action_btn": "Creează profil" - } + "details": "Detalii eveniment", + "date": "Data și ora", + "name": "Denumire eveniment", + "target": "Target", + "location": "Locație", + "description": "Descriere eveniment", + "tasks": "Task-uri asociate", + "attending": "{{numberOfVolunteer}} persoane participă!", + "attending_of": "{{numberOfVolunteer}} de persoane participă!", + "attending_one": "O persoană participă!", + "attending_few": "", + "attending_other": "", + "type": { + "public": "Eveniment public", + "all_organization": "Toată organizația" }, - "create_volunteer": { - "heading": "Completează profil voluntar", - "paragraph": "Completează profilul tău de voluntar pentru a putea fi contactat și începe să raportezi orele de voluntariat!", - "form": { - "email": { - "label": "E-mail de contact", - "required": "Email-ul este obligatoriu", - "placeholder": "Introdu emailul", - "pattern": "Formatul email-ului nu este valid" - }, - "checkbox": { - "label": "Același ca email cont VIC" - }, - "branch": { - "label": "Filială sau sucursală" - }, - "active_since": { - "label": "Voluntar din" - }, - "submit": { - "errors": { - "VOLUNTEER_001": "Voluntarul nu a fost găsit!", - "VOLUNTEER_PROFILE_001": "Voluntarul are deja un profil!", - "ORGANIZATION_STRUCTURE_001": "Structura organizaționala nu există" - } - } - } + "errors": { + "EVENT_RSVP_001": "Evenimentul nu a fost găsit!", + "EVENT_RSVP_006": "Evenimentul nu este încă publicat", + "EVENT_RSVP_007": "Evenimentul este încheiat", + "EVENT_RSVP_003": "Profilul de voluntar nu este activ", + "EVENT_RSVP_005": "Te rugăm să completezi profilul de voluntar înainte da a te alătura evenimentului", + "EVENT_RSVP_002": "Trebuie să fii voluntar în organizație pentru a putea să participi la acest eveniment", + "EVENT_RSVP_004": "Pentru acest eveniment este obligatorie mențiunea" }, - "events": { - "header": "Evenimente", - "search": { - "placeholder": "Caută" - }, - "tabs": { - "going": "Particip", - "organizations": "Ale organizațiilor mele", - "open": "Deschise" - } + "rsvp": { + "going": "Particip", + "not_going": "Nu particip", + "cancel": "Retrage răspuns" }, - "event": { - "join": { - "header": "Doresc să particip", - "form": { - "mention": { - "label": "Mențiune", - "required": "Mențiunea este obligatorie", - "min": "Mențiunea poate să aibă minim {{value}} caractere", - "max": "Mențiunea poate să aibă maxim {{value}} caractere", - "helper": "Completează câmpul pentru a te înscrie." - } - } - }, - "details": "Detalii eveniment", - "date": "Data și ora", - "name": "Denumire eveniment", - "target": "Target", - "location": "Locație", - "description": "Descriere eveniment", - "tasks": "Task-uri asociate", - "attending": "{{numberOfVolunteer}} persoane participă!", - "attending_of": "{{numberOfVolunteer}} de persoane participă!", - "attending_one": "O persoană participă!", - "attending_few": "", - "attending_other": "", - "type": { - "public": "Eveniment public", - "all_organization": "Toată organizația" - }, - "errors": { - "EVENT_RSVP_001": "Evenimentul nu a fost găsit!", - "EVENT_RSVP_006": "Evenimentul nu este încă publicat", - "EVENT_RSVP_007": "Evenimentul este încheiat", - "EVENT_RSVP_003": "Profilul de voluntar nu este activ", - "EVENT_RSVP_005": "Te rugăm să completezi profilul de voluntar înainte da a te alătura evenimentului", - "EVENT_RSVP_002": "Trebuie să fii voluntar în organizație pentru a putea să participi la acest eveniment", - "EVENT_RSVP_004": "Pentru acest eveniment este obligatorie mențiunea" - }, - "rsvp": { - "going": "Particip", - "not_going": "Nu particip", - "cancel": "Retrage răspuns" - }, - "error_modal": { - "title": "Ups!", - "description": "Încă nu ți-ai completat profilul de voluntar. Adaugă datele pentru a putea participa la eveniment.", - "action_btn_label": "Completează datele" - } + "error_modal": { + "title": "Ups!", + "description": "Încă nu ți-ai completat profilul de voluntar. Adaugă datele pentru a putea participa la eveniment.", + "action_btn_label": "Completează datele" + } + }, + "activity_logs": { + "title": "Ore de voluntariat", + "tabs": { + "pending": "În așteptare", + "approved": "Aprobate", + "rejected": "Refuzate" }, - "activity_logs": { - "title": "Ore de voluntariat", - "tabs": { - "pending": "În așteptare", - "approved": "Aprobate", - "rejected": "Refuzate" - }, - "search": { - "placeholder": "Caută" - }, - "error_modal": { - "title": "Ups!", - "description": "Încă nu ți-ai completat profilul de voluntar. Adaugă datele pentru a putea adăuga ore de voluntariat.", - "action_btn_label": "Completează datele" - } + "search": { + "placeholder": "Caută" }, - "activity_log": { - "title": "Log", - "add_title": "Adaugă ore de voluntariat", - "rejection_reason": "Motiv respingere", - "other": "Altă opțiune", - "total": "Total", - "disclaimer": { - "approved": "Aprobată la {{date}}", - "pending": "Necesită aprobare din partea organizației", - "rejected": "Respins la {{date}}" - }, - "form": { - "event": { - "label": "Eveniment" - }, - "task": { - "label": "Task", - "required": "Alegerea task-ului este obligatorie" - }, - "date": { - "label": "Data", - "required": "Data este obligatorie" - }, - "hours": { - "label": "Număr de ore", - "number": "Numărul trebuie să conțină doar cifre", - "placeholder": "Adaugă numărul de ore", - "required": "Numărul de ore este obligatoriu", - "min": "Numărul de ore trebuie să fie mai mare ca {{value}}", - "max": "Numărul de ore trebuie să fie mai mic ca {{value}}", - "integer": "Numărul de ore trebuie să fie întreg" - }, - "mentions": { - "label": "Mențiuni", - "placeholder": "Adaugă mențiune", - "min": "Mențiunea poate să aibă minim {{value}} caractere", - "max": "Mențiunea poate să aibă maxim {{value}} caractere" - } - }, - "errors": { - "ACTIVITY_LOG_001": "Nu există înregistrarea de logare ore", - "ACTIVITY_LOG_002": "Voluntarul nu are profilul completat", - "ACTIVITY_LOG_004": "Nu se pot anula request-uri aprobate sau respinse", - "VOLUNTEER_001": "Voluntarul nu există", - "EVENT_001": "Evenimentul nu există", - "ACTIVITY_TYPE_001": "Tipul activității nu există" - }, - "confirmation_modal": { - "paragraph": " Ești sigur că vrei să ștergi această înregistrare?" - }, - "toast": { - "success": "Înregistrarea a fost ștearsă cu success." - } + "error_modal": { + "title": "Ups!", + "description": "Încă nu ți-ai completat profilul de voluntar. Adaugă datele pentru a putea adăuga ore de voluntariat.", + "action_btn_label": "Completează datele" + } + }, + "activity_log": { + "title": "Log", + "add_title": "Adaugă ore de voluntariat", + "rejection_reason": "Motiv respingere", + "other": "Altă opțiune", + "total": "Total", + "disclaimer": { + "approved": "Aprobată la {{date}}", + "pending": "Necesită aprobare din partea organizației", + "rejected": "Respins la {{date}}" }, - "tabs": { - "home": "Acasă", - "volunteer": "Voluntar", - "events": "Evenimente", - "search": "Caută", - "account_settings": "Setări cont" - }, - "home": { - "greeting": "Salut, {{name}}!", - "paragraph": "Bun venit în contul tău VIC, locul care face legătura dintre ONG-uri și cei care vor să contribuie la crearea unei lumi mai bune.", - "no_ngo_title": "Nu ai adăugat încă nicio organizație", - "no_ngo_paragraph": "Descoperă organizațiile înscrise în VIC și activitățile de voluntariat cărora vrei să le dedici timpul tău.", - "add_hours": "Adaugă ore de voluntariat!", - "join_ngo": "Alătură-te unei organizații!", - "statistics": { - "events": { - "title": "{{number}} evenimente", - "description": "luna asta" - }, - "hours": { - "title": "{{number}} actualizări", - "description": "în ore voluntariat" - }, - "documents": { - "title": "{{number}} actualizări", - "description": "în documente" - }, - "organizations": { - "title": "{{number}} actualizări", - "description": "în organizații" - } - }, - "anouncements": { - "section": { - "header": "Ultimele noutăți", - "see_all": "Vezi toate", - "empty_list": "Nu aveți anunțuri noi!" - } - } + "form": { + "event": { + "label": "Eveniment" + }, + "task": { + "label": "Task", + "required": "Alegerea task-ului este obligatorie" + }, + "date": { + "label": "Data", + "required": "Data este obligatorie" + }, + "hours": { + "label": "Număr de ore", + "number": "Numărul trebuie să conțină doar cifre", + "placeholder": "Adaugă numărul de ore", + "required": "Numărul de ore este obligatoriu", + "min": "Numărul de ore trebuie să fie mai mare ca {{value}}", + "max": "Numărul de ore trebuie să fie mai mic ca {{value}}", + "integer": "Numărul de ore trebuie să fie întreg" + }, + "mentions": { + "label": "Mențiuni", + "placeholder": "Adaugă mențiune", + "min": "Mențiunea poate să aibă minim {{value}} caractere", + "max": "Mențiunea poate să aibă maxim {{value}} caractere" + } }, - "access_code": { - "title": "Cod de acces", - "description": "Dacă ai un cod de acces de la organizație, introdu-l mai jos pentru a te alătura automat.", - "form": { - "code": { - "placeholder": "Introdu cod", - "required": "Codul de acces este obligatoriu", - "invalid": "Codul introdus nu este valid.", - "min": "Codul poate să aibă minim {{value}} caractere", - "max": "Codul poate să aibă maxim {{value}} caractere" - } - }, - "modal": { - "success": { - "heading": "Felicitări!", - "paragraph": "Codul introdus este corect, și te-ai alăturat cu succes organizației. Pentru a continua, trebuie să completezi profilul tău de voluntar.", - "primary_action_label": "Completează profilul de voluntar", - "secondary_action_label": "Închide" - } - } + "errors": { + "ACTIVITY_LOG_001": "Nu există înregistrarea de logare ore", + "ACTIVITY_LOG_002": "Voluntarul nu are profilul completat", + "ACTIVITY_LOG_004": "Nu se pot anula request-uri aprobate sau respinse", + "VOLUNTEER_001": "Voluntarul nu există", + "EVENT_001": "Evenimentul nu există", + "ACTIVITY_TYPE_001": "Tipul activității nu există" }, - "documents": { - "contract_prefix": "Contract", - "description": "Gestionează contractele tale din secțiunile de mai jos. Descarcă contracte vechi, sau semnează contractele trimise de organizație.", - "sections": { - "pending": "Propunere contract", - "closed": "Istoric contracte semnate" - }, - "contract_status": { - "active": "activ", - "closed": "încheiat", - "not_started": "neînceput" - }, - "contract": { - "title": "Contract {{contractNumber}}", - "paragraph": { - "PENDING_VOLUNTEER": "Contractul a fost generat și necesită aprobarea ta. Descarcă modelul de mai jos și citește documentul cu atenție. Te rugăm să printezi o copie a acestuia, pe care să o semnezi, scanezi și încarci aici.", - "PENDING_ADMIN": "Ai trimis un document spre semnare. Contractul a fost generat și necesită aprobarea organizației.", - "NOT_STARTED": "Neînceput", - "CLOSED": "Închis", - "ACTIVE": "Activ", - "REJECTED": "Respins" - }, - "disclaimer": { - "PENDING_VOLUNTEER": "Contractul necesită semnătura ta", - "PENDING_ADMIN": "Contractul necesită semnătura organizației" - }, - "actions": { - "upload": "Încarcă contract semnat", - "cancel": "Anulează și încarcă altul" - }, - "bottom_sheet": { - "heading": "Confirmi documentul?", - "paragraph": "Ai încărcat documentul", - "label": "Trimite spre semnare" - }, - "upload": { - "success": "Contractul a fost trimis!" - }, - "cancel": { - "success": "Contractul a fost întors la starea inițială!" - }, - "errors": { - "CONTRACT_002": "Contractul nu a fost găsit", - "CONTRACT_001": "Nu s-a putut încărca contractul", - "CONTRACT_003": "Nu s-a putut șterge documentul", - "CONTRACT_007": "Nu se poate anula un contract aprobat de admin", - "TEMPLATE_002": "Template-ul contractului nu a fost găsit!" - } - }, - "contract_rejected": { - "header": "Contract Respins", - "paragraph": "Contractul tău a fost respins", - "label": "Motivul respingerii" - }, - "confirmation_modal": { - "paragraph": "Ești sigur că vrei să anulezi și să încarci un contract diferit?" - } + "confirmation_modal": { + "paragraph": " Ești sigur că vrei să ștergi această înregistrare?" }, - "notifications": { - "header": "Setări notificări", - "from": { - "title": "Primește notificări de la", - "options": { - "all_organizations": "Toate organizațiile", - "my_organizations": "Organizațiile mele" - } - }, - "by": { - "title": "Primește notificări prin", - "options": { - "email": "Email", - "push": "Push Notifications" - } - }, - "disabled": "Notificările sunt dezactivate", - "errors": { - "NOTIFICATIONS_002": "Eroare la modificarea setărilor!" - }, - "warning_modal": { - "description": "Notificările sunt dezactivate pentru această aplicație. Pentru a primi actualizări și alerte importante, te rugăm să le activezi din setările telefonului.", - "btn_label": "Deschide setările" - } + "toast": { + "success": "Înregistrarea a fost ștearsă cu success." + } + }, + "tabs": { + "home": "Acasă", + "volunteer": "Voluntar", + "events": "Evenimente", + "search": "Caută", + "account_settings": "Setări cont" + }, + "home": { + "greeting": "Salut, {{name}}!", + "paragraph": "Bun venit în contul tău VIC, locul care face legătura dintre ONG-uri și cei care vor să contribuie la crearea unei lumi mai bune.", + "no_ngo_title": "Nu ai adăugat încă nicio organizație", + "no_ngo_paragraph": "Descoperă organizațiile înscrise în VIC și activitățile de voluntariat cărora vrei să le dedici timpul tău.", + "add_hours": "Adaugă ore de voluntariat!", + "join_ngo": "Alătură-te unei organizații!", + "statistics": { + "events": { + "title": "{{number}} evenimente", + "description": "luna asta" + }, + "hours": { + "title": "{{number}} actualizări", + "description": "în ore voluntariat" + }, + "documents": { + "title": "{{number}} actualizări", + "description": "în documente" + }, + "organizations": { + "title": "{{number}} actualizări", + "description": "în organizații" + } }, - "user": { - "errors": { - "USER_001": "Utilizatorul nu a fost găsit", - "USER_004": "Numărul de identificare există deja", - "USER_003": "Emailul sau telefonul sunt deja utilizate", - "USER_006": "Eroare la salvarea fotografiei de profil!" - } + "anouncements": { + "section": { + "header": "Ultimele noutăți", + "see_all": "Vezi toate", + "empty_list": "Nu aveți anunțuri noi!" + } + } + }, + "access_code": { + "title": "Cod de acces", + "description": "Dacă ai un cod de acces de la organizație, introdu-l mai jos pentru a te alătura automat.", + "form": { + "code": { + "placeholder": "Introdu cod", + "required": "Codul de acces este obligatoriu", + "invalid": "Codul introdus nu este valid.", + "min": "Codul poate să aibă minim {{value}} caractere", + "max": "Codul poate să aibă maxim {{value}} caractere" + } }, - "news": { - "header": { - "logs": "Actualizări în Ore de voluntariat", - "documents": "Actualizați în Documente", - "organizations": "Actualizați în Organizații" - }, - "item": { - "logs": { - "approved": "Orele de voluntariat înregistrate au fost aprobate", - "rejected": "Orele de voluntariat înregistrate au fost respinse" - }, - "documents": { - "new": "ți-a generat contractul de voluntariat. Descarcă și semnează.", - "approved_start": "Contractul tău cu", - "approved_end": "a fost aprobat și semnat.", - "rejected_start": "Contractul tău cu", - "rejected_end": "a fost respins. Vezi motiv." - }, - "organization": { - "request": "Cererea de înscriere în organizația", - "approved": "a fost aprobată", - "rejected": "a fost respinsă" - } - } + "modal": { + "success": { + "heading": "Felicitări!", + "paragraph": "Codul introdus este corect, și te-ai alăturat cu succes organizației. Pentru a continua, trebuie să completezi profilul tău de voluntar.", + "primary_action_label": "Completează profilul de voluntar", + "secondary_action_label": "Închide" + } + } + }, + "documents": { + "contract_prefix": "Contract", + "description": "Gestionează contractele tale din secțiunile de mai jos. Descarcă contracte vechi, sau semnează contractele trimise de organizație.", + "sections": { + "pending": "Propunere contract", + "closed": "Istoric contracte semnate" + }, + "contract_status": { + "active": "activ", + "closed": "încheiat", + "not_started": "neînceput" + }, + "contract": { + "title": "Contract {{contractNumber}}", + "paragraph": { + "PENDING_VOLUNTEER": "Contractul a fost generat și necesită aprobarea ta. Descarcă modelul de mai jos și citește documentul cu atenție. Te rugăm să printezi o copie a acestuia, pe care să o semnezi, scanezi și încarci aici.", + "PENDING_ADMIN": "Ai trimis un document spre semnare. Contractul a fost generat și necesită aprobarea organizației.", + "NOT_STARTED": "Neînceput", + "CLOSED": "Închis", + "ACTIVE": "Activ", + "REJECTED": "Respins" + }, + "disclaimer": { + "PENDING_VOLUNTEER": "Contractul necesită semnătura ta", + "PENDING_ADMIN": "Contractul necesită semnătura organizației" + }, + "actions": { + "upload": "Încarcă contract semnat", + "cancel": "Anulează și încarcă altul" + }, + "bottom_sheet": { + "heading": "Confirmi documentul?", + "paragraph": "Ai încărcat documentul", + "label": "Trimite spre semnare" + }, + "upload": { + "success": "Contractul a fost trimis!" + }, + "cancel": { + "success": "Contractul a fost întors la starea inițială!" + }, + "errors": { + "CONTRACT_002": "Contractul nu a fost găsit", + "CONTRACT_001": "Nu s-a putut încărca contractul", + "CONTRACT_003": "Nu s-a putut șterge documentul", + "CONTRACT_007": "Nu se poate anula un contract aprobat de admin", + "TEMPLATE_002": "Template-ul contractului nu a fost găsit!" + } + }, + "contract_rejected": { + "header": "Contract Respins", + "paragraph": "Contractul tău a fost respins", + "label": "Motivul respingerii" + }, + "confirmation_modal": { + "paragraph": "Ești sigur că vrei să anulezi și să încarci un contract diferit?" + } + }, + "notifications": { + "header": "Setări notificări", + "from": { + "title": "Primește notificări de la", + "options": { + "all_organizations": "Toate organizațiile", + "my_organizations": "Organizațiile mele" + } + }, + "by": { + "title": "Primește notificări prin", + "options": { + "email": "Email", + "push": "Push Notifications" + } + }, + "disabled": "Notificările sunt dezactivate", + "errors": { + "NOTIFICATIONS_002": "Eroare la modificarea setărilor!" + }, + "warning_modal": { + "description": "Notificările sunt dezactivate pentru această aplicație. Pentru a primi actualizări și alerte importante, te rugăm să le activezi din setările telefonului.", + "btn_label": "Deschide setările" + } + }, + "user": { + "errors": { + "USER_001": "Utilizatorul nu a fost găsit", + "USER_004": "Numărul de identificare există deja", + "USER_003": "Emailul sau telefonul sunt deja utilizate", + "USER_006": "Eroare la salvarea fotografiei de profil!", + "USER_008": "Eroare la modificarea numărului de telefon!" + } + }, + "news": { + "header": { + "logs": "Actualizări în Ore de voluntariat", + "documents": "Actualizați în Documente", + "organizations": "Actualizați în Organizații" }, - "delete_account": { - "title": "Confirma ștergerea contului", - "header": "Ești sigur că vrei să ștergi permanent contul?", - "paragraph": "Pentru a șterge contul tău în aplicația VIC, te rugăm să confirmi decizia mai jos. Ștergerea contului va duce la pierderea permanentă a datelor tale și a accesului la aplicație. Dacă ești sigur în privința acestei acțiuni, apasă butonul 'Confirmă Ștergerea'. Menționează că acest proces este ireversibil și va trebui să creezi un cont nou dacă dorești să utilizezi VIC în viitor.", - "confirm": "Confirmă Ștergerea", - "error": "A apărut o eroare la ștergerea contului. Contactează-ne la adresa de e-mail {{value}}, și te vom ajuta să finalizezi procesul." + "item": { + "logs": { + "approved": "Orele de voluntariat înregistrate au fost aprobate", + "rejected": "Orele de voluntariat înregistrate au fost respinse" + }, + "documents": { + "new": "ți-a generat contractul de voluntariat. Descarcă și semnează.", + "approved_start": "Contractul tău cu", + "approved_end": "a fost aprobat și semnat.", + "rejected_start": "Contractul tău cu", + "rejected_end": "a fost respins. Vezi motiv." + }, + "organization": { + "request": "Cererea de înscriere în organizația", + "approved": "a fost aprobată", + "rejected": "a fost respinsă" + } } + }, + "delete_account": { + "title": "Confirma ștergerea contului", + "header": "Ești sigur că vrei să ștergi permanent contul?", + "paragraph": "Pentru a șterge contul tău în aplicația VIC, te rugăm să confirmi decizia mai jos. Ștergerea contului va duce la pierderea permanentă a datelor tale și a accesului la aplicație. Dacă ești sigur în privința acestei acțiuni, apasă butonul 'Confirmă Ștergerea'. Menționează că acest proces este ireversibil și va trebui să creezi un cont nou dacă dorești să utilizezi VIC în viitor.", + "confirm": "Confirmă Ștergerea", + "error": "A apărut o eroare la ștergerea contului. Contactează-ne la adresa de e-mail {{value}}, și te vom ajuta să finalizezi procesul." + } } diff --git a/mobile/src/common/errors/entities/user.errors.ts b/mobile/src/common/errors/entities/user.errors.ts index 0dd9e29c4..d63e2e43c 100644 --- a/mobile/src/common/errors/entities/user.errors.ts +++ b/mobile/src/common/errors/entities/user.errors.ts @@ -6,6 +6,7 @@ export enum USER_ERRORS { USER_004 = 'USER_004', USER_003 = 'USER_003', USER_006 = 'USER_006', + USER_008 = 'USER_008', } export class UserErrors extends ErrorClass { @@ -17,6 +18,7 @@ export class UserErrors extends ErrorClass { [USER_ERRORS.USER_004]: i18n.t('user:errors.USER_004'), [USER_ERRORS.USER_003]: i18n.t('user:errors.USER_003'), [USER_ERRORS.USER_006]: i18n.t('user:errors.USER_006'), + [USER_ERRORS.USER_008]: i18n.t('user:errors.USER_008'), }); } diff --git a/mobile/src/screens/CreateUser.tsx b/mobile/src/screens/CreateUser.tsx index d2ebb805d..b83075a1c 100644 --- a/mobile/src/screens/CreateUser.tsx +++ b/mobile/src/screens/CreateUser.tsx @@ -103,7 +103,7 @@ const CreateUser = ({ navigation }: any) => { const newUser = { ...userPayload, locationId: cityId, - phone: user.attributes.phone_number || `${CONSTANTS.PHONE_PREFIX}${phone.trim()}`, + phone: `${CONSTANTS.PHONE_PREFIX}${phone.trim()}`, email: user.attributes.email, cognitoId: user.username, }; @@ -162,7 +162,7 @@ const CreateUser = ({ navigation }: any) => { label={t('create_account.form.phone.label')} placeholder={t('create_account.form.phone.placeholder')} error={errors.phone} - disabled={isLoading || !!initialPhoneNumber} + disabled={isLoading} keyboardType="phone-pad" accessoryLeft={renderPhoneNumberPrefix} required={true} diff --git a/mobile/src/screens/Volunteer.tsx b/mobile/src/screens/Volunteer.tsx index 6fe6eb65f..58f8fa68a 100644 --- a/mobile/src/screens/Volunteer.tsx +++ b/mobile/src/screens/Volunteer.tsx @@ -93,7 +93,7 @@ const Volunteer = ({ navigation }: any) => { icon={} onPress={onViewAtivityLogsButtonPress} loading={isLoadingStats} - subtitle={`${t('menu_items.activity_log.subtitle', { number: stats?.activityLogCount })}`} + subtitle={`${t(Number(stats?.activityLogCount) === 1 ? 'menu_items.activity_log.subtitle.one' : 'menu_items.activity_log.subtitle.many', { number: stats?.activityLogCount })}`} />