- MDI: additive tab layer over existing routing (MdiTabBar + mdiStore, sessionStorage, dedup, max 10, keyboard a11y, dark-theme tokens); route tree untouched - tenant p2: JWT tid claim with kintex fallback (backward compatible), EventAccessGuard cross-tenant 403 (EventTenantMapper + isolation tests), explicit tenant scoping on analytics/admin/sysuser aggregates; login threads app_user.tenant_id into tokens - i18n sweep 2: 17 core+admin screens extracted to 30 namespaces x 4 locales (ko/en/zh/ja), zero ko-render regression; P2/P3 sweep list documented - verified: tsc -b --force, vite build, compileJava, test (75/75) all EXIT 0 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1283 lines
50 KiB
JSON
1283 lines
50 KiB
JSON
{
|
||
"common": {
|
||
"brand": "KINTEX",
|
||
"appSuffix": "AI Exhibition Management",
|
||
"actions": {
|
||
"prev": "Back",
|
||
"next": "Next",
|
||
"cancel": "Cancel",
|
||
"close": "Close",
|
||
"home": "Go to Home",
|
||
"viewMore": "View Details",
|
||
"confirm": "Confirm"
|
||
},
|
||
"states": {
|
||
"loading": "Loading…",
|
||
"empty": "Nothing to display."
|
||
},
|
||
"aiWatermark": "AI-generated preview — actual construction may differ",
|
||
"aiNotice": "AI-generated images cannot be used for contracts or review documents — drawings are the construction standard",
|
||
"weekday": {
|
||
"0": "Sun",
|
||
"1": "Mon",
|
||
"2": "Tue",
|
||
"3": "Wed",
|
||
"4": "Thu",
|
||
"5": "Fri",
|
||
"6": "Sat"
|
||
}
|
||
},
|
||
"lang": {
|
||
"select": "Select language"
|
||
},
|
||
"shell": {
|
||
"nav": {
|
||
"events": "Events",
|
||
"exhibit": "Exhibitors",
|
||
"visit": "Visit",
|
||
"transport": "Directions"
|
||
},
|
||
"searchPlaceholder": "Search events",
|
||
"cta": {
|
||
"register": "Visitor Pre-registration"
|
||
},
|
||
"menuOpen": "Open menu",
|
||
"menuClose": "Close menu",
|
||
"homeAria": "{{brand}} home",
|
||
"primaryMenu": "Main menu",
|
||
"mobileMenu": "Mobile menu",
|
||
"footer": {
|
||
"brandDesc": "Korea's largest exhibition and convention center, connecting innovation in business and culture.",
|
||
"quickTitle": "Quick Links",
|
||
"quickSchedule": "Event Schedule",
|
||
"quickExhibit": "Exhibitor Info",
|
||
"quickDirections": "Directions",
|
||
"quickSitemap": "Sitemap",
|
||
"supportTitle": "Support",
|
||
"supportPrivacy": "Privacy Policy",
|
||
"supportTerms": "Terms of Use",
|
||
"supportContact": "Contact Us",
|
||
"contactTitle": "Contact",
|
||
"contactAddress": "217-60 Kintex-ro, Ilsanseo-gu, Goyang-si, Gyeonggi-do",
|
||
"contactTel": "Main line 1899-1001",
|
||
"contactEmail": "exhibition@kintex.com",
|
||
"bottom": "© KINTEX. All Rights Reserved. (10390) 217-60, Kintex-ro, Ilsanseo-gu, Goyang-si"
|
||
}
|
||
},
|
||
"home": {
|
||
"heroAria": "About KINTEX",
|
||
"eyebrow": "Global Exhibition Platform",
|
||
"heroTitleLine1": "Exhibitions that connect the world,",
|
||
"heroTitleEm": "KINTEX",
|
||
"heroLead": "Experience new innovation in business and culture unfolding at KINTEX, Korea's largest exhibition and convention center.",
|
||
"ctaRegister": "Visitor Pre-registration",
|
||
"ctaFacility": "View Facilities",
|
||
"eventsAria": "Ongoing and upcoming events",
|
||
"eventsTitle": "Ongoing · Upcoming Events",
|
||
"eventsSub": "Check out the latest happenings at KINTEX right now.",
|
||
"eventsMore": "View Full Schedule",
|
||
"loading": "Loading event information…",
|
||
"empty": "There are no ongoing or upcoming events at this time.",
|
||
"tagExhibition": "EXHIBITION",
|
||
"booth": "{{count}} booths",
|
||
"aiOptimized": "AI Optimized",
|
||
"ongoing": "Ongoing",
|
||
"ended": "Ended",
|
||
"dday": "D-{{n}}",
|
||
"ddayZero": "D-DAY",
|
||
"register": "Pre-register",
|
||
"hallTbd": "Hall to be assigned",
|
||
"transportAria": "Directions",
|
||
"transportTitle": "Directions",
|
||
"transportSub": "Reach KINTEX with even faster accessibility.",
|
||
"gtxTitle": "GTX-A KINTEX Station Now Open",
|
||
"gtxDesc": "A 3-minute walk from KINTEX Station",
|
||
"transit": "Public Transit",
|
||
"transitDesc": "Metropolitan buses and subway",
|
||
"parking": "Parking",
|
||
"parkingDesc": "4,000 vehicles simultaneously",
|
||
"shuttle": "Shuttle Bus",
|
||
"shuttleDesc": "Circulating major hubs",
|
||
"mapAria": "KINTEX location map",
|
||
"mapAddress": "217-60 Kintex-ro, Ilsanseo-gu, Goyang-si",
|
||
"mapPlace": "KINTEX Exhibition Center 1 & 2",
|
||
"mapViewAria": "View map"
|
||
},
|
||
"detail": {
|
||
"tabs": {
|
||
"intro": "Overview",
|
||
"program": "Program",
|
||
"speakers": "Speakers",
|
||
"exhibitors": "Exhibitors",
|
||
"transport": "Directions",
|
||
"faq": "FAQ"
|
||
},
|
||
"eyebrow": "KINTEX Exhibition",
|
||
"loadingTitle": "Loading event information…",
|
||
"fallbackTitle": "Event Details",
|
||
"dateTbd": "Dates to be confirmed",
|
||
"placeTbd": "Hall to be assigned",
|
||
"lead": "Check the exhibition details at KINTEX and pre-register.",
|
||
"factDate": "Date",
|
||
"factPlace": "Venue",
|
||
"ctaRegister": "Pre-register",
|
||
"ctaFloorplan": "View Floor Plan",
|
||
"navAria": "Event detail navigation",
|
||
"shareAria": "Share",
|
||
"share": "Share",
|
||
"copyLink": "Copy link",
|
||
"overviewAria": "Exhibition overview",
|
||
"overviewTitle": "Exhibition Overview",
|
||
"overviewLead": "Smart Factory Korea 2026 is the culmination of next-generation manufacturing technology. Discover the latest solutions combining AI, robotics, IoT, and digital twin technology in one place, with over 500 leading companies from around the world participating.",
|
||
"statBooth": "Booths",
|
||
"statVisitors": "Expected Visitors",
|
||
"statVisitorsValue": "30,000+",
|
||
"themesTitle": "Key Exhibition Themes",
|
||
"theme1Title": "AI & Autonomous Robots",
|
||
"theme1Desc": "Smart robot solutions that learn and decide on their own",
|
||
"theme2Title": "Digital Twin & IoT",
|
||
"theme2Desc": "Real-time sync between virtual worlds and real manufacturing sites",
|
||
"theme3Title": "Carbon-Neutral Smart Manufacturing",
|
||
"theme3Desc": "Eco-friendly processes maximizing energy efficiency",
|
||
"programAria": "Program schedule",
|
||
"programTitle": "Program Schedule",
|
||
"day1": "Sep 5 (Day 1)",
|
||
"day2": "Sep 6 (Day 2)",
|
||
"agenda1Title": "The Future of Manufacturing: AI-Driven Productivity Revolution",
|
||
"agenda1Desc": "2030 manufacturing strategies and real-world case studies proposed by global AI scholars",
|
||
"agenda1Room": "Main Conference Hall",
|
||
"agenda2Title": "Combining Industrial 5G and Edge Computing",
|
||
"agenda2Desc": "Real-time process control technology demonstration via lag-free data transmission",
|
||
"agenda2Room": "Seminar Room A",
|
||
"agenda3Title": "Global Buyers Matching Day",
|
||
"agenda3Desc": "One-on-one business meetings between promising overseas companies and domestic suppliers",
|
||
"agenda3Room": "Business Lounge",
|
||
"speakersTitle": "Keynote Speakers",
|
||
"speaker1Role": "AI Research Director | TechCorp",
|
||
"speaker2Role": "CTO | Automatech",
|
||
"speaker3Role": "Chair Professor of Robotics | Korea Univ.",
|
||
"speaker4Role": "Global VP | Digitron",
|
||
"profileAria": "{{name}} profile",
|
||
"faqAria": "Frequently asked questions",
|
||
"faqTitle": "Frequently Asked Questions",
|
||
"faq1Q": "How do I pre-register?",
|
||
"faq1A": "Click the \"Pre-register\" button at the top, choose your type, and enter your information to receive a mobile badge.",
|
||
"faq2Q": "Is there an entry fee?",
|
||
"faq2A": "General visitors are free with pre-registration. On-site registration may be charged.",
|
||
"faq3Q": "Is parking available?",
|
||
"faq3A": "Up to 4,000 vehicles can park simultaneously at KINTEX Exhibition Centers 1 and 2.",
|
||
"fabCta": "Go to Pre-registration"
|
||
},
|
||
"register": {
|
||
"steps": {
|
||
"type": "Type",
|
||
"info": "Info",
|
||
"interest": "Interests",
|
||
"done": "Done"
|
||
},
|
||
"stepsAria": "Pre-registration steps",
|
||
"type": {
|
||
"general": "General Visitor",
|
||
"generalDesc": "General visitors able to attend exhibitions and open sessions",
|
||
"buyer": "Buyer",
|
||
"buyerDesc": "Corporate representatives for B2B matching and business consultations",
|
||
"vip": "VIP",
|
||
"vipDesc": "Invited guests with exclusive lounge and full session access"
|
||
},
|
||
"step0Title": "Select Participant Type",
|
||
"step0Sub": "Please choose your eligibility to participate in the KINTEX exhibition.",
|
||
"typeGroupAria": "Participant type",
|
||
"step1Title": "Enter Basic Information",
|
||
"step1Sub": "Please enter your information for contact and badge issuance.",
|
||
"name": "Name",
|
||
"namePh": "Enter your name",
|
||
"phone": "Phone (Mobile)",
|
||
"email": "Email",
|
||
"emailPh": "example@domain.com",
|
||
"org": "Organization (Company/Institution)",
|
||
"orgPh": "Company or school name",
|
||
"step2Title": "Select Interests",
|
||
"step2Sub": "Select your interests and we'll provide tailored information.",
|
||
"interestsAria": "Interests",
|
||
"interest": {
|
||
"ai": "AI Solutions",
|
||
"factory": "Smart Factory",
|
||
"robotics": "Robotics",
|
||
"bigdata": "Big Data",
|
||
"cloud": "Cloud"
|
||
},
|
||
"consentPrivacy": "Consent to collection and use of personal information",
|
||
"required": "(required)",
|
||
"consentMarketing": "Consent to marketing communications (optional)",
|
||
"consentMore": "View details",
|
||
"errPrivacy": "Please check consent to collection and use of personal information (required).",
|
||
"errName": "Please enter your name.",
|
||
"errEvent": "Event information could not be verified.",
|
||
"doneTitle": "Your pre-registration has been received",
|
||
"doneSub": "{{name}}, your pre-registration is complete. Use your mobile badge at the entrance kiosk.",
|
||
"visitorDefault": "Visitor",
|
||
"badgeAria": "Mobile badge preview",
|
||
"badgeName": "John Doe",
|
||
"badgeCodeLabel": "Badge Code",
|
||
"doneNote": "Scan the QR at the entrance kiosk to print a physical badge.",
|
||
"regNo": "Registration No.: {{id}}",
|
||
"submitting": "Registering…",
|
||
"submit": "Register",
|
||
"eventBrowse": "Browse Events",
|
||
"floorplan": "View Floor Plan"
|
||
},
|
||
"floorplan": {
|
||
"sideAria": "Booth search and list",
|
||
"filtersTitle": "Industry · Zone · Keyword",
|
||
"searchPh": "Search exhibitor or booth number",
|
||
"searchAria": "Search booths",
|
||
"typeFilter": "Booth type filter",
|
||
"hallSelect": "Select hall",
|
||
"allHalls": "All halls",
|
||
"listAria": "Booth list (non-visual alternative)",
|
||
"loading": "Loading booth information…",
|
||
"searchResults": "Search results ({{count}})",
|
||
"noMatch": "No matching booths.",
|
||
"reservedBooth": "Reserved booth",
|
||
"availableBooth": "Available",
|
||
"type": {
|
||
"assembled": "Shell Scheme",
|
||
"independent": "Raw Space",
|
||
"corner": "Corner Booth",
|
||
"island": "Island",
|
||
"default": "Booth"
|
||
},
|
||
"stageAria": "Interactive hall map",
|
||
"boothLayoutAria": "Booth layout",
|
||
"boothAria": "Booth {{no}} {{name}}",
|
||
"loadFail": "Failed to load the floor plan.",
|
||
"noBooth": "No booths to display.",
|
||
"popInfoAria": "{{name}} information",
|
||
"popDetail": "Booth details",
|
||
"directions": "Directions",
|
||
"zoomIn": "Zoom in",
|
||
"zoomOut": "Zoom out",
|
||
"reset": "Reset",
|
||
"myLocation": "My location",
|
||
"legendAria": "Legend",
|
||
"legendAvailable": "Available",
|
||
"legendReserved": "Reserved",
|
||
"legendPublic": "Public"
|
||
},
|
||
"inquiry": {
|
||
"heroAria": "Exhibitor inquiry",
|
||
"heroTitle": "Exhibitor Inquiry",
|
||
"heroLead": "Expand your business to global markets with KINTEX. Our specialist consultants will propose the optimal exhibition space.",
|
||
"cta": "Exhibitor Inquiry",
|
||
"guideAria": "Exhibitor guide",
|
||
"guideTitle": "Exhibitor Guide",
|
||
"booth1Tier": "Entry Tier",
|
||
"booth1Title": "Shell Scheme",
|
||
"booth1Desc": "The most economical choice with basic walls and flooring provided. Recommended for small businesses.",
|
||
"booth1Price": "₩ 2,500,000 / unit",
|
||
"booth2Tier": "Design Freedom",
|
||
"booth2Title": "Raw Space",
|
||
"booth2Desc": "Only space is provided, allowing free design tailored to your brand.",
|
||
"booth2Price": "₩ 2,000,000 / unit",
|
||
"booth3Tier": "Full Solution",
|
||
"booth3Title": "Premium",
|
||
"booth3Desc": "An all-in-one solution including AI-optimized traffic flow design and a custom branding package.",
|
||
"booth3Price": "Inquire separately",
|
||
"boothExampleAria": "{{title}} example",
|
||
"formAria": "Contact us",
|
||
"formTitle": "Contact Us",
|
||
"formSub": "Leave any questions about participation or the exhibition. Our staff will reply within 24 business hours.",
|
||
"contactPhone": "Phone Inquiry",
|
||
"contactPhoneVal": "+82-31-810-8114",
|
||
"contactEmail": "Email Inquiry",
|
||
"contactEmailVal": "exhibit@kintex.com",
|
||
"contactLoc": "Location",
|
||
"contactLocVal": "217-60 Kintex-ro, Ilsanseo-gu, Goyang-si, Gyeonggi-do",
|
||
"loginHintQ": "Already have an account?",
|
||
"loginHintA": "Log in for a faster inquiry",
|
||
"company": "Company",
|
||
"companyPh": "Enter company name",
|
||
"name": "Contact Person",
|
||
"namePh": "Enter your name",
|
||
"contact": "Contact (Email or Phone)",
|
||
"contactPh": "Enter reachable contact information",
|
||
"scale": "Estimated Size",
|
||
"scaleSelect": "Please select",
|
||
"scale1": "1 booth (9sqm)",
|
||
"scale2": "2-4 booths (18-36sqm)",
|
||
"scale3": "5-9 booths (45-81sqm)",
|
||
"scale4": "10 or more",
|
||
"hall": "Preferred Hall",
|
||
"hallSelect": "Select hall",
|
||
"message": "Message",
|
||
"messagePh": "Let us know your participation goals or any special requests.",
|
||
"agree": "I agree to the collection and use of personal information.",
|
||
"required": "(required)",
|
||
"errAgree": "Please agree to the collection and use of personal information.",
|
||
"errName": "Please enter the contact person's name.",
|
||
"errContact": "Please enter a reachable email or phone number.",
|
||
"errMessage": "Please enter your message.",
|
||
"success": "Your inquiry has been received. Reference No. {{no}}",
|
||
"submitting": "Sending…",
|
||
"submit": "Send Inquiry"
|
||
},
|
||
"microsite": {
|
||
"introAria": "About {{brand}}",
|
||
"eyebrow": "KINTEX Exhibitor",
|
||
"ctaMeeting": "Book a Meeting",
|
||
"ctaBrochure": "Company Brochure",
|
||
"defaultBrand": "Hanbit Robotics Inc.",
|
||
"defaultTagline": "Intelligent robotics solutions that move the future",
|
||
"defaultBoothLoc": "Booth A-102 · Hall 7",
|
||
"boothUndetermined": "TBD",
|
||
"boothPrefix": "Booth",
|
||
"boothLocLabel": "KINTEX exhibition booth location",
|
||
"viewMap": "View Floor Plan",
|
||
"productsAria": "Core product lineup",
|
||
"productsTitle": "Core Product Lineup",
|
||
"productsSub": "Featured products you can meet on site.",
|
||
"product": "Product",
|
||
"product1Tag": "Industrial COBOT",
|
||
"product1Title": "HR-A1 Collaborative Robot",
|
||
"product1Desc": "An industrial collaborative robot with high precision and safety, designed with human collaboration as the top priority.",
|
||
"product2Tag": "Smart Logistics",
|
||
"product2Title": "HR-M3 Autonomous AMR",
|
||
"product2Desc": "An autonomous mobile robot maximizing smart factory logistics efficiency, with real-time obstacle avoidance and route optimization.",
|
||
"product3Tag": "AI Vision",
|
||
"product3Title": "HR-Q Vision Scanner",
|
||
"product3Desc": "Flawless quality inspection based on AI deep learning. Ultra-precise 3D scanning that catches even the tiniest defects.",
|
||
"productImgAria": "{{title}} image",
|
||
"previewAria": "Booth preview",
|
||
"previewTitle": "Booth Preview",
|
||
"previewSub": "AI-generated preview booth images. Actual construction results may differ.",
|
||
"galleryMain": "Main Exhibition Zone",
|
||
"galleryVip": "VIP Lounge",
|
||
"galleryAria": "{{label}} AI-generated preview image",
|
||
"watermark": "AI-generated preview image — actual construction results may differ",
|
||
"meetingAria": "Book a meeting",
|
||
"ctaBanner": "We propose customized robotics solutions tailored to your business.",
|
||
"ctaBannerBtn": "Book a Meeting Now"
|
||
},
|
||
"ticket": {
|
||
"viewPurchase": "Buy Tickets",
|
||
"viewManage": "Manage · Cancel",
|
||
"viewSwitchAria": "Switch ticket view",
|
||
"type": {
|
||
"general": "General",
|
||
"generalDesc": "General visitors and individual participants",
|
||
"generalPrice": "₩0 (pre-registration discount)",
|
||
"buyer": "Buyer",
|
||
"buyerDesc": "For industry professionals and buyers only",
|
||
"buyerPrice": "Free · Screening required",
|
||
"group": "Group (10+ tickets)",
|
||
"groupDesc": "For corporate group visits only",
|
||
"groupPrice": "₩9,000 / person",
|
||
"vip": "VIP",
|
||
"vipDesc": "Exhibition all-pass + VIP lounge access",
|
||
"vipPrice": "₩50,000"
|
||
},
|
||
"steps": {
|
||
"s1": "Event · Type",
|
||
"s2": "Buyer",
|
||
"s3": "Payment",
|
||
"s4": "Done"
|
||
},
|
||
"stepsAria": "Booking steps",
|
||
"bannerTitle": "Smart Factory Korea 2026",
|
||
"bannerDate": "2026.09.05 – 09.08",
|
||
"bannerPlace": "Exhibition Center 2, Hall 7",
|
||
"posterAria": "Event poster",
|
||
"loginBanner": "Log in to automatically save your booking history.",
|
||
"loginLink": "Log in",
|
||
"sample": "Sample data",
|
||
"h2Type": "Select Ticket Type",
|
||
"aiOptimized": "AI OPTIMIZED",
|
||
"off10": "10% OFF",
|
||
"soldout": "Sold Out",
|
||
"qtyAria": "{{name}} quantity",
|
||
"decrease": "Decrease",
|
||
"increase": "Increase",
|
||
"h2Booker": "Booker Information",
|
||
"bookerName": "Name",
|
||
"bookerNamePh": "Full name",
|
||
"bookerTel": "Phone",
|
||
"bookerEmail": "Email (ticket delivery)",
|
||
"consentPrivacy": "Consent to collection and use of personal information",
|
||
"required": "(required)",
|
||
"consentMarketing": "Consent to marketing communications (optional)",
|
||
"h2Pay": "Payment Method",
|
||
"payCard": "Credit Card",
|
||
"payEasy": "Easy Pay",
|
||
"payBank": "Bank Transfer",
|
||
"payGroupAria": "Payment method",
|
||
"pgNote": "Payment is processed on the PG provider's secure page, and card information is not stored on this site. All transactions are protected by 256-bit SSL encryption. (PG not integrated — demo flow)",
|
||
"doneTitle": "Your booking has been received",
|
||
"doneNo": "KTX-2026-0000-DEMO",
|
||
"doneSub": "We'll email you the ticket (upon live integration). Total {{count}} tickets · Payment {{total}}",
|
||
"sampleReady": "Sample data · Payment coming soon",
|
||
"walletBtn": "Open Mobile Ticket Wallet",
|
||
"manageBtn": "Manage / Cancel Booking",
|
||
"summaryAria": "Booking summary",
|
||
"summaryTitle": "Booking Summary",
|
||
"summaryCount": "Selected quantity",
|
||
"count": "{{n}} tickets",
|
||
"subtotal": "Subtotal",
|
||
"discount": "Discount",
|
||
"finalTotal": "Final payment amount",
|
||
"nextStep": "Continue to next step",
|
||
"freeDone": "Complete Free Booking",
|
||
"pay": "Pay",
|
||
"payProceed": "Proceed to Payment",
|
||
"customerCenter": "Customer center 1588-0000 (weekdays 09–18)",
|
||
"manageTitle": "Manage · Cancel Booking",
|
||
"manageSub": "You can look up and cancel non-member bookings.",
|
||
"lookNo": "Booking number",
|
||
"lookNoPh": "KTX-YYYY-XXXXXX",
|
||
"lookEmail": "Email",
|
||
"lookEmailPh": "example@email.com",
|
||
"lookBtn": "Look up",
|
||
"loginToView": "Log in to view my bookings",
|
||
"notLooked": "Enter your booking number and email to look up. (Sample: enter any value and look up)",
|
||
"booked": "Booking complete",
|
||
"bookNoLabel": "Booking No.",
|
||
"paidAt": "Paid at",
|
||
"colType": "Type",
|
||
"colQty": "Qty",
|
||
"colAmount": "Amount",
|
||
"bookerInfo": "Booker info",
|
||
"totalPaid": "Total paid",
|
||
"refundTitle": "Cancellation · Refund Policy",
|
||
"refundD7": "7 days before visit (D-7)",
|
||
"refundD7Val": "100% refund",
|
||
"refundD3": "3 days before visit (D-3)",
|
||
"refundD3Val": "50% refund",
|
||
"refundDay": "Day of visit",
|
||
"refundDayVal": "0% (non-refundable)",
|
||
"refundEst": "Current estimated refund",
|
||
"cancelBooking": "Cancel Booking",
|
||
"refundNote": "Refunds are processed to the original payment method via the PG provider.",
|
||
"aiHelper": "AI Settlement Assistant",
|
||
"aiHelperDesc": "For credit card installment payments, restoring your limit through the card company may take about 3–5 business days after cancellation.",
|
||
"cancelModalAria": "Confirm booking cancellation",
|
||
"cancelModalTitle": "Cancel this booking?",
|
||
"cancelModalDesc": "A 100% refund (₩40,000) applies based on D-15. Refunds are processed to the original payment method via the PG provider, with actual refunds upon live integration.",
|
||
"cancelConfirm": "Cancel"
|
||
},
|
||
"login": {
|
||
"title": "Log In",
|
||
"sub": "Welcome to the KINTEX Exhibition Management System.",
|
||
"email": "Email",
|
||
"emailPh": "name@company.com",
|
||
"password": "Password",
|
||
"remember": "Remember me",
|
||
"forgot": "Forgot password",
|
||
"errResponse": "We couldn't process the login response. Please try again.",
|
||
"errLocked": "Login attempts are temporarily restricted. Please try again shortly.",
|
||
"errNotImpl": "The login service is being prepared. Please try again shortly.",
|
||
"errGeneric": "An error occurred while logging in.",
|
||
"submitting": "Logging in…",
|
||
"submit": "Log In",
|
||
"signupPrompt": "Don't have an account yet?",
|
||
"signup": "Sign Up",
|
||
"or": "or",
|
||
"internalLogin": "Log in with KINTEX internal account",
|
||
"inviteLink": "Join with an invite code →",
|
||
"copyright": "© 2026 KINTEX. All rights reserved.",
|
||
"wsTitle": "Event Workspace",
|
||
"wsSub": "Select an event you are participating in.",
|
||
"wsEmptyTitle": "No events joined",
|
||
"wsEmptyDesc": "Check your invite link or join with an invite code.",
|
||
"wsInvite": "Join with an invite code"
|
||
},
|
||
"signup": {
|
||
"title": "Sign Up",
|
||
"desc": "Create a KINTEX AI Exhibition Management account. Company name and invite code are optional.",
|
||
"email": "Email",
|
||
"emailPh": "name@company.com",
|
||
"name": "Name",
|
||
"namePh": "John Doe",
|
||
"password": "Password",
|
||
"passwordPh": "8+ characters",
|
||
"password2": "Confirm Password",
|
||
"password2Ph": "Re-enter password",
|
||
"company": "Company (optional)",
|
||
"companyPh": "KINTEX Inc.",
|
||
"invite": "Invite Code (optional)",
|
||
"invitePh": "INV-XXXX",
|
||
"mismatch": "Passwords do not match.",
|
||
"errNotImpl": "The sign-up service is being prepared. Please try again shortly.",
|
||
"errConflict": "This email is already registered.",
|
||
"errGeneric": "An error occurred while signing up.",
|
||
"noticePending": "Your account has been created. You can log in after administrator approval.",
|
||
"noticeActive": "Your account has been created. Please log in now.",
|
||
"doneTitle": "Sign-up Complete",
|
||
"goLogin": "Go to Login",
|
||
"cancel": "Cancel",
|
||
"submitting": "Signing up…",
|
||
"submit": "Sign Up"
|
||
},
|
||
"forgot": {
|
||
"requestTitle": "Forgot Password",
|
||
"requestDesc": "We'll send a verification code to your registered email. If the account exists, an email will be sent.",
|
||
"email": "Email",
|
||
"emailPh": "name@company.com",
|
||
"sending": "Sending…",
|
||
"requestBtn": "Get Verification Code",
|
||
"resetTitle": "Reset Password",
|
||
"resetDesc": "Enter the verification code sent to <0>{{email}}</0> and your new password.",
|
||
"code": "Verification Code",
|
||
"codePh": "Code received by email",
|
||
"newpw": "New Password",
|
||
"newpwPh": "8+ characters",
|
||
"prev": "Back",
|
||
"changing": "Changing…",
|
||
"changeBtn": "Change Password",
|
||
"doneTitle": "Password Changed",
|
||
"doneDesc": "Please log in with your new password.",
|
||
"goLogin": "Go to Login",
|
||
"errInvalid": "The verification code is incorrect or has expired.",
|
||
"errNotImpl": "The password reset service is being prepared. Please try again shortly.",
|
||
"errRequest": "An error occurred during the request.",
|
||
"errReset": "An error occurred during the reset.",
|
||
"cancel": "Cancel"
|
||
},
|
||
"dashboard": {
|
||
"countdown": "Opening D-{{n}}",
|
||
"degradedTag": "Offline — Sample",
|
||
"degradedMsg": "Could not reach the aggregation API; showing demo sample data.",
|
||
"loadError": "Failed to load dashboard metrics.",
|
||
"timelineAria": "Milestone timeline",
|
||
"milestoneEmptyTitle": "No derived schedule",
|
||
"milestoneEmptyDesc": "Milestones appear once the event start date is confirmed.",
|
||
"mstate": {
|
||
"done": "Done",
|
||
"current": "In progress",
|
||
"upcoming": "Upcoming"
|
||
},
|
||
"kpisAria": "Key metrics",
|
||
"kpiEmpty": "No aggregated metrics",
|
||
"exhibitorStatus": "Exhibitor status",
|
||
"sampleTag": "Sample",
|
||
"exhibitorEmptyTitle": "No exhibitor booths",
|
||
"exhibitorEmptyDesc": "Booths appear here once layouts and designs are registered.",
|
||
"colBoothNo": "Booth No.",
|
||
"colCompany": "Company",
|
||
"colStatus": "Design status",
|
||
"feedAria": "Notification feed",
|
||
"feedTitle": "Notifications",
|
||
"feedEmpty": "No new notifications",
|
||
"aerialAria": "Hall aerial view",
|
||
"aerialTitle": "Hall aerial view",
|
||
"aerialShot": "S7 Hall aerial",
|
||
"aerialAlt": "Hall aerial preview image"
|
||
},
|
||
"schedule": {
|
||
"title": "Exhibition Schedule",
|
||
"subtitle": "KINTEX all-hall event scheduling & monitoring — {{n}} events",
|
||
"crawlFallback": "(kintex.com crawl fallback)",
|
||
"yearFilter": "Year filter",
|
||
"allYears": "All years",
|
||
"yearN": "{{y}}",
|
||
"hallFilter": "Hall filter",
|
||
"allHalls": "All halls (1-10)",
|
||
"hall1": "Hall 1 Center (Halls 1-5)",
|
||
"hall2": "Hall 2 Center (Halls 6-10)",
|
||
"catFilter": "Category filter",
|
||
"allCats": "All categories",
|
||
"statusFilter": "Status filter",
|
||
"allStatus": "All statuses",
|
||
"cat": {
|
||
"exhibition": "Exhibition",
|
||
"culture": "Culture & Arts",
|
||
"trade": "Trade & Industry",
|
||
"tech": "Technology"
|
||
},
|
||
"status": {
|
||
"ongoing": "Ongoing",
|
||
"upcoming": "Upcoming",
|
||
"ended": "Ended"
|
||
},
|
||
"catExhibit": "{{cat}} show",
|
||
"apiWait": "Awaiting event API (crawl data)",
|
||
"viewSwitch": "Switch view",
|
||
"viewList": "List",
|
||
"viewCalendar": "Calendar",
|
||
"listLoading": "Loading event list",
|
||
"listAria": "Event list",
|
||
"loadError": "Failed to load the exhibition schedule.",
|
||
"count": "{{n}} events",
|
||
"emptyTitle": "No registered events",
|
||
"emptyDesc": "Adjust filters or create a new event.",
|
||
"newEvent": "New event",
|
||
"period": "Period",
|
||
"assignedHall": "Assigned hall",
|
||
"estVisitors": "Est. visitors",
|
||
"editDetail": "Edit details",
|
||
"viewLogistics": "View move-in/logistics",
|
||
"monthCal": "Month calendar",
|
||
"prev": "Prev",
|
||
"next": "Next",
|
||
"today": "Today",
|
||
"yearMonth": "{{m}}/{{y}}",
|
||
"miniCal": "Mini calendar",
|
||
"prevMonth": "Previous month",
|
||
"nextMonth": "Next month",
|
||
"offlineSample": "Offline — Sample",
|
||
"day": "Day {{d}}",
|
||
"dayHasEvent": "Day {{d}} (has event)",
|
||
"hallUtil": "Hall utilization",
|
||
"hallUtilMonth": "Hall utilization ({{m}}/{{y}})"
|
||
},
|
||
"settlement": {
|
||
"title": "Settlement & Payment",
|
||
"subtitle": "Manage exhibitor billing & collection status",
|
||
"generate": "Generate invoices",
|
||
"generating": "Generating…",
|
||
"noEventTitle": "Please select an event",
|
||
"noEventDesc": "No event has been designated for settlement.",
|
||
"genDone": "Invoices generated — {{created}} new, {{skipped}} kept.",
|
||
"genError": "Failed to generate invoices. Check permissions or target data.",
|
||
"dashError": "Failed to load settlement aggregation.",
|
||
"kpisAria": "Settlement key metrics",
|
||
"kpiBilled": "Total billed",
|
||
"kpiCollected": "Collected",
|
||
"kpiOutstanding": "Outstanding",
|
||
"kpiOverdue": "Overdue invoices",
|
||
"count": "{{n}}",
|
||
"collectionRate": "Collection rate {{rate}}%",
|
||
"outstandingSub": "Outstanding balance",
|
||
"overdueSub": "Past due date",
|
||
"distTitle": "Billing status distribution",
|
||
"distEmpty": "No aggregated billing",
|
||
"listTitle": "Invoice list",
|
||
"invoices": "Invoices",
|
||
"statusFilter": "Status filter",
|
||
"status": {
|
||
"all": "All",
|
||
"pending": "Unissued",
|
||
"invoiced": "Invoiced",
|
||
"paid": "Paid",
|
||
"overdue": "Overdue"
|
||
},
|
||
"listError": "Failed to load the invoice list.",
|
||
"emptyTitle": "No invoices",
|
||
"emptyManage": "Use Generate invoices above to aggregate billing per exhibitor.",
|
||
"emptyView": "No invoices have been issued yet.",
|
||
"colNo": "Invoice No.",
|
||
"colExhibitor": "Exhibitor",
|
||
"colBilled": "Billed",
|
||
"colPaid": "Paid",
|
||
"colOutstanding": "Outstanding",
|
||
"colDue": "Due date",
|
||
"colStatus": "Status",
|
||
"detail": "Details",
|
||
"prev": "Prev",
|
||
"next": "Next",
|
||
"pageInfo": "{{page}} / {{total}} · {{cnt}} total",
|
||
"modalAria": "Invoice details",
|
||
"invoice": "Invoice",
|
||
"close": "Close",
|
||
"detailError": "Failed to load invoice details.",
|
||
"liItem": "Item",
|
||
"liQty": "Qty",
|
||
"liUnit": "Unit price",
|
||
"liAmount": "Amount",
|
||
"noLines": "No line items",
|
||
"supplyAmount": "Supply amount",
|
||
"vat": "VAT (10%)",
|
||
"grandTotal": "Total billed",
|
||
"paidOutstanding": "Paid / Outstanding",
|
||
"payHistory": "Payment history",
|
||
"noPayments": "No payment records.",
|
||
"won": "KRW {{v}}",
|
||
"issue": "Issue invoice",
|
||
"issuing": "Issuing…",
|
||
"payAmount": "Payment amount",
|
||
"payAmountPh": "Payment amount (KRW)",
|
||
"payMethod": "Payment method",
|
||
"methodTransfer": "Bank transfer",
|
||
"methodCard": "Card",
|
||
"methodOther": "Other",
|
||
"memo": "Memo",
|
||
"memoPh": "Memo (optional)",
|
||
"recordPay": "Record payment",
|
||
"recording": "Recording…",
|
||
"payFail": "Failed to record payment. Check the amount (within total) and permissions.",
|
||
"errPositive": "Please enter an amount greater than 0.",
|
||
"errExceed": "Cannot exceed the outstanding balance.",
|
||
"pgNote": "Actual payment is delegated to an external PG. This screen is for recording payment confirmation only.",
|
||
"managerOnly": "Only organizers/hall managers can record or issue payments."
|
||
},
|
||
"hallassign": {
|
||
"title": "Hall Assignment · Auto Quote",
|
||
"subtitle": "Hall×period assignment status and instant rate-ruleset quotes (M1).",
|
||
"start": "From",
|
||
"end": "To",
|
||
"newAssign": "New assignment",
|
||
"board": "Assignment board",
|
||
"boardHint": "Overlapping assignments are shown as conflicts.",
|
||
"forbiddenTitle": "Hall manager board only",
|
||
"forbiddenDesc": "Only KINTEX hall manager accounts can view assignment status. Use the auto quote below.",
|
||
"noHalls": "No hall master data.",
|
||
"noAssign": "No assignment",
|
||
"release": "Release assignment",
|
||
"releaseConfirm": "Release the {{hall}} assignment for {{event}}?",
|
||
"assignedToast": "Hall assigned.",
|
||
"releasedToast": "Assignment released.",
|
||
"releaseFail": "Release failed (check permissions).",
|
||
"conflictErr": "The hall/period overlaps with another event.",
|
||
"assignFail": "Assignment failed.",
|
||
"pickEventHall": "Select an event and a hall.",
|
||
"modalTitle": "Hall assignment",
|
||
"close": "Close",
|
||
"event": "Event",
|
||
"pickEvent": "Select event…",
|
||
"hall": "Hall",
|
||
"pickHall": "Select hall…",
|
||
"occupyStart": "Occupancy start",
|
||
"occupyEnd": "Occupancy end",
|
||
"primary": "Primary hall",
|
||
"note": "Note",
|
||
"optional": "Optional",
|
||
"cancel": "Cancel",
|
||
"assign": "Assign",
|
||
"assigning": "Assigning…",
|
||
"autoQuote": "Auto quote",
|
||
"quoteHint": "Based on rate ruleset · final amount confirmed by KINTEX",
|
||
"startDate": "Start date",
|
||
"endDate": "End date",
|
||
"boothSize": "Booth size (optional)",
|
||
"countPh": "Count",
|
||
"calcQuote": "Calculate quote",
|
||
"calculating": "Calculating…",
|
||
"quoteFail": "Quote calculation failed.",
|
||
"quoteReq": "Enter hall, start and end dates.",
|
||
"qItem": "Item",
|
||
"qBasis": "Basis",
|
||
"qAmount": "Amount",
|
||
"rentalSubtotal": "Rental subtotal",
|
||
"rentalTotal": "Rental total ({{days}} days)",
|
||
"deposit": "Management deposit (separate)",
|
||
"ruleset": "(ruleset {{v}})"
|
||
},
|
||
"analytics": {
|
||
"title": "Business Analytics",
|
||
"subtitle": "KINTEX operating profitability · exhibitor insights",
|
||
"perspective": "Analysis perspective",
|
||
"operator": "Operator",
|
||
"exhibitor": "Exhibitor",
|
||
"periodAria": "Analysis period",
|
||
"periodEvent": "This event",
|
||
"periodD90": "Last 90 days",
|
||
"periodAnnual": "Annual",
|
||
"exportPdf": "Export PDF",
|
||
"exportExcel": "Export Excel",
|
||
"noEventTitle": "Please select an event",
|
||
"noEventDesc": "No event has been designated for analysis.",
|
||
"offlineSample": "Offline — Sample",
|
||
"degradedMsg": "Could not reach the aggregation API; showing demo sample data.",
|
||
"loadError": "Failed to load business analytics.",
|
||
"kpisAria": "Key metrics",
|
||
"kpiEmpty": "No aggregated metrics",
|
||
"trendAria": "Trend chart",
|
||
"trendTitle": "Revenue · Booth trend",
|
||
"monthlyAgg": "Monthly aggregation",
|
||
"trendHint": "Monthly rental/utility revenue and booth count trend (revenue in KRW).",
|
||
"trendEmptyTitle": "No trend data",
|
||
"trendEmptyDesc": "No revenue/booth records for an aggregable period.",
|
||
"revenue": "Revenue",
|
||
"booth": "Booths",
|
||
"boothsUnit": "{{n}} booths",
|
||
"sectorsAria": "Sector composition",
|
||
"sectorsTitle": "Sector composition",
|
||
"sectorsEmptyTitle": "Sectors not aggregated",
|
||
"sectorsEmptyDesc": "Displayed once the sector classification source (M13) is connected.",
|
||
"perfTable": "Performance table",
|
||
"pnlTitle": "P&L composition",
|
||
"exhibitorPerfTitle": "Exhibitor performance",
|
||
"sampleTag": "Sample",
|
||
"pnlEmptyTitle": "No P&L items",
|
||
"pnlEmptyDesc": "Displayed once booth rental/utility revenue records are aggregated.",
|
||
"colItem": "Item",
|
||
"colAmount": "Amount",
|
||
"colGrade": "Grade",
|
||
"perfEmptyTitle": "Exhibitor performance not aggregated",
|
||
"perfEmptyDesc": "Displayed once the lead/conversion source (M13 visitors) is connected.",
|
||
"colCompany": "Company",
|
||
"colLeads": "Leads",
|
||
"colConversion": "Conversion"
|
||
},
|
||
"global": {
|
||
"sectionAria": "Tenant-wide business analytics",
|
||
"title": "Enterprise analytics (cross-event)",
|
||
"subtitle": "Cross-event revenue comparison · hall utilization trend · exhibitor retention · demand forecast",
|
||
"yearsAria": "Analysis years",
|
||
"years3": "Last 3 years",
|
||
"years5": "Last 5 years",
|
||
"years10": "Last 10 years",
|
||
"loadErrorTitle": "Failed to load global aggregation",
|
||
"loadErrorDesc": "Please try again shortly.",
|
||
"kpisAria": "Global key metrics",
|
||
"kpiEmpty": "No aggregated metrics",
|
||
"evComp": "Cross-event revenue comparison",
|
||
"top8": "Top 8",
|
||
"evCompHint": "Rental + utility revenue ranking of events with booth layouts (in KRW).",
|
||
"evCompEmptyTitle": "No events to compare",
|
||
"evCompEmptyDesc": "Displayed once revenue of events with booth layouts is aggregated.",
|
||
"revenue": "Revenue",
|
||
"retention": "Exhibitor retention",
|
||
"retentionCum": "Cumulative return rate",
|
||
"returning": "returning",
|
||
"retentionEmptyTitle": "Retention by year not aggregated",
|
||
"retentionEmptyDesc": "Displayed once the booth-assigned company source is connected.",
|
||
"retentionRate": "Return rate",
|
||
"occupancy": "Hall utilization trend (monthly)",
|
||
"occupancyHint": "Monthly utilization = event-days ÷ (halls × days in month).",
|
||
"occupancyEmpty": "No utilization data",
|
||
"occupancyRate": "Utilization",
|
||
"forecast": "Demand forecast",
|
||
"forecastTitle": "Demand forecast (hosting trend)",
|
||
"trendProjection": "Trend projection",
|
||
"forecastHint": "Actual annual event count + least-squares linear trend projected 2 years ahead (dotted).",
|
||
"forecastEmptyTitle": "No history to forecast",
|
||
"forecastEmptyDesc": "Displayed once annual hosting history is aggregated.",
|
||
"casesUnit": "{{n}}",
|
||
"actual": "Actual",
|
||
"projected": "Forecast"
|
||
},
|
||
"ops": {
|
||
"title": "Hall Operations",
|
||
"subtitle": "Status based on check-in / utility live aggregation",
|
||
"modeAria": "View mode",
|
||
"live": "Live",
|
||
"history": "History",
|
||
"noEventTitle": "Please select an event",
|
||
"noEventDesc": "No event has been designated for on-site operations.",
|
||
"offlineSample": "Offline — Sample",
|
||
"degradedMsg": "Could not reach the aggregation API; showing demo sample data.",
|
||
"loadError": "Failed to load on-site operations status.",
|
||
"hallStatus": "Hall status",
|
||
"checkinDerived": "Derived from check-in (M10) · distributed by area weight",
|
||
"sensorNoneHalls": "No sensor · assigned hall list",
|
||
"noHallsTitle": "No assigned halls",
|
||
"noHallsDesc": "Displayed once halls are assigned to the event.",
|
||
"busy": "Busy",
|
||
"smooth": "Smooth",
|
||
"moderate": "Moderate",
|
||
"people": "{{n}}",
|
||
"onSiteCheckin": "On-site check-in <0>{{n}}</0>",
|
||
"noCheckinAgg": "No check-in aggregation",
|
||
"powerLoad": "Power load",
|
||
"totalKw": "Total <0>{{v}}</0>kW",
|
||
"utilLoadAgg": "Utility request (M4) load aggregation",
|
||
"noLoadTitle": "No requested load",
|
||
"noLoadDesc": "Displayed per hall once electrical utility requests are received.",
|
||
"kw": "{{v}}kW",
|
||
"hourlyCheckin": "Hourly check-in",
|
||
"hourlyAgg": "Check-in (M10) hourly aggregation",
|
||
"noSeriesTitle": "No check-in trend",
|
||
"noSeriesDesc": "Hourly trend appears once on-site check-ins are recorded.",
|
||
"facilitySensor": "Facility sensor integration",
|
||
"facilitySensorTitle": "Facility sensors (HVAC · Lighting · Parking)",
|
||
"sensorNoneTitle": "Facility sensors not connected",
|
||
"sensorNoneDesc": "HVAC · lighting IoT · parking (iparking) integration is shown once sensors (M14) are connected.",
|
||
"temp": "Temp",
|
||
"humidity": "Humidity",
|
||
"parkingSlots": "{{zone}}: {{occ}}/{{cap}} slots"
|
||
},
|
||
"admin": {
|
||
"deniedTitle": "Access denied",
|
||
"deniedAuthed": "This page is available only to system administrators (Hall Manager · ADMIN). Contact an administrator if you need access.",
|
||
"deniedGuest": "The admin back office is available after login.",
|
||
"overviewTitle": "System Overview",
|
||
"overviewSub": "Real-time metrics and operational status",
|
||
"loginSlides": "Manage login slides",
|
||
"tenantSwitch": "Switch tenant",
|
||
"systemNormal": "System normal",
|
||
"moduleShortcuts": "Admin module shortcuts",
|
||
"offlineSample": "Offline — Sample",
|
||
"degradedMsg": "Could not reach the aggregation API; showing demo sample data.",
|
||
"dashLoadError": "Failed to load the admin dashboard.",
|
||
"kpisAria": "Key metrics",
|
||
"kpiEmpty": "No aggregated metrics",
|
||
"visitorTrend": "Visitor trend",
|
||
"hourlyVisitors": "Hourly visitors",
|
||
"visitors": "Visitors",
|
||
"visitorTrendEmptyTitle": "Visitor trend not aggregated",
|
||
"visitorTrendEmptyDesc": "Hourly trend appears once visitor sensors (M14) are connected.",
|
||
"liveEvents": "Live events",
|
||
"noLiveEvents": "No ongoing events",
|
||
"hallTbd": "Hall unassigned",
|
||
"occupancy": "Occupancy {{n}}%",
|
||
"modUsers": "Users",
|
||
"modRoles": "Roles & Permissions",
|
||
"modCodes": "Common codes",
|
||
"modMenus": "Menus",
|
||
"modAudit": "Audit log",
|
||
"modSettings": "System settings",
|
||
"modRulesets": "Rulesets",
|
||
"modTenants": "Tenants"
|
||
},
|
||
"tenant": {
|
||
"title": "Tenant Management · Onboarding",
|
||
"subtitle": "Platform super-admin only · add venues via data onboarding without code deployment.",
|
||
"sampleTag": "Sample · Not implemented",
|
||
"sampleNote": "Multi-tenancy (tenant CRUD, onboarding, isolation) is not yet in the backend, so this screen shows the target IA. Live data will be wired after multi-tenancy is introduced.",
|
||
"listAria": "Tenant list",
|
||
"venue": "Venue",
|
||
"notImpl": "Not implemented",
|
||
"addVenue": "Add venue",
|
||
"code": "Code",
|
||
"domain": "Domain",
|
||
"status": "Status",
|
||
"events": "Events",
|
||
"users": "Users",
|
||
"wizardAria": "Onboarding wizard",
|
||
"onboardingOf": "{{name}} onboarding",
|
||
"dataOnboarding": "Data onboarding without code deployment",
|
||
"wiz": {
|
||
"create": {
|
||
"label": "Create tenant",
|
||
"desc": "Register code & display name"
|
||
},
|
||
"domain": {
|
||
"label": "Subdomain",
|
||
"desc": "Assign DNS & branding domain"
|
||
},
|
||
"brand": {
|
||
"label": "Branding",
|
||
"desc": "Logo, colors, public-site theme"
|
||
},
|
||
"master": {
|
||
"label": "Master data entry",
|
||
"desc": "Seed halls, rates, rulesets"
|
||
},
|
||
"admin": {
|
||
"label": "Admin account",
|
||
"desc": "Invite tenant administrator"
|
||
},
|
||
"smoke": {
|
||
"label": "Isolation smoke test",
|
||
"desc": "Verify cross-tenant isolation"
|
||
},
|
||
"activate": {
|
||
"label": "Activate",
|
||
"desc": "Switch to operation"
|
||
}
|
||
},
|
||
"tstatus": {
|
||
"active": "Active",
|
||
"onboarding": "Onboarding",
|
||
"suspended": "Suspended"
|
||
}
|
||
},
|
||
"ruleset": {
|
||
"title": "Regulation Ruleset Versions",
|
||
"subtitle": "Ruleset version history and rule items for regulation revisions.",
|
||
"readonly": "Read only",
|
||
"readonlyNote": "Rulesets are version-controlled as deployment resources (rulesets/*.json). Editing and version creation are done by replacing resources when regulations are revised; this screen is view-only.",
|
||
"listError": "Failed to load the ruleset list.",
|
||
"noRulesets": "No deployed rulesets",
|
||
"versionHistory": "Version history",
|
||
"rulesCount": "{{n}} rules",
|
||
"effectiveDate": "Effective {{date}}",
|
||
"ruleList": "Rule list",
|
||
"rulesOf": "{{name}} rules ({{n}})",
|
||
"detailError": "Failed to load the full rules.",
|
||
"noRulesTitle": "Ruleset has no rule array",
|
||
"noRulesDesc": "A ruleset that defines only rates/unit prices without rules (e.g. rate master).",
|
||
"colRuleName": "Rule name",
|
||
"colValue": "Value/setting",
|
||
"colLogic": "Logic / Requirement",
|
||
"colSeverity": "Violation level",
|
||
"block": "Block",
|
||
"warn": "Warn",
|
||
"required": "Required",
|
||
"perHall": "Per hall {{unit}}",
|
||
"docNeeded": "Document required: {{doc}}"
|
||
},
|
||
"audit": {
|
||
"title": "Audit Log",
|
||
"subtitle": "Tracks all admin actions (approvals, awards, setting changes) and key domain events. (Integrity preserved)",
|
||
"exportCsv": "Export CSV",
|
||
"filterAria": "Audit log filter",
|
||
"actionType": "Action type",
|
||
"allActions": "All actions",
|
||
"actorId": "Actor ID",
|
||
"actorIdPh": "e.g. user-102",
|
||
"eventId": "Event ID",
|
||
"eventIdPh": "e.g. EVT-2026-01",
|
||
"reset": "Reset",
|
||
"applyFilter": "Apply filter",
|
||
"loadError": "Failed to load the audit log.",
|
||
"tableAria": "Audit log table",
|
||
"emptyTitle": "No audit records match the criteria",
|
||
"emptyDesc": "Adjust or reset filters and search again.",
|
||
"colTime": "Time",
|
||
"colUser": "User",
|
||
"colAction": "Action",
|
||
"colTarget": "Target",
|
||
"colEvent": "Event",
|
||
"colResult": "Result",
|
||
"showing": "Showing <0>{{from}}-{{to}}</0> / <1>{{total}}</1> total",
|
||
"prev": "Prev",
|
||
"next": "Next",
|
||
"rowsShow": "Rows",
|
||
"rowsPerPage": "Rows per page",
|
||
"rowsN": "{{n}}",
|
||
"success": "Success",
|
||
"failure": "Failure",
|
||
"csvTime": "Time",
|
||
"csvActorId": "ActorID",
|
||
"csvActorName": "ActorName",
|
||
"csvAction": "Action",
|
||
"csvTargetType": "TargetType",
|
||
"csvTargetId": "TargetID",
|
||
"csvEventId": "EventID",
|
||
"csvResult": "Result",
|
||
"csvSummary": "Summary"
|
||
},
|
||
"role": {
|
||
"title": "Roles & Permissions (RBAC)",
|
||
"subtitle": "Assign resource permissions per role (Organizer, Exhibitor, Contractor, Hall Manager, Admin, Visitor) in a matrix.",
|
||
"addRole": "Add role",
|
||
"loadError": "Failed to load roles/permissions.",
|
||
"noRolesTitle": "No roles defined",
|
||
"noRolesDesc": "Add a role to configure RBAC.",
|
||
"roleList": "Role list",
|
||
"role": "Role",
|
||
"codePerm": "{{code}} · {{n}} permissions",
|
||
"unused": "Unused",
|
||
"permMatrix": "Permission matrix",
|
||
"rolePerm": "{{name}} permissions",
|
||
"roleInfo": "Role info",
|
||
"deleteConfirm": "Delete the role '{{name}}'?",
|
||
"delete": "Delete",
|
||
"noPerms": "No permissions defined",
|
||
"selectRole": "Select a role",
|
||
"saved": "Role saved.",
|
||
"deleted": "Role deleted.",
|
||
"addRoleModal": "Add role",
|
||
"editRole": "Edit role info",
|
||
"modalDesc": "Permission assignment is managed by checkboxes in the matrix after saving.",
|
||
"roleCode": "Role code *",
|
||
"roleCodePh": "e.g. ORGANIZER",
|
||
"roleName": "Role name *",
|
||
"description": "Description",
|
||
"useYn": "In use",
|
||
"use": "In use",
|
||
"noUse": "Unused",
|
||
"cancel": "Cancel",
|
||
"save": "Save",
|
||
"saving": "Saving…",
|
||
"errRequired": "Role code and name are required.",
|
||
"errDupCode": "This role code already exists."
|
||
},
|
||
"menu": {
|
||
"title": "Menu Management",
|
||
"subtitle": "Manage the per-role navigation menu tree with paths and access roles.",
|
||
"addMenu": "Add menu",
|
||
"loadError": "Failed to load menus.",
|
||
"treeAria": "Menu tree",
|
||
"emptyTitle": "No registered menus",
|
||
"emptyDesc": "Add a menu.",
|
||
"colName": "Menu name",
|
||
"colPath": "Path",
|
||
"colType": "Type",
|
||
"colRole": "Access role",
|
||
"colSort": "Order",
|
||
"colUse": "In use",
|
||
"colManage": "Manage",
|
||
"all": "All",
|
||
"unused": "Unused",
|
||
"used": "In use",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"deleteConfirm": "Delete the menu '{{name}}'? Sub-menus, if any, will be cleaned up together.",
|
||
"saved": "Menu saved.",
|
||
"deleted": "Menu deleted.",
|
||
"editMenu": "Edit menu",
|
||
"menuId": "Menu ID (unique key) *",
|
||
"menuIdPh": "e.g. admin-users",
|
||
"menuName": "Menu name *",
|
||
"parent": "Parent menu",
|
||
"topLevel": "(Top level)",
|
||
"path": "Path",
|
||
"pathPh": "e.g. /admin/users",
|
||
"type": "Type",
|
||
"accessRole": "Access role",
|
||
"accessRolePh": "e.g. ADMIN (empty = all)",
|
||
"sort": "Order",
|
||
"useYn": "In use",
|
||
"cancel": "Cancel",
|
||
"save": "Save",
|
||
"saving": "Saving…",
|
||
"errName": "Menu name is required.",
|
||
"errId": "Menu ID (unique key) is required.",
|
||
"errDupId": "This menu ID already exists."
|
||
},
|
||
"code": {
|
||
"title": "Common Code Management",
|
||
"subtitle": "Manage common code groups and code values used in dropdowns and classifications.",
|
||
"addGroup": "Add group",
|
||
"groupLoadError": "Failed to load code groups.",
|
||
"noGroupsTitle": "No code groups",
|
||
"noGroupsDesc": "Add a group to configure common codes.",
|
||
"codeGroup": "Code group",
|
||
"codeValues": "Code values",
|
||
"valuesOf": "{{name}} values",
|
||
"editGroup": "Edit code group",
|
||
"deleteGroup": "Delete group",
|
||
"deleteGroupConfirm": "Delete group '{{name}}' and its codes?",
|
||
"addCode": "Add code",
|
||
"codeLoadError": "Failed to load code values.",
|
||
"noCodesTitle": "No codes",
|
||
"noCodesDesc": "Add a code.",
|
||
"code": "Code",
|
||
"name": "Name",
|
||
"value": "Value",
|
||
"sort": "Order",
|
||
"use": "In use",
|
||
"manage": "Manage",
|
||
"unused": "Unused",
|
||
"used": "In use",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"deleteCodeConfirm": "Delete code '{{name}}'?",
|
||
"groupSaved": "Code group saved.",
|
||
"groupDeleted": "Code group deleted.",
|
||
"codeSaved": "Code saved.",
|
||
"codeDeleted": "Code deleted.",
|
||
"groupCode": "Group code *",
|
||
"groupName": "Group name *",
|
||
"description": "Description",
|
||
"useYn": "In use",
|
||
"cancel": "Cancel",
|
||
"save": "Save",
|
||
"saving": "Saving…",
|
||
"errGroupRequired": "Group code and name are required.",
|
||
"errDupGroup": "This group code already exists.",
|
||
"editCode": "Edit code",
|
||
"group": "Group",
|
||
"codeReq": "Code *",
|
||
"nameReq": "Name *",
|
||
"attr1": "Attribute 1 (attr1)",
|
||
"errCodeRequired": "Code and name are required.",
|
||
"errDupCode": "This code already exists."
|
||
},
|
||
"sysuser": {
|
||
"title": "User Management",
|
||
"subtitle": "Manage account creation/editing, role assignment, status (active/locked/disabled), and OTP reset. Passwords are masked and not displayed.",
|
||
"addUser": "Add user",
|
||
"searchAria": "User search",
|
||
"keyword": "Keyword",
|
||
"keywordPh": "Name·Email",
|
||
"role": "Role",
|
||
"status": "Status",
|
||
"all": "All",
|
||
"reset": "Reset",
|
||
"search": "Search",
|
||
"loadError": "Failed to load the user list.",
|
||
"listAria": "User list",
|
||
"emptyTitle": "No users",
|
||
"emptyDesc": "Adjust search criteria or add a user.",
|
||
"colUser": "User",
|
||
"colEmail": "Email",
|
||
"colRole": "Role",
|
||
"colDept": "Dept",
|
||
"colStatus": "Status",
|
||
"colLastLogin": "Last login",
|
||
"colManage": "Manage",
|
||
"hallManagerTag": "Hall Mgr",
|
||
"otpSet": "Set",
|
||
"otpUnset": "Not set",
|
||
"edit": "Edit",
|
||
"lock": "Lock",
|
||
"unlock": "Unlock",
|
||
"otpResetBtn": "Reset OTP",
|
||
"otpResetConfirm": "Reset OTP for {{name}}?",
|
||
"saved": "User saved.",
|
||
"statusChanged": "Status changed.",
|
||
"otpReset": "OTP reset.",
|
||
"active": "Active",
|
||
"locked": "Locked",
|
||
"disabled": "Disabled",
|
||
"editUser": "Edit user",
|
||
"newDesc": "The initial password is not displayed on screen after saving.",
|
||
"editDesc": "Email cannot be edited. Password reset follows a separate policy.",
|
||
"email": "Email *",
|
||
"displayName": "Display name *",
|
||
"dept": "Department",
|
||
"initPassword": "Initial password *",
|
||
"hallManagerCheck": "Hall Manager (internal operator)",
|
||
"cancel": "Cancel",
|
||
"save": "Save",
|
||
"saving": "Saving…",
|
||
"errRequired": "Email and display name are required.",
|
||
"errPassword": "New users require an initial password.",
|
||
"totalUsers": "<0>{{total}}</0> users total",
|
||
"prev": "Prev",
|
||
"next": "Next"
|
||
},
|
||
"settings": {
|
||
"title": "System Settings",
|
||
"subtitle": "Manage system parameters such as global policies, feature toggles, and AI gates. Secret values are masked.",
|
||
"loadError": "Failed to load system settings.",
|
||
"emptyTitle": "No settings registered",
|
||
"emptyDesc": "Add your first setting item in the form below.",
|
||
"saved": "Setting saved.",
|
||
"deleted": "Setting deleted.",
|
||
"deleteConfirm": "Delete the setting '{{key}}'?",
|
||
"general": "General",
|
||
"groupAria": "Settings group {{name}}",
|
||
"secret": "Secret",
|
||
"secretTitle": "Secret — value masked",
|
||
"on": "On",
|
||
"off": "Off",
|
||
"secretPh": "Set (masked) — enter new value to change",
|
||
"save": "Save",
|
||
"delete": "Delete",
|
||
"deleteKey": "Delete {{key}}",
|
||
"secretHint": "The secret value is never exposed. Saving without entering a value keeps the existing value.",
|
||
"addAria": "Add setting",
|
||
"addTitle": "Add / override setting",
|
||
"settingKey": "Setting key",
|
||
"settingKeyPh": "e.g. deadline.utility.days",
|
||
"value": "Value",
|
||
"type": "Type",
|
||
"description": "Description",
|
||
"secretCheck": "Secret (mask value)"
|
||
},
|
||
"slide": {
|
||
"title": "Login Slide Management",
|
||
"subtitle": "Login screen left carousel images/text — the <0>latest 5 by registration order</0> among active slides rotate.",
|
||
"addAria": "Add new slide",
|
||
"addTitle": "Add new slide",
|
||
"imageLabel": "Image (PNG/JPG/WebP, up to 8MB)",
|
||
"preview": "Preview",
|
||
"titleLabel": "Title text",
|
||
"titlePh": "e.g. KINTEX, Asia's leading exhibition & convention center",
|
||
"captionLabel": "Caption (subtext)",
|
||
"captionPh": "e.g. Discover business opportunities across 100,000 sqm of exhibition space.",
|
||
"submitting": "Registering…",
|
||
"submit": "Register slide",
|
||
"listAria": "Slide list",
|
||
"registered": "Registered slides",
|
||
"countActive": "{{total}} total · {{active}} active",
|
||
"emptyTitle": "No registered slides",
|
||
"emptyDesc": "Registered images and text appear in the login carousel. (5 defaults shown when none registered)",
|
||
"live": "Live",
|
||
"inactive": "Inactive",
|
||
"registeredAt": "Registered {{date}}",
|
||
"active": "Active",
|
||
"delete": "Delete",
|
||
"listError": "Failed to load the list.",
|
||
"errImage": "Please select a slide image.",
|
||
"errTitle": "Please enter the title text.",
|
||
"createFail": "Registration failed.",
|
||
"updateFail": "Update failed.",
|
||
"deleteFail": "Deletion failed.",
|
||
"deleteConfirm": "Delete the slide \"{{title}}\"?"
|
||
}
|
||
}
|