12de5a230a
- suggestion_service: fix scorer (stringList unmarshal accepts scalar|array; anchor scoring on base universal score so bool matches no longer tie); add localizeReasons for human-readable, Accept-Language-localized match reasons - lookup_i18n: localize lookup display names, home-profile options, document types/categories via internal/i18n - static_data_handler: per-locale seeded-data response (display_name, home profile options, document types/categories) with per-locale cache + ETag - settings_handler: invalidate per-locale seeded-data cache on lookup change instead of pre-warming a single non-localized blob - cache_service: per-locale seeded-data keys + ETag - DTOs: add DisplayName fields (task/residence/contractor) - translations: add suggestion.reason.* and lookup.* keys across all 10 langs - cmd/api: extract startup helpers + tests Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
248 lines
16 KiB
JSON
248 lines
16 KiB
JSON
{
|
|
"error.invalid_request_body": "유효하지 않은 요청 본문입니다",
|
|
"error.invalid_credentials": "유효하지 않은 인증 정보입니다",
|
|
"error.account_inactive": "계정이 비활성화되어 있습니다",
|
|
"error.username_taken": "이미 사용 중인 사용자 이름입니다",
|
|
"error.email_taken": "이미 등록된 이메일입니다",
|
|
"error.email_already_taken": "이미 사용 중인 이메일입니다",
|
|
"error.registration_failed": "회원가입에 실패했습니다",
|
|
"error.not_authenticated": "인증되지 않았습니다",
|
|
"error.invalid_token": "유효하지 않은 토큰입니다",
|
|
"error.failed_to_get_user": "사용자 정보를 가져오는데 실패했습니다",
|
|
"error.failed_to_update_profile": "프로필 업데이트에 실패했습니다",
|
|
"error.invalid_verification_code": "유효하지 않은 인증 코드입니다",
|
|
"error.verification_code_expired": "인증 코드가 만료되었습니다",
|
|
"error.email_already_verified": "이미 인증된 이메일입니다",
|
|
"error.verification_failed": "인증에 실패했습니다",
|
|
"error.failed_to_resend_verification": "인증 코드 재발송에 실패했습니다",
|
|
"error.rate_limit_exceeded": "비밀번호 재설정 요청이 너무 많습니다. 나중에 다시 시도해주세요.",
|
|
"error.too_many_attempts": "시도 횟수가 너무 많습니다. 새 코드를 요청해주세요.",
|
|
"error.invalid_reset_token": "유효하지 않거나 만료된 재설정 토큰입니다",
|
|
"error.password_reset_failed": "비밀번호 재설정에 실패했습니다",
|
|
"error.apple_signin_not_configured": "Apple 로그인이 설정되지 않았습니다",
|
|
"error.apple_signin_failed": "Apple 로그인에 실패했습니다",
|
|
"error.invalid_apple_token": "유효하지 않은 Apple 인증 토큰입니다",
|
|
"error.google_signin_not_configured": "Google 로그인이 설정되지 않았습니다",
|
|
"error.google_signin_failed": "Google 로그인에 실패했습니다",
|
|
"error.invalid_google_token": "유효하지 않은 Google 인증 토큰입니다",
|
|
"error.invalid_task_id": "유효하지 않은 작업 ID입니다",
|
|
"error.invalid_residence_id": "유효하지 않은 주거지 ID입니다",
|
|
"error.invalid_contractor_id": "유효하지 않은 계약업체 ID입니다",
|
|
"error.invalid_document_id": "유효하지 않은 문서 ID입니다",
|
|
"error.invalid_completion_id": "유효하지 않은 완료 ID입니다",
|
|
"error.invalid_user_id": "유효하지 않은 사용자 ID입니다",
|
|
"error.invalid_notification_id": "유효하지 않은 알림 ID입니다",
|
|
"error.invalid_device_id": "유효하지 않은 기기 ID입니다",
|
|
"error.task_not_found": "작업을 찾을 수 없습니다",
|
|
"error.residence_not_found": "주거지를 찾을 수 없습니다",
|
|
"error.contractor_not_found": "계약업체를 찾을 수 없습니다",
|
|
"error.document_not_found": "문서를 찾을 수 없습니다",
|
|
"error.completion_not_found": "작업 완료를 찾을 수 없습니다",
|
|
"error.user_not_found": "사용자를 찾을 수 없습니다",
|
|
"error.share_code_invalid": "유효하지 않은 공유 코드입니다",
|
|
"error.share_code_expired": "공유 코드가 만료되었습니다",
|
|
"error.task_access_denied": "이 작업에 접근할 권한이 없습니다",
|
|
"error.residence_access_denied": "이 주거지에 접근할 권한이 없습니다",
|
|
"error.contractor_access_denied": "이 계약업체에 접근할 권한이 없습니다",
|
|
"error.document_access_denied": "이 문서에 접근할 권한이 없습니다",
|
|
"error.not_residence_owner": "주거지 소유자만 이 작업을 수행할 수 있습니다",
|
|
"error.cannot_remove_owner": "주거지 소유자는 삭제할 수 없습니다",
|
|
"error.user_already_member": "이미 이 주거지의 멤버입니다",
|
|
"error.properties_limit_reached": "구독 플랜의 최대 주거지 수에 도달했습니다",
|
|
"error.task_already_cancelled": "이미 취소된 작업입니다",
|
|
"error.task_already_archived": "이미 보관된 작업입니다",
|
|
"error.failed_to_parse_form": "멀티파트 폼 파싱에 실패했습니다",
|
|
"error.task_id_required": "task_id가 필요합니다",
|
|
"error.invalid_task_id_value": "유효하지 않은 task_id 값입니다",
|
|
"error.failed_to_upload_image": "이미지 업로드에 실패했습니다",
|
|
"error.residence_id_required": "residence_id가 필요합니다",
|
|
"error.invalid_residence_id_value": "유효하지 않은 residence_id 값입니다",
|
|
"error.title_required": "제목이 필요합니다",
|
|
"error.failed_to_upload_file": "파일 업로드에 실패했습니다",
|
|
"message.logged_out": "로그아웃되었습니다",
|
|
"message.email_verified": "이메일이 인증되었습니다",
|
|
"message.verification_email_sent": "인증 이메일이 발송되었습니다",
|
|
"message.password_reset_email_sent": "해당 이메일로 등록된 계정이 있는 경우 비밀번호 재설정 코드가 발송되었습니다.",
|
|
"message.reset_code_verified": "코드가 인증되었습니다",
|
|
"message.password_reset_success": "비밀번호가 재설정되었습니다. 새 비밀번호로 로그인해주세요.",
|
|
"message.task_deleted": "작업이 삭제되었습니다",
|
|
"message.task_in_progress": "작업이 진행 중으로 표시되었습니다",
|
|
"message.task_cancelled": "작업이 취소되었습니다",
|
|
"message.task_uncancelled": "작업 취소가 해제되었습니다",
|
|
"message.task_archived": "작업이 보관되었습니다",
|
|
"message.task_unarchived": "작업 보관이 해제되었습니다",
|
|
"message.completion_deleted": "완료 기록이 삭제되었습니다",
|
|
"message.residence_deleted": "주거지가 삭제되었습니다",
|
|
"message.user_removed": "주거지에서 사용자가 제거되었습니다",
|
|
"message.tasks_report_generated": "작업 보고서가 생성되었습니다",
|
|
"message.tasks_report_sent": "작업 보고서가 생성되어 {{.Email}}로 발송되었습니다",
|
|
"message.tasks_report_email_failed": "작업 보고서가 생성되었지만 이메일 발송에 실패했습니다",
|
|
"message.contractor_deleted": "계약업체가 삭제되었습니다",
|
|
"message.document_deleted": "문서가 삭제되었습니다",
|
|
"message.document_activated": "문서가 활성화되었습니다",
|
|
"message.document_deactivated": "문서가 비활성화되었습니다",
|
|
"message.notification_marked_read": "알림이 읽음으로 표시되었습니다",
|
|
"message.all_notifications_marked_read": "모든 알림이 읽음으로 표시되었습니다",
|
|
"message.device_removed": "기기가 제거되었습니다",
|
|
"message.subscription_upgraded": "구독이 업그레이드되었습니다",
|
|
"message.subscription_cancelled": "구독이 취소되었습니다. 결제 기간이 종료될 때까지 Pro 혜택을 유지하실 수 있습니다.",
|
|
"message.subscription_restored": "구독이 복원되었습니다",
|
|
"message.file_deleted": "파일이 삭제되었습니다",
|
|
"message.static_data_refreshed": "정적 데이터가 새로고침되었습니다",
|
|
"error.notification_not_found": "알림을 찾을 수 없습니다",
|
|
"error.invalid_platform": "유효하지 않은 플랫폼입니다",
|
|
"error.upgrade_trigger_not_found": "업그레이드 트리거를 찾을 수 없습니다",
|
|
"error.receipt_data_required": "iOS의 경우 receipt_data가 필요합니다",
|
|
"error.purchase_token_required": "Android의 경우 purchase_token이 필요합니다",
|
|
"error.no_file_provided": "파일이 제공되지 않았습니다",
|
|
"error.failed_to_fetch_residence_types": "주거지 유형을 가져오는데 실패했습니다",
|
|
"error.failed_to_fetch_task_categories": "작업 카테고리를 가져오는데 실패했습니다",
|
|
"error.failed_to_fetch_task_priorities": "작업 우선순위를 가져오는데 실패했습니다",
|
|
"error.failed_to_fetch_task_frequencies": "작업 빈도를 가져오는데 실패했습니다",
|
|
"error.failed_to_fetch_task_statuses": "작업 상태를 가져오는데 실패했습니다",
|
|
"error.failed_to_fetch_contractor_specialties": "계약업체 전문 분야를 가져오는데 실패했습니다",
|
|
"push.task_due_soon.title": "작업 마감 임박",
|
|
"push.task_due_soon.body": "{{.TaskTitle}}의 마감일은 {{.DueDate}}입니다",
|
|
"push.task_overdue.title": "지연된 작업",
|
|
"push.task_overdue.body": "{{.TaskTitle}}이(가) 지연되었습니다",
|
|
"push.task_completed.title": "작업 완료",
|
|
"push.task_completed.body": "{{.UserName}}님이 {{.TaskTitle}}을(를) 완료했습니다",
|
|
"push.task_assigned.title": "새 작업 할당",
|
|
"push.task_assigned.body": "{{.TaskTitle}}이(가) 할당되었습니다",
|
|
"push.residence_shared.title": "주거지 공유",
|
|
"push.residence_shared.body": "{{.UserName}}님이 {{.ResidenceName}}을(를) 공유했습니다",
|
|
"email.welcome.subject": "honeyDue에 오신 것을 환영합니다!",
|
|
"email.verification.subject": "이메일 인증",
|
|
"email.password_reset.subject": "비밀번호 재설정 코드",
|
|
"email.tasks_report.subject": "{{.ResidenceName}} 작업 보고서",
|
|
"lookup.residence_type.house": "주택",
|
|
"lookup.residence_type.apartment": "아파트",
|
|
"lookup.residence_type.condo": "콘도",
|
|
"lookup.residence_type.townhouse": "타운하우스",
|
|
"lookup.residence_type.mobile_home": "이동식 주택",
|
|
"lookup.residence_type.other": "기타",
|
|
"lookup.task_category.plumbing": "배관",
|
|
"lookup.task_category.electrical": "전기",
|
|
"lookup.task_category.hvac": "냉난방",
|
|
"lookup.task_category.appliances": "가전",
|
|
"lookup.task_category.exterior": "외부",
|
|
"lookup.task_category.interior": "내부",
|
|
"lookup.task_category.landscaping": "조경",
|
|
"lookup.task_category.safety": "안전",
|
|
"lookup.task_category.cleaning": "청소",
|
|
"lookup.task_category.pest_control": "해충 방제",
|
|
"lookup.task_category.seasonal": "계절별",
|
|
"lookup.task_category.other": "기타",
|
|
"lookup.task_priority.low": "낮음",
|
|
"lookup.task_priority.medium": "보통",
|
|
"lookup.task_priority.high": "높음",
|
|
"lookup.task_priority.urgent": "긴급",
|
|
"lookup.task_status.pending": "대기 중",
|
|
"lookup.task_status.in_progress": "진행 중",
|
|
"lookup.task_status.completed": "완료",
|
|
"lookup.task_status.cancelled": "취소됨",
|
|
"lookup.task_status.archived": "보관됨",
|
|
"lookup.task_frequency.once": "한 번",
|
|
"lookup.task_frequency.daily": "매일",
|
|
"lookup.task_frequency.weekly": "매주",
|
|
"lookup.task_frequency.biweekly": "2주마다",
|
|
"lookup.task_frequency.monthly": "매월",
|
|
"lookup.task_frequency.quarterly": "분기별",
|
|
"lookup.task_frequency.semiannually": "6개월마다",
|
|
"lookup.task_frequency.annually": "매년",
|
|
"lookup.contractor_specialty.plumber": "배관공",
|
|
"lookup.contractor_specialty.electrician": "전기 기사",
|
|
"lookup.contractor_specialty.hvac_technician": "냉난방 기사",
|
|
"lookup.contractor_specialty.handyman": "수리공",
|
|
"lookup.contractor_specialty.landscaper": "조경사",
|
|
"lookup.contractor_specialty.roofer": "지붕 기술자",
|
|
"lookup.contractor_specialty.painter": "페인터",
|
|
"lookup.contractor_specialty.carpenter": "목수",
|
|
"lookup.contractor_specialty.pest_control": "해충 방제",
|
|
"lookup.contractor_specialty.cleaning": "청소",
|
|
"lookup.contractor_specialty.pool_service": "수영장 서비스",
|
|
"lookup.contractor_specialty.general_contractor": "종합 건설업자",
|
|
"lookup.contractor_specialty.other": "기타",
|
|
"suggestion.reason.has_pool": "집에 수영장이 있습니다",
|
|
"suggestion.reason.has_sprinkler_system": "집에 스프링클러 시스템이 있습니다",
|
|
"suggestion.reason.has_septic": "집에 정화조가 있습니다",
|
|
"suggestion.reason.has_fireplace": "집에 벽난로가 있습니다",
|
|
"suggestion.reason.has_garage": "집에 차고가 있습니다",
|
|
"suggestion.reason.has_basement": "집에 지하실이 있습니다",
|
|
"suggestion.reason.has_attic": "집에 다락방이 있습니다",
|
|
"suggestion.reason.heating_type": "난방 시스템과 일치합니다",
|
|
"suggestion.reason.cooling_type": "냉방 시스템과 일치합니다",
|
|
"suggestion.reason.water_heater_type": "온수기와 일치합니다",
|
|
"suggestion.reason.roof_type": "지붕과 일치합니다",
|
|
"suggestion.reason.exterior_type": "외장과 일치합니다",
|
|
"suggestion.reason.flooring_primary": "바닥재와 일치합니다",
|
|
"suggestion.reason.landscaping_type": "조경과 일치합니다",
|
|
"suggestion.reason.property_type": "주택 유형에 추천됩니다",
|
|
"suggestion.reason.climate_region": "거주 지역 기후에 추천됩니다",
|
|
"lookup.residence_type.duplex": "듀플렉스",
|
|
"lookup.residence_type.vacation_home": "별장",
|
|
"lookup.task_category.general": "일반",
|
|
"lookup.task_frequency.bi_weekly": "격주",
|
|
"lookup.task_frequency.semi_annually": "반기별",
|
|
"lookup.task_frequency.custom": "사용자 지정",
|
|
"lookup.contractor_specialty.appliance_repair": "가전 수리",
|
|
"lookup.contractor_specialty.cleaner": "청소부",
|
|
"lookup.contractor_specialty.locksmith": "열쇠공",
|
|
"lookup.home_profile.gas_furnace": "가스 난로",
|
|
"lookup.home_profile.electric_furnace": "전기 난로",
|
|
"lookup.home_profile.heat_pump": "열펌프",
|
|
"lookup.home_profile.boiler": "보일러",
|
|
"lookup.home_profile.radiant": "복사식",
|
|
"lookup.home_profile.other": "기타",
|
|
"lookup.home_profile.central_ac": "중앙 에어컨",
|
|
"lookup.home_profile.window_ac": "창문형 에어컨",
|
|
"lookup.home_profile.evaporative": "증발식",
|
|
"lookup.home_profile.none": "없음",
|
|
"lookup.home_profile.tank_gas": "탱크식(가스)",
|
|
"lookup.home_profile.tank_electric": "탱크식(전기)",
|
|
"lookup.home_profile.tankless_gas": "탱크리스(가스)",
|
|
"lookup.home_profile.tankless_electric": "탱크리스(전기)",
|
|
"lookup.home_profile.solar": "태양광",
|
|
"lookup.home_profile.asphalt_shingle": "아스팔트 슁글",
|
|
"lookup.home_profile.metal": "금속",
|
|
"lookup.home_profile.tile": "타일",
|
|
"lookup.home_profile.slate": "슬레이트",
|
|
"lookup.home_profile.wood_shake": "목재 셰이크",
|
|
"lookup.home_profile.flat": "평지붕",
|
|
"lookup.home_profile.brick": "벽돌",
|
|
"lookup.home_profile.vinyl_siding": "비닐 사이딩",
|
|
"lookup.home_profile.wood_siding": "목재 사이딩",
|
|
"lookup.home_profile.stucco": "스투코",
|
|
"lookup.home_profile.stone": "석재",
|
|
"lookup.home_profile.fiber_cement": "섬유 시멘트",
|
|
"lookup.home_profile.hardwood": "원목",
|
|
"lookup.home_profile.laminate": "라미네이트",
|
|
"lookup.home_profile.carpet": "카펫",
|
|
"lookup.home_profile.vinyl": "비닐",
|
|
"lookup.home_profile.concrete": "콘크리트",
|
|
"lookup.home_profile.lawn": "잔디",
|
|
"lookup.home_profile.desert": "사막",
|
|
"lookup.home_profile.xeriscape": "제리스케이프",
|
|
"lookup.home_profile.garden": "정원",
|
|
"lookup.home_profile.mixed": "혼합",
|
|
"lookup.document_type.warranty": "보증",
|
|
"lookup.document_type.manual": "사용 설명서",
|
|
"lookup.document_type.receipt": "영수증/송장",
|
|
"lookup.document_type.inspection": "점검 보고서",
|
|
"lookup.document_type.permit": "허가증",
|
|
"lookup.document_type.deed": "증서/권리증",
|
|
"lookup.document_type.insurance": "보험",
|
|
"lookup.document_type.contract": "계약",
|
|
"lookup.document_type.photo": "사진",
|
|
"lookup.document_type.other": "기타",
|
|
"lookup.document_category.appliance": "가전",
|
|
"lookup.document_category.hvac": "냉난방",
|
|
"lookup.document_category.plumbing": "배관",
|
|
"lookup.document_category.electrical": "전기",
|
|
"lookup.document_category.roofing": "지붕",
|
|
"lookup.document_category.structural": "구조",
|
|
"lookup.document_category.landscaping": "조경",
|
|
"lookup.document_category.general": "일반",
|
|
"lookup.document_category.other": "기타"
|
|
}
|