Files
apocapoc-api/internal/i18n/locales/en.json
T
david 5d92820591 Remove timezone from User model and pass as request parameter
Timezone is now sent from the client on each request that needs it,
instead of storing it in the database. This simplifies the model and
allows timezone to be dynamic (useful for traveling users).

Changes:
- Remove timezone field from User entity
- Remove timezone from user registration
- GET /habits/today now requires ?timezone= query param
- Add migration to drop timezone column from database
- Update related tests
2025-11-29 16:18:04 +01:00

112 lines
6.5 KiB
JSON

{
"errors": {
"invalid_request_body": "Invalid request body",
"email_already_registered": "Email already registered",
"registration_closed": "Registration is currently closed",
"failed_register_user": "Failed to register user",
"invalid_credentials": "Invalid email or password",
"email_not_verified": "Please verify your email before logging in",
"failed_login": "Failed to login",
"failed_generate_token": "Failed to generate token",
"failed_create_refresh_token": "Failed to create refresh token",
"failed_save_refresh_token": "Failed to save refresh token",
"invalid_expired_refresh_token": "Invalid or expired refresh token",
"failed_refresh_token": "Failed to refresh token",
"refresh_token_not_found": "Refresh token not found",
"invalid_refresh_token": "Invalid refresh token",
"user_not_authenticated": "User not authenticated",
"failed_get_user": "Failed to get user",
"failed_get_habits": "Failed to get habits",
"failed_create_habit": "Failed to create habit",
"habit_not_found": "Habit not found",
"access_denied": "Access denied",
"failed_get_habit": "Failed to get habit",
"invalid_input": "Invalid input",
"failed_update_habit": "Failed to update habit",
"failed_archive_habit": "Failed to archive habit",
"failed_get_habit_entries": "Failed to get habit entries",
"invalid_date_format": "Invalid date format (use YYYY-MM-DD)",
"invalid_page_parameter": "Invalid 'page' parameter",
"invalid_limit_parameter": "Invalid 'limit' parameter (must be 1-100)",
"pagination_required": "Pagination required: provide 'limit' parameter or use date range ≤ 1 year",
"invalid_from_date_format": "Invalid 'from' date format (use YYYY-MM-DD)",
"invalid_to_date_format": "Invalid 'to' date format (use YYYY-MM-DD)",
"habit_already_marked": "Habit already marked for this date",
"failed_mark_habit": "Failed to mark habit",
"habit_entry_not_found": "Habit entry not found",
"failed_unmark_habit": "Failed to unmark habit",
"invalid_expired_verification_token": "Invalid or expired verification token",
"email_already_verified": "Email already verified",
"failed_verify_email": "Failed to verify email",
"invalid_email": "Invalid email",
"user_not_found": "User not found",
"failed_send_verification_email": "Failed to send verification email",
"email_not_verified_reset": "Please verify your email before resetting password",
"failed_send_reset_email": "Failed to send reset email",
"invalid_token_or_password": "Invalid or expired token, or password requirements not met",
"failed_reset_password": "Failed to reset password",
"failed_delete_user": "Failed to delete user",
"failed_get_stats": "Failed to get statistics",
"timezone_required": "Timezone is required",
"invalid_timezone": "Invalid timezone (must be a valid IANA timezone)"
},
"success": {
"registration_with_verification": "Registration successful. Please check your email to verify your account.",
"registration_without_verification": "Registration successful. You can now login.",
"logged_out": "Successfully logged out",
"email_verified": "Email verified successfully",
"verification_email_sent": "Verification email sent successfully",
"password_reset_email_sent": "Password reset email sent successfully",
"password_reset": "Password reset successfully",
"user_deleted": "User and all associated data deleted successfully"
},
"validation": {
"email_required": "email is required",
"email_invalid_format": "email must be a valid email address",
"email_too_long": "email must not exceed 254 characters",
"password_required": "password is required",
"password_min_length": "password must be at least 8 characters long",
"password_max_length": "password must not exceed 128 characters",
"password_uppercase": "password must contain at least one uppercase letter",
"password_lowercase": "password must contain at least one lowercase letter",
"password_digit": "password must contain at least one digit",
"password_special_char": "password must contain at least one special character (!@#$%^&*)",
"timezone_required": "timezone is required",
"timezone_invalid": "timezone is not a valid IANA timezone",
"name_required": "name is required",
"name_too_long": "name must not exceed 255 characters",
"type_invalid": "type must be one of: BOOLEAN, COUNTER, VALUE",
"frequency_invalid": "frequency must be one of: DAILY, WEEKLY, MONTHLY",
"specific_days_required": "specific_days is required for WEEKLY frequency",
"specific_days_invalid": "specific_days must contain values between 0-6 (0=Sunday, 6=Saturday)",
"specific_dates_required": "specific_dates is required for MONTHLY frequency",
"specific_dates_invalid": "specific_dates must contain values between 1-31",
"target_value_required": "target_value is required for VALUE type",
"target_value_positive": "target_value must be positive"
},
"emails": {
"verify_email_subject": "Verify your email address",
"verify_email_title": "Welcome! Please verify your email",
"verify_email_body": "Thank you for registering. Please click the link below to verify your email address:",
"verify_email_link": "Verify Email",
"verify_email_expiry": "This link will expire in 24 hours.",
"verify_email_ignore": "If you didn't create an account, you can safely ignore this email.",
"resend_verification_subject": "Verify your email address",
"resend_verification_title": "Verify your email address",
"resend_verification_body": "Please click the link below to verify your email address:",
"resend_verification_link": "Verify Email",
"resend_verification_expiry": "This link will expire in 24 hours.",
"resend_verification_ignore": "If you didn't request this, you can safely ignore this email.",
"password_reset_subject": "Password Reset Request",
"password_reset_title": "Password Reset Request",
"password_reset_body": "You have requested to reset your password. Please click the link below:",
"password_reset_link": "Reset Password",
"password_reset_expiry": "This link will expire in 1 hour.",
"password_reset_ignore": "If you didn't request this, you can safely ignore this email.",
"welcome_subject": "Welcome to Apocapoc!",
"welcome_title": "Welcome to Apocapoc!",
"welcome_body": "Your email has been verified successfully. You can now start using all features of Apocapoc.",
"welcome_enjoy": "Enjoy building better habits!"
}
}