/* ============================================================ RESTO SUITE — i18n Global Thai/English switcher. Thai is the default language. Usage: const { t, lang, setLang } = useLang(); t('path.to.key', {var: 1}) Chip/segment option VALUES stay in English (they're the data model), only their displayed LABEL is translated via OPT/optLabel. ============================================================ */ const LANG_KEY = "resto.lang"; const T = { common: { tweaks: { en: "Tweaks", th: "ปรับแต่ง" }, look: { en: "Look", th: "รูปลักษณ์" }, coachingSection: { en: "Coaching", th: "คำแนะนำ" }, accent: { en: "Accent", th: "สีหลัก" }, financialSummaryToggle: { en: "Financial summary", th: "สรุปการเงิน" }, coachingTips: { en: "Coaching tips", th: "เคล็ดลับแนะนำ" }, yourInput: { en: "your input", th: "ข้อมูลของคุณ" }, benchmark: { en: "benchmark", th: "ค่าอ้างอิง" }, estimate: { en: "estimate", th: "ค่าประมาณ" }, low: { en: "low", th: "ต่ำ" }, back: { en: "Back", th: "ย้อนกลับ" }, }, ie: { title: { en: "Import / Export plan", th: "นำเข้า/ส่งออกแผน" }, desc: { en: "One file carries your whole plan — idea, market, location, validation and financials — between devices and future modules.", th: "ไฟล์เดียวเก็บแผนทั้งหมดของคุณ — ไอเดีย ตลาด ทำเล การตรวจสอบ และการเงิน — ย้ายไปมาระหว่างอุปกรณ์และโมดูลในอนาคตได้" }, download: { en: "Download plan (.json)", th: "ดาวน์โหลดแผน (.json)" }, copy: { en: "Copy JSON", th: "คัดลอก JSON" }, copied: { en: "Copied to clipboard.", th: "คัดลอกไปยังคลิปบอร์ดแล้ว" }, importHeading: { en: "Import", th: "นำเข้า" }, importDesc: { en: "Upload a plan file or paste its JSON below.", th: "อัปโหลดไฟล์แผนหรือวาง JSON ด้านล่าง" }, applyPasted: { en: "Apply pasted JSON", th: "ใช้ JSON ที่วาง" }, invalidJson: { en: "That doesn't look like valid plan JSON.", th: "ดูเหมือนจะไม่ใช่ JSON ของแผนที่ถูกต้อง" }, imported: { en: "Plan imported — every module now reads the new data.", th: "นำเข้าแผนแล้ว — ทุกโมดูลอ่านข้อมูลใหม่แล้ว" }, }, shell: { tagline: { en: "Design · Plan · Perform", th: "ออกแบบ · วางแผน · ลงมือทำ" }, navIdea: { en: "Business Model", th: "โมเดลธุรกิจ" }, navFinancials: { en: "Financial Feasibility", th: "ความเป็นไปได้ทางการเงิน" }, navPitch: { en: "Pitch Summary Dashboard", th: "แดชบอร์ดสรุปนำเสนอ" }, ready: { en: "ready", th: "พร้อม" }, startHere: { en: "start here", th: "เริ่มที่นี่" }, afterTaxMo: { en: "/mo after tax", th: "/เดือน หลังภาษี" }, monthlyProfitAfterTax: { en: "Monthly profit · after tax", th: "กำไรต่อเดือน · หลังหักภาษี" }, profitMoAfterTax: { en: "Profit / mo · after tax", th: "กำไร/เดือน · หลังหักภาษี" }, preTaxMargin: { en: "pre-tax {pre} · %%MARGIN%% margin", th: "ก่อนภาษี {pre} · มาร์จิ้น %%MARGIN%%" }, fromFinancialsStep: { en: "From the Financials step", th: "มาจากขั้นตอนการเงิน" }, importExport: { en: "⇅ Import / Export plan", th: "⇅ นำเข้า/ส่งออกแผน" }, }, idea: { stepKicker: { en: "Step 01 — Business Model", th: "ขั้นตอนที่ 01 — โมเดลธุรกิจ" }, stepTitle: { en: "Start with the dream.", th: "เริ่มจากความฝัน" }, stepLead: { en: "One page that turns a loose ambition into a structured business model — with a light market and location gut-check built in.", th: "หน้าเดียวที่เปลี่ยนความตั้งใจคร่าวๆ ให้เป็นโมเดลธุรกิจที่มีโครงสร้าง พร้อมตรวจสอบตลาดและทำเลเบื้องต้นในตัว" }, switchToInterview: { en: "Prefer to be interviewed? ", th: "อยากให้สัมภาษณ์แทนไหม " }, switchToInterviewLink: { en: "Answer a few questions instead →", th: "ตอบคำถามสั้นๆ แทน →" }, backToFormPrefix: { en: "← ", th: "← " }, backToFormLink: { en: "Back to the form", th: "กลับไปที่แบบฟอร์ม" }, viewBrief: { en: "View Concept Brief →", th: "ดูสรุปแนวคิด →" }, seeConceptBrief: { en: "See my Concept Brief →", th: "ดูสรุปแนวคิดของฉัน →" }, briefKicker: { en: "Step 01 — Business Model · Brief", th: "ขั้นตอนที่ 01 — โมเดลธุรกิจ · สรุป" }, briefTitle: { en: "Your Concept Brief.", th: "สรุปแนวคิดของคุณ" }, briefLead: { en: "The structured version of your idea — what the financials and the pitch summary read.", th: "เวอร์ชันมีโครงสร้างของไอเดียคุณ — สิ่งที่การเงินและสรุปนำเสนอจะอ่าน" }, secConcept: { en: "The concept", th: "แนวคิด" }, secCustomersPrice: { en: "Customers & price", th: "ลูกค้าและราคา" }, secChannels: { en: "Channels", th: "ช่องทางขาย" }, secFormatLocation: { en: "Format & location", th: "รูปแบบและทำเล" }, secWhyWin: { en: "Why you win", th: "จุดแข็งของคุณ" }, secAboutYou: { en: "About you", th: "เกี่ยวกับคุณ" }, conceptName: { en: "Concept name", th: "ชื่อร้าน/แนวคิด" }, conceptNamePh: { en: "e.g. Nami Ramen", th: "เช่น นามิ ราเมง" }, tagline: { en: "Tagline", th: "แท็กไลน์" }, taglineHint: { en: "One line that sells it", th: "หนึ่งประโยคที่ขายไอเดียคุณได้" }, taglinePh: { en: "Slow-broth ramen for late nights", th: "ราเมงต้มช้าเพื่อค่ำคืนดึกๆ" }, category: { en: "Category", th: "ประเภทร้าน" }, cuisine: { en: "Cuisine", th: "ประเภทอาหาร" }, cuisinePh: { en: "Type or pick below", th: "พิมพ์หรือเลือกด้านล่าง" }, serviceStyle: { en: "Service style", th: "รูปแบบการบริการ" }, targetCustomer: { en: "Target customer", th: "กลุ่มลูกค้าเป้าหมาย" }, targetCustomerHint: { en: "Pick every group you're built for", th: "เลือกทุกกลุ่มที่ร้านคุณเหมาะกับ" }, priceBand: { en: "Price band", th: "ระดับราคา" }, priceBandHint: { en: "Indicative spend per head", th: "ค่าใช้จ่ายโดยประมาณต่อคน" }, dineIn: { en: "Dine-in", th: "นั่งทาน" }, delivery: { en: "Delivery", th: "เดลิเวอรี่" }, takeaway: { en: "Takeaway", th: "ซื้อกลับ" }, deliveryHint: { en: "Grab / LineMan / foodpanda orders", th: "ออเดอร์จาก Grab / LineMan / foodpanda" }, mustTotal100: { en: "Must total 100%", th: "ต้องรวมเป็น 100%" }, seats: { en: "Seats", th: "จำนวนที่นั่ง" }, seatsHint: { en: "0 if delivery-only", th: "ใส่ 0 ถ้าเดลิเวอรี่อย่างเดียว" }, size: { en: "Approx. size", th: "ขนาดโดยประมาณ" }, locationType: { en: "Location type", th: "ประเภททำเล" }, competition: { en: "Similar places already nearby", th: "ร้านคล้ายกันที่มีอยู่แล้วใกล้เคียง" }, competitionHint: { en: "Honest gut call — powers the market check", th: "ตอบตามความรู้สึกจริง — ใช้ตรวจสอบตลาด" }, rentExpectation: { en: "Expected monthly rent", th: "ค่าเช่าต่อเดือนที่คาดไว้" }, rentExpectationHint: { en: "Rough asking rent for the kind of spot you want", th: "ค่าเช่าโดยประมาณของทำเลที่คุณต้องการ" }, uspTitle: { en: "Your edge in one sentence", th: "จุดเด่นของคุณในหนึ่งประโยค" }, uspHint: { en: "What a customer would tell a friend about you.", th: "สิ่งที่ลูกค้าจะบอกเพื่อนเกี่ยวกับร้านคุณ" }, uspPh: { en: "The only 3am tonkotsu in Thonglor, broth simmered 18 hours.", th: "ทงคตสึเที่ยงคืนแห่งเดียวในทองหล่อ ต้มน้ำซุป 18 ชั่วโมง" }, experience: { en: "F&B experience", th: "ประสบการณ์ร้านอาหาร" }, capital: { en: "Capital available", th: "เงินทุนที่มี" }, capitalHint: { en: "Everything you can commit", th: "เงินทั้งหมดที่คุณพร้อมลงทุน" }, role: { en: "Your role", th: "บทบาทของคุณ" }, progressFields: { en: "fields", th: "ช่อง" }, typeAnswer: { en: "Type your answer…", th: "พิมพ์คำตอบของคุณ…" }, previous: { en: "← Previous", th: "← ก่อนหน้า" }, skip: { en: "Skip this one", th: "ข้ามข้อนี้" }, next: { en: "Next →", th: "ถัดไป →" }, saveAnswer: { en: "Save answer →", th: "บันทึกคำตอบ →" }, interviewTip: { en: "Answer loosely — I pull out the structure. Anything I mishear you can correct in “Fill the form”.", th: "ตอบแบบสบายๆ ได้เลย ระบบจะดึงโครงสร้างให้เอง หากฟังผิดคุณแก้ไขได้ใน “กรอกแบบฟอร์ม”" }, doneTitle: { en: "That's the interview.", th: "จบการสัมภาษณ์แล้ว" }, doneDesc: { en: "I filled {filled} of {total} fields from your answers. Review and fix anything I misheard, then see your Concept Brief.", th: "กรอกให้แล้ว {filled} จาก {total} ช่องจากคำตอบของคุณ ตรวจสอบและแก้ไขจุดที่ฟังผิด แล้วดูสรุปแนวคิดของคุณ" }, reviewForm: { en: "Review the form", th: "ตรวจสอบแบบฟอร์ม" }, yourAnswers: { en: "Your answers — tap one to edit", th: "คำตอบของคุณ — แตะเพื่อแก้ไข" }, skipped: { en: "skipped", th: "ข้าม" }, edit: { en: "edit →", th: "แก้ไข →" }, restart: { en: "Restart interview", th: "เริ่มสัมภาษณ์ใหม่" }, noted: { en: "couldn't pull specifics — you can fix it in the form later", th: "ดึงรายละเอียดไม่ได้ — แก้ไขในแบบฟอร์มได้ภายหลัง" }, notedLabel: { en: "Noted", th: "รับทราบ" }, editMyAnswers: { en: "Edit my answers", th: "แก้ไขคำตอบของฉัน" }, checkNumbers: { en: "Check the numbers →", th: "ตรวจสอบตัวเลข →" }, prefillNote: { en: "Step 02 pre-fills from this brief — seats, size, average spend and rent carry over.", th: "ขั้นตอนที่ 02 จะดึงข้อมูลจากสรุปนี้มาให้อัตโนมัติ — ที่นั่ง ขนาด ค่าใช้จ่ายเฉลี่ย และค่าเช่า" }, conceptVerdict: { en: "Concept verdict", th: "ผลประเมินแนวคิด" }, conceptReadiness: { en: "Concept readiness", th: "ความพร้อมของแนวคิด" }, fieldsCoherence: { en: "{filled}/{total} fields · coherence checked", th: "{filled}/{total} ช่อง · ตรวจสอบความสอดคล้องแล้ว" }, conceptBriefFallback: { en: "Concept Brief", th: "สรุปแนวคิด" }, whyYouWin: { en: "Why you win", th: "จุดแข็งของคุณ" }, roughFitout: { en: "Rough fit-out for this concept: ", th: "ค่าตกแต่งร้านโดยประมาณสำหรับแนวคิดนี้: " }, realityCheck: { en: "Reality check", th: "ตรวจสอบความเป็นจริง" }, realityCheckDesc: { en: "Your concept plus a light market and location gut-check — the handful of things that most often decide it before the numbers do.", th: "แนวคิดของคุณบวกกับการตรวจตลาดและทำเลเบื้องต้น — ปัจจัยไม่กี่อย่างที่มักตัดสินก่อนตัวเลขจะบอก" }, nothingJumpsOut: { en: "Nothing jumps out — no crowd-without-an-edge, no price–place mismatch, rent within reach of the sales benchmark.", th: "ไม่มีจุดที่น่ากังวล — ไม่มีปัญหากลุ่มลูกค้าขาดจุดเด่น ราคากับทำเลสอดคล้องกัน ค่าเช่าอยู่ในเกณฑ์เทียบกับยอดขายอ้างอิง" }, roughSalesFormat: { en: "Rough sales for this format: ", th: "ยอดขายโดยประมาณสำหรับรูปแบบนี้: " }, healthyRentUpTo: { en: " — healthy rent up to ≈ ", th: " — ค่าเช่าที่เหมาะสมไม่เกิน ≈ " }, testFirst: { en: "Test first", th: "ทดสอบก่อน" }, briefVerdictGreen: { en: "The pieces fit — and the light market and location checks below hold up. Take it into the numbers.", th: "องค์ประกอบเข้ากันดี — และผลตรวจตลาดกับทำเลด้านล่างก็ผ่าน ไปดูตัวเลขกันต่อได้เลย" }, briefVerdictRed: { en: "Something below contradicts itself — resolve the red flags before moving on.", th: "มีบางจุดด้านล่างที่ขัดแย้งกันเอง — แก้ไขจุดสีแดงก่อนไปต่อ" }, briefVerdictAmber: { en: "A solid start — fill the gaps and settle the flagged points, then move on to the numbers.", th: "เริ่มต้นได้ดี — เติมส่วนที่ขาดและแก้จุดที่ถูกตั้งข้อสังเกต แล้วไปดูตัวเลขต่อ" }, verdictContradictions: { en: "Contradictions to resolve", th: "มีข้อขัดแย้งต้องแก้ไข" }, verdictReady: { en: "Concept Brief ready", th: "สรุปแนวคิดพร้อมแล้ว" }, verdictSharpen: { en: "Needs sharpening", th: "ต้องปรับให้คมชัดขึ้น" }, flagMix: { en: "Your channel mix adds to {mixSum}%, not 100%. Fix the split before anything downstream can trust it.", th: "สัดส่วนช่องทางขายของคุณรวมได้ {mixSum}% ไม่ใช่ 100% แก้ตัวเลขนี้ก่อน ไม่งั้นขั้นตอนถัดไปจะเชื่อถือไม่ได้" }, flagFineDelivery: { en: "Fine dining rarely travels well — a delivery-heavy mix fights the concept. Consider a separate delivery brand instead.", th: "ไฟน์ไดนิ่งมักไม่เหมาะกับการจัดส่ง — สัดส่วนเดลิเวอรี่สูงจะขัดกับแนวคิดร้าน ลองแยกแบรนด์สำหรับเดลิเวอรี่ต่างหาก" }, flagPricePlace: { en: "{band} pricing in a {loc} catchment is a price–place mismatch. One of the two usually has to move.", th: "ราคาระดับ{band}ในทำเล{loc}ไม่ค่อยเข้ากัน มักต้องปรับอย่างใดอย่างหนึ่ง" }, flagPriceStudents: { en: "Your price sits above what this crowd usually spends. Either the target customer or the price band needs to move.", th: "ราคาของคุณสูงกว่าที่กลุ่มนี้มักจะจ่ายไหว ต้องปรับกลุ่มลูกค้าเป้าหมายหรือระดับราคาอย่างใดอย่างหนึ่ง" }, flagCompetitionUsp: { en: "A crowded field and no clear edge is the hardest way in. Sharpen what makes you different before spending a baht.", th: "ตลาดที่มีคู่แข่งเยอะแต่ไม่มีจุดเด่นชัดเจนคือทางที่ยากที่สุด ทำจุดต่างให้ชัดก่อนใช้เงินสักบาท" }, flagDeliveryPct: { en: "{pct}% delivery means GrabFood / LineMan commissions (~25–35%) eat a big slice of every order. Price the delivery menu accordingly.", th: "เดลิเวอรี่ {pct}% หมายความว่าค่าคอมมิชชั่น GrabFood / LineMan (~25-35%) จะกินกำไรไปมาก ตั้งราคาเมนูเดลิเวอรี่ให้เหมาะสม" }, flagRent: { en: "Expected rent of {rent} is {gap} above the ~10% of sales a restaurant can usually carry — against a benchmark estimate of {est}/mo in sales ({basis}). Negotiate, or be sure the site sells more.", th: "ค่าเช่าที่คาดไว้ {rent} สูงกว่าเกณฑ์ ~10% ของยอดขายที่ร้านอาหารทั่วไปรับไหวอยู่ {gap} — เทียบกับยอดขายอ้างอิงที่ประมาณ {est}/เดือน ({basis}) ลองต่อรอง หรือมั่นใจว่าทำเลนี้ขายได้มากกว่านั้น" }, flagCapital: { en: "Capital of {cap} looks well below a rough fit-out estimate of {est} ({basis}) — before deposits, stock and reserve. Shrink the concept or raise more.", th: "เงินทุน {cap} ดูน้อยกว่าค่าตกแต่งร้านโดยประมาณที่ {est} ({basis}) มาก — ยังไม่รวมมัดจำ สต๊อก และเงินสำรอง ลองลดขนาดแนวคิดหรือระดมทุนเพิ่ม" }, flagUsp: { en: "Your edge reads generic — nothing here separates you from the shop next door yet. Sharpen it into something a customer would repeat to a friend.", th: "จุดเด่นที่เขียนไว้ยังทั่วไปเกินไป — ยังไม่มีอะไรที่ต่างจากร้านข้างๆ ลองปรับให้เป็นสิ่งที่ลูกค้าอยากเล่าต่อให้เพื่อนฟัง" }, flagBarOffice: { en: "A bar living off office crowds is busy 2 nights a week. Check whether the quiet dayparts still cover the rent.", th: "บาร์ที่พึ่งพากลุ่มออฟฟิศจะคึกคักแค่ 2 คืนต่อสัปดาห์ ลองตรวจดูว่าช่วงที่เงียบยังจ่ายค่าเช่าไหวหรือไม่" }, flagFirstTimerScale: { en: "A first venture at this scale is a hard first climb. Many owners start smaller, learn the ropes, then expand.", th: "การเริ่มธุรกิจแรกในขนาดนี้เป็นก้าวที่ยากมาก เจ้าของร้านหลายคนเริ่มจากเล็กๆ เรียนรู้ก่อนแล้วค่อยขยาย" }, flagFoodHigh: { en: "Food cost is {pct} of sales. Most restaurants keep this 28–35% — tighten recipes or pricing.", th: "ต้นทุนวัตถุดิบอยู่ที่ {pct} ของยอดขาย ร้านอาหารส่วนใหญ่รักษาไว้ที่ 28-35% ลองปรับสูตรหรือราคา" }, flagFoodLow: { en: "Food cost of {pct} looks low — double-check it's realistic for your menu.", th: "ต้นทุนวัตถุดิบ {pct} ดูต่ำไป — ลองตรวจสอบว่าสมเหตุสมผลกับเมนูของคุณหรือไม่" }, flagFoodHealthy: { en: "Food cost {pct} sits in the healthy 28–35% range.", th: "ต้นทุนวัตถุดิบ {pct} อยู่ในช่วงที่เหมาะสม 28-35%" }, flagStaffHigh: { en: "Staff is {pct} of sales (healthy is ~25–35%). Keep an eye on the roster.", th: "ค่าแรงพนักงานอยู่ที่ {pct} ของยอดขาย (ที่เหมาะสมคือ ~25-35%) ควรจับตาตารางกะพนักงาน" }, flagPrimeHigh: { en: "Prime cost (food + staff) is {pct}. Above 65% leaves little for rent and profit.", th: "ต้นทุนหลัก (วัตถุดิบ+ค่าแรง) อยู่ที่ {pct} หากเกิน 65% จะเหลือเงินสำหรับค่าเช่าและกำไรน้อยมาก" }, flagRentHigh: { en: "Rent is {pct} of sales. Above 15% is heavy for a restaurant.", th: "ค่าเช่าอยู่ที่ {pct} ของยอดขาย เกิน 15% ถือว่าหนักสำหรับร้านอาหาร" }, flagMarginGood: { en: "A net margin of {pct} gives you a comfortable cushion.", th: "มาร์จิ้นสุทธิ {pct} ให้กันชนที่สบายพอสมควร" }, flagLoss: { en: "At these numbers you spend more than you earn each month. Raise sales or trim costs.", th: "ด้วยตัวเลขนี้คุณใช้จ่ายมากกว่าที่หาได้ในแต่ละเดือน ต้องเพิ่มยอดขายหรือลดต้นทุน" }, flagPaybackSlow: { en: "Payback of {months} is slow — most owners aim to recover within 2–3 years.", th: "ระยะเวลาคืนทุน {months} ค่อนข้างช้า — เจ้าของร้านส่วนใหญ่ตั้งเป้าคืนทุนภายใน 2-3 ปี" }, flagNoTax: { en: "You haven't set aside anything for taxes yet. Add a Taxes & statutory line so your take-home number is realistic.", th: "คุณยังไม่ได้กันเงินสำหรับภาษีเลย เพิ่มรายการภาษีและเงินสมทบเพื่อให้ตัวเลขกำไรสุทธิสมจริง" }, riskRent: { en: "Riskiest assumption: the rent. It only works if the site really sells near the benchmark — count foot traffic and check neighbours' busy hours before signing.", th: "สมมติฐานที่เสี่ยงที่สุด: ค่าเช่า จะได้ผลก็ต่อเมื่อทำเลนี้ขายได้ใกล้เคียงค่าอ้างอิงจริง — นับจำนวนคนเดินผ่านและดูช่วงเวลาคึกคักของร้านข้างเคียงก่อนเซ็นสัญญา" }, riskCapital: { en: "Riskiest assumption: the budget. Your capital sits below a rough fit-out benchmark — get a real contractor quote before anything else.", th: "สมมติฐานที่เสี่ยงที่สุด: งบประมาณ เงินทุนของคุณต่ำกว่าค่าตกแต่งร้านอ้างอิง — ขอใบเสนอราคาจากผู้รับเหมาจริงก่อนอื่นใด" }, riskPrice: { en: "Riskiest assumption: the price. Test whether your target crowd will actually pay this — a weekend pop-up or pre-order test settles it fast.", th: "สมมติฐานที่เสี่ยงที่สุด: ราคา ทดสอบว่ากลุ่มเป้าหมายจะจ่ายจริงไหม — ลองเปิดป็อปอัพวันหยุดหรือเปิดพรีออเดอร์ก็รู้ผลเร็ว" }, riskUsp: { en: "Riskiest assumption: the edge. If you can't name why people cross the street for you, test the concept on strangers before spending on a site.", th: "สมมติฐานที่เสี่ยงที่สุด: จุดเด่น ถ้าบอกไม่ได้ว่าทำไมคนถึงจะข้ามถนนมาหาคุณ ลองทดสอบแนวคิดกับคนแปลกหน้าก่อนลงทุนกับทำเล" }, benchSeatsTurns: { en: "{seats} seats × 1.8 turns × {mid} × 26 days", th: "{seats} ที่นั่ง × 1.8 รอบ × {mid} × 26 วัน" }, benchCloudKitchen: { en: "typical Bangkok cloud-kitchen setup", th: "ค่าเฉลี่ยของคลาวด์คิทเช่นในกรุงเทพฯ" }, benchPerSeat: { en: "{per}/seat × {seats} seats (Thai {cat} benchmark)", th: "{per}/ที่นั่ง × {seats} ที่นั่ง (ค่าอ้างอิงร้าน{cat}ในไทย)" }, }, q: { concept: { q: { en: "Tell me about the restaurant you dream of opening.", th: "เล่าให้ฟังหน่อยว่าร้านอาหารในฝันของคุณเป็นแบบไหน" }, hint: { en: "A sentence or two — what food, what vibe. Thai or English, both fine.", th: "หนึ่งหรือสองประโยคก็พอ — อาหารแบบไหน บรรยากาศแบบไหน ตอบไทยหรืออังกฤษก็ได้" } }, name: { q: { en: "Does it have a name yet? And a one-line tagline?", th: "มีชื่อร้านหรือยัง แล้วมีแท็กไลน์สั้นๆ ไหม" }, hint: { en: "e.g. “Nami Ramen — slow-broth ramen for Thonglor nights.” Skip if undecided.", th: "เช่น “นามิ ราเมง — ราเมงต้มช้าเพื่อค่ำคืนทองหล่อ” ข้ามได้ถ้ายังไม่ตัดสินใจ" } }, customer: { q: { en: "Who do you picture sitting at your tables?", th: "คุณนึกภาพใครนั่งอยู่ที่โต๊ะร้านคุณ" }, hint: { en: "Students, office workers, families, tourists, expats, hi-so — one or several.", th: "นักเรียน พนักงานออฟฟิศ ครอบครัว นักท่องเที่ยว ชาวต่างชาติ ไฮโซ — เลือกได้หลายกลุ่ม" } }, price: { q: { en: "Roughly how much should one customer spend per visit?", th: "โดยประมาณลูกค้าหนึ่งคนควรใช้จ่ายเท่าไรต่อครั้ง" }, hint: { en: "A number in baht is perfect — e.g. “around ฿250 a head”.", th: "บอกเป็นตัวเลขบาทได้เลย เช่น “ประมาณ 250 บาทต่อคน”" } }, channels: { q: { en: "Dine-in, delivery, takeaway — how do you imagine the split?", th: "นั่งทาน เดลิเวอรี่ ซื้อกลับ — คุณคิดว่าสัดส่วนจะเป็นยังไง" }, hint: { en: "e.g. “mostly dine-in, maybe 70/20/10” — three numbers that sum to 100.", th: "เช่น “ส่วนใหญ่นั่งทาน สัก 70/20/10” — ตัวเลขสามตัวรวมกันเป็น 100" } }, format: { q: { en: "How big is the place in your head?", th: "ในหัวคุณ ร้านมีขนาดใหญ่แค่ไหน" }, hint: { en: "Seats and rough size — e.g. “about 30 seats, maybe 80 sqm, table service”.", th: "จำนวนที่นั่งและขนาดคร่าวๆ เช่น “ประมาณ 30 ที่นั่ง 80 ตร.ม. เสิร์ฟที่โต๊ะ”" } }, location: { q: { en: "Where do you picture it — what kind of spot?", th: "คุณนึกภาพทำเลแบบไหน" }, hint: { en: "A mall unit, street shophouse, community mall, CBD, tourist area, near a campus…", th: "ในห้าง ตึกแถวริมถนน คอมมูนิตี้มอลล์ ย่านธุรกิจ แหล่งท่องเที่ยว ใกล้มหาวิทยาลัย…" } }, usp: { q: { en: "Why will people choose you over the shop next door?", th: "ทำไมคนถึงจะเลือกร้านคุณแทนร้านข้างๆ" }, hint: { en: "One honest sentence. “Good food” doesn't count — everyone says that.", th: "หนึ่งประโยคที่จริงใจ “อาหารอร่อย” ใช้ไม่ได้ เพราะทุกร้านก็พูดแบบนี้" } }, experience: { q: { en: "Have you worked in restaurants before?", th: "คุณเคยทำงานร้านอาหารมาก่อนไหม" }, hint: { en: "First time, worked in F&B, or opened your own before.", th: "ครั้งแรก เคยทำงานในธุรกิจอาหาร หรือเคยเปิดร้านของตัวเองมาก่อน" } }, capital: { q: { en: "Last one — how much capital can you put in, and will you run it yourself?", th: "ข้อสุดท้าย — คุณมีทุนเท่าไร และจะบริหารเองไหม" }, hint: { en: "e.g. “about 2 million baht, running it myself” or “5M, I'm just investing”.", th: "เช่น “ประมาณ 2 ล้านบาท บริหารเอง” หรือ “5 ล้าน แค่ลงทุนอย่างเดียว”" } }, }, fin: { shellKicker: { en: "Step 02 — Financial Feasibility", th: "ขั้นตอนที่ 02 — ความเป็นไปได้ทางการเงิน" }, shellTitle: { en: "Do the numbers work?", th: "ตัวเลขไปรอดไหม" }, shellLead: { en: "Investment, sales, running costs and Thai taxes — ending in a professional verdict on your plan.", th: "เงินลงทุน ยอดขาย ต้นทุนดำเนินงาน และภาษีไทย — จบด้วยผลประเมินแผนของคุณอย่างมืออาชีพ" }, stepInvestment: { en: "Investment", th: "การลงทุน" }, stepSales: { en: "Sales", th: "ยอดขาย" }, stepCosts: { en: "Costs", th: "ต้นทุน" }, stepResults: { en: "Results", th: "ผลลัพธ์" }, invKicker: { en: "Financials · 1 of 4 — Investment", th: "การเงิน · 1 ใน 4 — การลงทุน" }, invTitle: { en: "What will it cost to open?", th: "เปิดร้านต้องใช้เงินเท่าไร" }, invLead: { en: "The one-time money you need before the doors open. Know a lump sum? Type it. Not sure? Open a category and build it up item by item.", th: "เงินก้อนแรกที่ต้องใช้ก่อนเปิดร้าน รู้ยอดรวมแล้วก็พิมพ์ได้เลย ไม่แน่ใจก็เปิดหมวดแล้วใส่ทีละรายการ" }, totalToOpen: { en: "Total to open", th: "รวมค่าใช้จ่ายเปิดร้าน" }, reserveTip: { en: "A cash reserve is the most-skipped line. Plan for 3–6 months of rent and wages so a slow start doesn't sink you.", th: "เงินสำรองเป็นรายการที่มักถูกมองข้ามที่สุด วางแผนไว้ 3-6 เดือนของค่าเช่าและค่าแรง เผื่อช่วงเริ่มต้นที่ยังไม่คล่องตัว" }, yourSpace: { en: "Your space ", th: "พื้นที่ร้านของคุณ " }, optional: { en: "(optional)", th: "(ไม่บังคับ)" }, spaceDesc: { en: "Unlocks cost-per-m² figures in your financial summary.", th: "ปลดล็อกตัวเลขต้นทุนต่อตร.ม. ในสรุปการเงินของคุณ" }, shopArea: { en: "Shop area", th: "พื้นที่ร้าน" }, kitchenArea: { en: "Kitchen area", th: "พื้นที่ครัว" }, stepSummaryNote: { en: "how a professional reads this step", th: "มืออาชีพอ่านขั้นตอนนี้อย่างไร" }, totalCapex: { en: "Total CapEx", th: "เงินลงทุนรวม" }, buildSystems: { en: "build + systems", th: "ก่อสร้าง + ระบบ" }, capexPerSqm: { en: "CapEx / m²", th: "เงินลงทุน/ตร.ม." }, shopAreaSub: { en: "shop area", th: "พื้นที่ร้าน" }, addShopSqm: { en: "add shop m² above", th: "เพิ่มพื้นที่ร้าน (ตร.ม.) ด้านบน" }, kitchenPerSqm: { en: "Kitchen ฿ / m²", th: "ครัว ฿/ตร.ม." }, equipKitchen: { en: "equipment ÷ kitchen", th: "อุปกรณ์ ÷ พื้นที่ครัว" }, addKitchenSqm: { en: "add kitchen m² above", th: "เพิ่มพื้นที่ครัว (ตร.ม.) ด้านบน" }, reserveCovers: { en: "Reserve covers", th: "เงินสำรองครอบคลุม" }, ofFixedCosts: { en: "of fixed costs", th: "ของต้นทุนคงที่" }, capitalRequired: { en: "Capital required", th: "เงินทุนที่ต้องใช้" }, everythingUpfront: { en: "everything upfront", th: "ทั้งหมดล่วงหน้า" }, salesKicker: { en: "Financials · 2 of 4 — Sales", th: "การเงิน · 2 ใน 4 — ยอดขาย" }, salesTitle: { en: "How much will you sell?", th: "คุณจะขายได้เท่าไร" }, salesLead: { en: "Your expected sales each month. Not sure of a number? Build it up from your seats and prices.", th: "ยอดขายที่คาดไว้ในแต่ละเดือน ไม่แน่ใจตัวเลข? ลองคำนวณจากจำนวนที่นั่งและราคา" }, haveTarget: { en: "I have a target", th: "ฉันมีเป้าหมายอยู่แล้ว" }, helpEstimate: { en: "Help me estimate", th: "ช่วยประมาณให้หน่อย" }, expectedMonthlySales: { en: "Expected monthly sales", th: "ยอดขายที่คาดต่อเดือน" }, monthlySalesDesc: { en: "Total revenue across the whole month, before any costs.", th: "รายได้รวมทั้งเดือน ก่อนหักต้นทุนใดๆ" }, aboutADay: { en: "That's about {x} a day.", th: "เฉลี่ยแล้วประมาณ {x} ต่อวัน" }, briefSaysSeats: { en: "Your Concept Brief says {n} seats.", th: "สรุปแนวคิดของคุณระบุว่ามี {n} ที่นั่ง" }, useIt: { en: "Use it", th: "ใช้ค่านี้" }, seatsHint2: { en: "How many guests can sit at once", th: "รองรับลูกค้าได้พร้อมกันกี่คน" }, tableTurns: { en: "Table turns per day", th: "จำนวนรอบต่อวัน" }, tableTurnsHint: { en: "How many times each seat is filled", th: "แต่ละที่นั่งถูกใช้ซ้ำกี่ครั้งต่อวัน" }, avgSpend: { en: "Average spend per guest", th: "ค่าใช้จ่ายเฉลี่ยต่อคน" }, avgSpendHint: { en: "Food + drink on one bill, per head", th: "อาหาร+เครื่องดื่มต่อบิล ต่อคน" }, openDays: { en: "Open days per month", th: "จำนวนวันเปิดต่อเดือน" }, estMonthlySales: { en: "Estimated monthly sales", th: "ยอดขายโดยประมาณต่อเดือน" }, perDayApprox: { en: "≈ {x} per day", th: "≈ {x} ต่อวัน" }, salesPerMonth: { en: "Sales / month", th: "ยอดขาย/เดือน" }, salesPerDay: { en: "Sales / day", th: "ยอดขาย/วัน" }, avgCustValue: { en: "Avg customer value", th: "มูลค่าเฉลี่ยต่อลูกค้า" }, spendPerHead: { en: "spend per head", th: "ค่าใช้จ่ายต่อคน" }, useHelpEstimate: { en: "use “Help me estimate”", th: "ใช้ “ช่วยประมาณให้หน่อย”" }, custPerDay: { en: "Customers / day", th: "ลูกค้า/วัน" }, seatsTimesTurns: { en: "seats × turns", th: "ที่นั่ง × รอบ" }, costsKicker: { en: "Financials · 3 of 4 — Costs", th: "การเงิน · 3 ใน 4 — ต้นทุน" }, costsTitle: { en: "What does each month cost to run?", th: "แต่ละเดือนมีต้นทุนดำเนินงานเท่าไร" }, costsLead: { en: "Your recurring monthly costs. Food cost moves with sales, so we set it as a percentage — the rest you can type or itemise.", th: "ต้นทุนรายเดือนที่เกิดซ้ำ ต้นทุนวัตถุดิบแปรผันตามยอดขาย จึงตั้งเป็นเปอร์เซ็นต์ — ส่วนที่เหลือพิมพ์หรือแจกแจงได้" }, operatingCost: { en: "Operating Cost", th: "ต้นทุนดำเนินงาน" }, operatingCostDesc: { en: "What it costs to run each month. Food moves with sales — set it as a share below — the rest you can type or itemise.", th: "ค่าใช้จ่ายในการดำเนินงานแต่ละเดือน ต้นทุนวัตถุดิบแปรผันตามยอดขาย — ตั้งเป็นสัดส่วนด้านล่าง — ส่วนที่เหลือพิมพ์หรือแจกแจงได้" }, foodDrink: { en: "Food & drink ", th: "อาหารและเครื่องดื่ม " }, foodDrinkSub: { en: "— at {sales} that's {food}/mo", th: "— ที่ยอดขาย {sales} คิดเป็น {food}/เดือน" }, healthyRange: { en: "✓ healthy range", th: "✓ อยู่ในเกณฑ์ที่เหมาะสม" }, healthy28to35: { en: "healthy 28–35%", th: "เกณฑ์ที่เหมาะสม 28-35%" }, totalMonthlyCost: { en: "Total monthly cost", th: "ต้นทุนรวมต่อเดือน" }, takeHomeAfterTax: { en: "Take-home after tax, each month", th: "กำไรสุทธิที่ได้ต่อเดือน หลังหักภาษี" }, shortfallAfterTax: { en: "Shortfall each month (after tax)", th: "ยอดขาดทุนต่อเดือน (หลังหักภาษี)" }, beforeTax: { en: "before tax: {x}", th: "ก่อนหักภาษี: {x}" }, variableCosts: { en: "Variable costs", th: "ต้นทุนแปรผัน" }, moveWithSales: { en: "move with sales", th: "แปรผันตามยอดขาย" }, fixedCosts: { en: "Fixed costs", th: "ต้นทุนคงที่" }, sameEveryMonth: { en: "same every month", th: "เท่าเดิมทุกเดือน" }, breakEvenMo: { en: "Break-even / mo", th: "จุดคุ้มทุน/เดือน" }, breakEvenDay: { en: "Break-even / day", th: "จุดคุ้มทุน/วัน" }, ebitdaMo: { en: "EBITDA / mo", th: "EBITDA/เดือน" }, marginPreTax: { en: "{pct} margin · pre-tax", th: "มาร์จิ้น {pct} · ก่อนภาษี" }, netProfitAfterTax: { en: "Net profit after tax", th: "กำไรสุทธิหลังภาษี" }, afterTaxMargin: { en: "{pct} after-tax margin", th: "มาร์จิ้นหลังภาษี {pct}" }, theVerdict: { en: "The verdict", th: "ผลประเมิน" }, netProfitMo: { en: "Net profit after tax / mo", th: "กำไรสุทธิหลังภาษี/เดือน" }, preTaxTaxesEst: { en: "pre-tax {x} · taxes est. {y}", th: "ก่อนภาษี {x} · ภาษีประมาณ {y}" }, netMargin: { en: "Net margin", th: "มาร์จิ้นสุทธิ" }, afterTaxMarginSub: { en: "after tax · profit ÷ net sales", th: "หลังภาษี · กำไร ÷ ยอดขายสุทธิ" }, breakEvenSales: { en: "Break-even sales", th: "ยอดขายจุดคุ้มทุน" }, perDayShort: { en: "≈ ฿{x}/day", th: "≈ ฿{x}/วัน" }, payback: { en: "Payback", th: "ระยะคืนทุน" }, paybackSub: { en: "after tax, to earn back investment", th: "หลังภาษี กว่าจะคืนทุน" }, toOpen: { en: "To open", th: "เพื่อเปิดร้าน" }, totalUpfront: { en: "total upfront", th: "รวมล่วงหน้าทั้งหมด" }, whereEvery100: { en: "Where every ฿100 of sales goes", th: "ทุกๆ ฿100 ของยอดขายไปที่ไหนบ้าง" }, every100Desc: { en: "Every cost plus your profit adds up to 100% of sales.", th: "ทุกต้นทุนรวมกับกำไรของคุณจะรวมกันเป็น 100% ของยอดขาย" }, bar: { en: "Bar", th: "แท่ง" }, donut: { en: "Donut", th: "วงกลม" }, netMarginDonut: { en: "Net margin", th: "มาร์จิ้นสุทธิ" }, profitKeep: { en: "Profit after tax — what you keep", th: "กำไรหลังภาษี — ส่วนที่คุณได้" }, monthlyLoss: { en: "Monthly loss (after tax)", th: "ขาดทุนต่อเดือน (หลังภาษี)" }, whatToWatch: { en: "What to watch", th: "สิ่งที่ควรจับตา" }, segFood: { en: "Food & drink", th: "อาหารและเครื่องดื่ม" }, segStaff: { en: "Staff wages", th: "ค่าแรงพนักงาน" }, segRent: { en: "Rent", th: "ค่าเช่า" }, segUtil: { en: "Utilities", th: "สาธารณูปโภค" }, segMkt: { en: "Marketing", th: "การตลาด" }, segMgmt: { en: "Management & systems", th: "ระบบบริหารจัดการ" }, segOther: { en: "Other", th: "อื่นๆ" }, segTax: { en: "Taxes & statutory", th: "ภาษีและเงินสมทบ" }, verdictNone: { en: "Awaiting numbers", th: "รอตัวเลข" }, verdictLoss: { en: "Losing money", th: "ขาดทุน" }, verdictRisky: { en: "Risky", th: "เสี่ยง" }, verdictOk: { en: "Workable", th: "พอไปได้" }, verdictHealthy: { en: "Healthy", th: "แข็งแรง" }, verdictStrong: { en: "Strong", th: "แข็งแกร่ง" }, blurbEmpty: { en: "Enter your sales and costs to see how the plan holds up.", th: "กรอกยอดขายและต้นทุนเพื่อดูว่าแผนนี้ไปรอดไหม" }, blurbLoss: { en: "After costs and taxes you'd be short {x} every month. Raise sales, lift prices, or trim fixed costs to clear break-even.", th: "หลังหักต้นทุนและภาษีคุณจะขาดทุน {x} ทุกเดือน เพิ่มยอดขาย ขึ้นราคา หรือลดต้นทุนคงที่เพื่อให้ถึงจุดคุ้มทุน" }, blurbThin: { en: "It works, but the cushion is thin after tax. A small dip in sales could wipe out the profit — keep food and staff costs tight.", th: "พอไปได้ แต่กันชนหลังภาษีค่อนข้างบาง ยอดขายลดนิดหน่อยก็อาจทำให้กำไรหายไป ควบคุมต้นทุนวัตถุดิบและค่าแรงให้แน่น" }, blurbGood: { en: "This plan stands on its own — after tax. You clear break-even at {be} of sales and earn the investment back in {pb}.", th: "แผนนี้ไปรอดได้ด้วยตัวเอง — หลังหักภาษีแล้ว คุณจะถึงจุดคุ้มทุนที่ยอดขาย {be} และคืนทุนได้ภายใน {pb}" }, invRenoLabel: { en: "Renovation & fit-out", th: "การรีโนเวทและตกแต่ง" }, invRenoHint: { en: "Building work, interior, signage", th: "งานก่อสร้าง ตกแต่งภายใน ป้าย" }, invEquipLabel: { en: "Kitchen equipment", th: "อุปกรณ์ครัว" }, invEquipHint: { en: "Stoves, fridges, prep, small wares", th: "เตา ตู้เย็น อุปกรณ์เตรียมอาหาร เครื่องครัวเล็ก" }, invFurnLabel: { en: "Furniture & décor", th: "เฟอร์นิเจอร์และของตกแต่ง" }, invFurnHint: { en: "Tables, chairs, lighting", th: "โต๊ะ เก้าอี้ ไฟ" }, invDepositLabel: { en: "Rent deposit", th: "เงินมัดจำค่าเช่า" }, invDepositHint: { en: "Usually 2–3 months upfront", th: "โดยทั่วไป 2-3 เดือนล่วงหน้า" }, invLicLabel: { en: "Licenses & permits", th: "ใบอนุญาตและการขึ้นทะเบียน" }, invLicHint: { en: "Registration, food & alcohol permits", th: "จดทะเบียน ใบอนุญาตอาหารและเครื่องดื่มแอลกอฮอล์" }, invMgmtLabel: { en: "Management & systems", th: "ระบบบริหารจัดการ" }, invMgmtHint: { en: "POS, accounting, website, insurance", th: "POS บัญชี เว็บไซต์ ประกัน" }, invInvLabel: { en: "Opening inventory", th: "สต๊อกเปิดร้าน" }, invInvHint: { en: "First stock of food & drink", th: "วัตถุดิบชุดแรก" }, invReserveLabel: { en: "Cash reserve", th: "เงินสำรอง" }, invReserveHint: { en: "Buffer for the slow first months", th: "กันชนสำหรับช่วงเริ่มต้นที่ยังไม่คล่องตัว" }, costStaffLabel: { en: "Staff wages", th: "ค่าแรงพนักงาน" }, costStaffHint: { en: "All salaries, including yourself", th: "เงินเดือนทั้งหมด รวมของคุณเอง" }, costRentLabel: { en: "Rent", th: "ค่าเช่า" }, costRentHint: { en: "Monthly lease for the space", th: "ค่าเช่าพื้นที่รายเดือน" }, costUtilLabel: { en: "Utilities", th: "ค่าสาธารณูปโภค" }, costUtilHint: { en: "Electric, water, gas, internet", th: "ไฟ น้ำ แก๊ส อินเทอร์เน็ต" }, costMktLabel: { en: "Marketing", th: "การตลาด" }, costMktHint: { en: "Ads, promos, social media", th: "โฆษณา โปรโมชั่น โซเชียลมีเดีย" }, costMgmtLabel: { en: "Management & systems", th: "ระบบบริหารจัดการ" }, costMgmtHint: { en: "Insurance, accounting, POS, subscriptions", th: "ประกัน บัญชี POS ค่าสมัครสมาชิก" }, costOtherLabel: { en: "Other", th: "อื่นๆ" }, costOtherHint: { en: "Delivery platform fees, supplies, misc", th: "ค่าธรรมเนียมแพลตฟอร์มเดลิเวอรี่ ของใช้ เบ็ดเตล็ด" }, costTaxLabel: { en: "Taxes & statutory", th: "ภาษีและเงินสมทบ" }, costTaxHint: { en: "VAT, corporate tax, social security — add each as a line", th: "VAT ภาษีนิติบุคคล ประกันสังคม — เพิ่มทีละรายการ" }, ofSalesShare: { en: "{pct} of sales", th: "{pct} ของยอดขาย" }, continue: { en: "Continue →", th: "ถัดไป →" }, seeResults: { en: "See my results →", th: "ดูผลลัพธ์ของฉัน →" }, }, fs: { heading: { en: "Financial summary", th: "สรุปการเงิน" }, desc: { en: "The figures an investor or accountant would check — every one comes from what you entered.", th: "ตัวเลขที่นักลงทุนหรือนักบัญชีจะตรวจสอบ — ทุกตัวมาจากสิ่งที่คุณกรอกไว้" }, capital: { en: "Capital", th: "เงินลงทุน" }, monthlyEconomics: { en: "Monthly economics", th: "เศรษฐศาสตร์รายเดือน" }, taxesTakeHome: { en: "Taxes & take-home", th: "ภาษีและกำไรสุทธิ" }, customers: { en: "Customers", th: "ลูกค้า" }, totalCapex: { en: "Total CapEx", th: "เงินลงทุนรวม" }, totalCapexSub: { en: "build-out, equipment, furniture, licences, systems", th: "ก่อสร้าง อุปกรณ์ เฟอร์นิเจอร์ ใบอนุญาต ระบบ" }, capexPerSqm: { en: "CapEx per m²", th: "เงินลงทุนต่อตร.ม." }, ofShopArea: { en: "of shop area", th: "ของพื้นที่ร้าน" }, addShopM2: { en: "add shop m² in step 1", th: "เพิ่มพื้นที่ร้าน (ตร.ม.) ในขั้นตอนที่ 1" }, kitchenCostPerSqm: { en: "Kitchen cost per m²", th: "ต้นทุนครัวต่อตร.ม." }, equipDivKitchen: { en: "equipment ÷ kitchen area", th: "อุปกรณ์ ÷ พื้นที่ครัว" }, addKitchenM2: { en: "add kitchen m² in step 1", th: "เพิ่มพื้นที่ครัว (ตร.ม.) ในขั้นตอนที่ 1" }, operatingReserve: { en: "Operating reserve", th: "เงินสำรองดำเนินงาน" }, monthsFixedCovered: { en: "months of fixed costs covered", th: "จำนวนเดือนที่ต้นทุนคงที่ครอบคลุม" }, totalCapitalRequired: { en: "Total capital required", th: "เงินทุนรวมที่ต้องใช้" }, totalVariableCosts: { en: "Total variable costs", th: "ต้นทุนแปรผันรวม" }, foodDrinkPct: { en: "food & drink · {pct}", th: "อาหารและเครื่องดื่ม · {pct}" }, totalFixedCosts: { en: "Total fixed costs", th: "ต้นทุนคงที่รวม" }, fixedCostsSub: { en: "staff, rent, utilities, marketing, systems, other", th: "ค่าแรง ค่าเช่า สาธารณูปโภค การตลาด ระบบ อื่นๆ" }, breakEvenMonthly: { en: "Break-even (monthly)", th: "จุดคุ้มทุน (รายเดือน)" }, breakEvenSalesSub: { en: "sales needed to cover all costs", th: "ยอดขายที่ต้องใช้ครอบคลุมต้นทุนทั้งหมด" }, breakEvenDaily: { en: "Break-even (daily)", th: "จุดคุ้มทุน (รายวัน)" }, ebitdaMonth: { en: "EBITDA / month", th: "EBITDA / เดือน" }, ebitdaSub: { en: "profit before tax & depreciation", th: "กำไรก่อนหักภาษีและค่าเสื่อม" }, taxesStatutoryMonth: { en: "Taxes & statutory / month", th: "ภาษีและเงินสมทบ / เดือน" }, taxesSub: { en: "VAT, corporate tax & social security — your monthly set-aside", th: "VAT ภาษีนิติบุคคล และประกันสังคม — เงินที่ต้องกันไว้ต่อเดือน" }, netProfitAfterTax: { en: "Net profit after tax", th: "กำไรสุทธิหลังภาษี" }, takeHomeNumber: { en: "the take-home number", th: "ตัวเลขที่ได้จริง" }, avgCustValue: { en: "Avg customer value", th: "มูลค่าเฉลี่ยต่อลูกค้า" }, spendPerHead: { en: "spend per head", th: "ค่าใช้จ่ายต่อคน" }, useHelpEstimate: { en: "use “Help me estimate” in Sales", th: "ใช้ “ช่วยประมาณให้หน่อย” ในขั้นตอนยอดขาย" }, effCustDay: { en: "Effective customers / day", th: "ลูกค้าเฉลี่ย/วัน" }, seatsTurns: { en: "seats × table turns", th: "ที่นั่ง × รอบโต๊ะ" }, }, inv: { itemized: { en: " item{s} itemised", th: " รายการที่แจกแจงแล้ว" }, autoSummed: { en: "auto-summed", th: "รวมอัตโนมัติ" }, itemHeader: { en: "Item", th: "รายการ" }, qtyHeader: { en: "Qty", th: "จำนวน" }, priceHeader: { en: "Price each", th: "ราคาต่อชิ้น" }, totalHeader: { en: "Total", th: "รวม" }, addItem: { en: "+ Add an item…", th: "+ เพิ่มรายการ…" }, typeOwn: { en: "Type my own…", th: "พิมพ์เอง…" }, notSureTotal: { en: "Not sure of the total? Add items one by one — it adds up for you and doubles as a checklist of what you've covered.", th: "ไม่แน่ใจยอดรวม? ใส่ทีละรายการ ระบบจะรวมให้อัตโนมัติ และเป็นเช็คลิสต์ให้ดูว่าคุณครอบคลุมอะไรไปแล้วบ้าง" }, backToSingle: { en: "Back to a single amount", th: "กลับไปใส่เป็นยอดเดียว" }, subtotal: { en: "Subtotal ", th: "ยอดรวมย่อย " }, itemNamePh: { en: "Item name", th: "ชื่อรายการ" }, }, pitch: { kicker: { en: "Step 03 — Pitch Summary Dashboard", th: "ขั้นตอนที่ 03 — แดชบอร์ดสรุปนำเสนอ" }, title: { en: "Your plan, on one page.", th: "แผนของคุณในหน้าเดียว" }, lead: { en: "A read-only summary an investor or bank can read in two minutes — built from steps 01 and 02.", th: "สรุปแบบอ่านอย่างเดียวที่นักลงทุนหรือธนาคารอ่านจบใน 2 นาที — สร้างจากขั้นตอนที่ 01 และ 02" }, lead2: { en: "A read-only summary an investor or bank can read in two minutes — every figure comes from steps 01 and 02.", th: "สรุปแบบอ่านอย่างเดียวที่นักลงทุนหรือธนาคารอ่านจบใน 2 นาที — ทุกตัวเลขมาจากขั้นตอนที่ 01 และ 02" }, almostThere: { en: "Almost there.", th: "ใกล้เสร็จแล้ว" }, emptyBase: { en: "The pitch summary assembles itself from your first two steps — nothing to fill in here.", th: "หน้าสรุปนำเสนอจะรวบรวมข้อมูลจากสองขั้นตอนแรกให้อัตโนมัติ — ไม่ต้องกรอกอะไรที่นี่" }, emptyBoth: { en: " Start with your business model, then run the numbers.", th: " เริ่มจากโมเดลธุรกิจ แล้วค่อยคำนวณตัวเลข" }, emptyIdea: { en: " Your numbers are in — describe the business model and this page writes itself.", th: " ตัวเลขของคุณพร้อมแล้ว — อธิบายโมเดลธุรกิจแล้วหน้านี้จะเขียนให้เอง" }, emptyFin: { en: " Your concept is in — run the numbers and this page writes itself.", th: " แนวคิดของคุณพร้อมแล้ว — คำนวณตัวเลขแล้วหน้านี้จะเขียนให้เอง" }, goToIdea: { en: "Go to Business Model →", th: "ไปที่โมเดลธุรกิจ →" }, goToFin: { en: "Go to Financial Feasibility →", th: "ไปที่ความเป็นไปได้ทางการเงิน →" }, untitledConcept: { en: "Untitled concept", th: "แนวคิดยังไม่มีชื่อ" }, investmentVerdict: { en: "Investment verdict", th: "ผลประเมินการลงทุน" }, fromAfterTaxMargin: { en: "from the after-tax margin", th: "จากมาร์จิ้นหลังภาษี" }, theAsk: { en: "The ask", th: "สิ่งที่ขอ" }, totalToOpen: { en: "Total to open", th: "รวมค่าใช้จ่ายเปิดร้าน" }, oneTimeInvestment: { en: "one-time investment", th: "เงินลงทุนครั้งเดียว" }, profitMoAfterTax: { en: "Profit / mo (after tax)", th: "กำไร/เดือน (หลังภาษี)" }, preTax: { en: "pre-tax {x}", th: "ก่อนภาษี {x}" }, netMargin: { en: "Net margin", th: "มาร์จิ้นสุทธิ" }, afterTax: { en: "after tax", th: "หลังภาษี" }, breakEvenSales: { en: "Break-even sales", th: "ยอดขายจุดคุ้มทุน" }, perDayShort: { en: "≈ ฿{x}/day", th: "≈ ฿{x}/วัน" }, payback: { en: "Payback", th: "ระยะคืนทุน" }, theConcept: { en: "The concept", th: "แนวคิด" }, builtFor: { en: "Built for {who}", th: "สร้างขึ้นสำหรับ{who}" }, inSetting: { en: " in a {loc} setting", th: " ในทำเลแบบ{loc}" }, atPrices: { en: ", at {band} prices ({range})", th: " ในระดับราคา{band} ({range})" }, theFormat: { en: "The format: {seatsPart}{sqmPart}{svc} — {dine}% dine-in, {del}% delivery, {take}% takeaway.", th: "รูปแบบร้าน: {seatsPart}{sqmPart}{svc} — นั่งทาน {dine}%, เดลิเวอรี่ {del}%, ซื้อกลับ {take}%" }, seatsCount: { en: "{n} seats", th: "{n} ที่นั่ง" }, noSeating: { en: "no seating", th: "ไม่มีที่นั่ง" }, onSqm: { en: " on {n} m²", th: " พื้นที่ {n} ตร.ม." }, theDifferentiator: { en: "The differentiator", th: "จุดต่าง" }, theNumbersMonthly: { en: "The numbers, monthly", th: "ตัวเลขรายเดือน" }, seeFullFinancials: { en: "See full financials →", th: "ดูรายละเอียดการเงินทั้งหมด →" }, sales: { en: "Sales", th: "ยอดขาย" }, grossShownNet: { en: "฿{x} gross · shown net of 7% VAT", th: "฿{x} ก่อนหัก · แสดงหลังหัก VAT 7%" }, totalRevenue: { en: "total revenue", th: "รายได้รวม" }, foodDrinkCost: { en: "Food & drink cost", th: "ต้นทุนอาหารและเครื่องดื่ม" }, ofSales: { en: "{pct} of sales", th: "{pct} ของยอดขาย" }, fixedOperatingCosts: { en: "Fixed operating costs", th: "ต้นทุนดำเนินงานคงที่" }, fixedOperatingSub: { en: "staff, rent, utilities, marketing, systems, other", th: "ค่าแรง ค่าเช่า สาธารณูปโภค การตลาด ระบบ อื่นๆ" }, taxesStatutoryEst: { en: "Taxes & statutory (est.)", th: "ภาษีและเงินสมทบ (ประมาณ)" }, taxesSetAside: { en: "your monthly tax set-aside", th: "เงินภาษีที่กันไว้ต่อเดือน" }, netProfitAfterTax: { en: "Net profit after tax", th: "กำไรสุทธิหลังภาษี" }, marginLabel: { en: "{pct} margin", th: "มาร์จิ้น {pct}" }, ebitdaPreTax: { en: "EBITDA (pre-tax)", th: "EBITDA (ก่อนภาษี)" }, capexBuildSystems: { en: "CapEx — build & systems", th: "เงินลงทุน — ก่อสร้างและระบบ" }, capexSub: { en: "renovation, equipment, furniture, licences", th: "รีโนเวท อุปกรณ์ เฟอร์นิเจอร์ ใบอนุญาต" }, depositsStockReserve: { en: "Deposits, stock & reserve", th: "มัดจำ สต๊อก และเงินสำรอง" }, totalCapitalRequired: { en: "Total capital required", th: "เงินทุนรวมที่ต้องใช้" }, whatToWatch: { en: "What to watch", th: "สิ่งที่ควรจับตา" }, whatToWatchDesc: { en: "An honest plan names its own risks — these come from the reality check in step 01.", th: "แผนที่ซื่อตรงต้องระบุความเสี่ยงของตัวเอง — รายการนี้มาจากการตรวจสอบความเป็นจริงในขั้นตอนที่ 01" }, noFlags: { en: "No open flags — the concept, price, rent expectation and capital hold together at these numbers.", th: "ไม่มีข้อสังเกต — แนวคิด ราคา ค่าเช่าที่คาดไว้ และเงินทุนสอดคล้องกันดีที่ตัวเลขนี้" }, testFirst: { en: "Test first", th: "ทดสอบก่อน" }, disclaimer: { en: "All figures are the owner's planning estimates, not audited numbers. Tax lines follow Thai VAT and SME corporate-tax rules — confirm with a Thai accountant.", th: "ตัวเลขทั้งหมดเป็นค่าประมาณการของเจ้าของ ไม่ใช่ตัวเลขที่ผ่านการตรวจสอบบัญชี รายการภาษีอ้างอิงกฎ VAT และภาษีนิติบุคคล SME ของไทย — ควรตรวจสอบกับนักบัญชีอีกครั้ง" }, exportPlan: { en: "Export plan (JSON)", th: "ส่งออกแผน (JSON)" }, printPdf: { en: "Print / Save as PDF", th: "พิมพ์ / บันทึกเป็น PDF" }, }, }; const OPT = { "QSR": "ร้านอาหารบริการด่วน", "Café": "คาเฟ่", "Casual dining": "แคชชวลไดนิ่ง", "Fine dining": "ไฟน์ไดนิ่ง", "Bar": "บาร์", "Cloud kitchen": "คลาวด์คิทเช่น", "Bakery": "เบเกอรี่", "Buffet": "บุฟเฟ่ต์", "Thai": "ไทย", "Isaan": "อีสาน", "Japanese": "ญี่ปุ่น", "Ramen": "ราเมง", "Sushi": "ซูชิ", "Korean": "เกาหลี", "Chinese": "จีน", "Italian": "อิตาเลียน", "Pizza": "พิซซ่า", "Western": "ตะวันตก", "Seafood": "ซีฟู้ด", "Fusion": "ฟิวชั่น", "Vegan": "วีแกน", "Students": "นักเรียน/นักศึกษา", "Office workers": "พนักงานออฟฟิศ", "Families": "ครอบครัว", "Tourists": "นักท่องเที่ยว", "Expats": "ชาวต่างชาติ", "Hi-so": "ไฮโซ", "Shopping mall": "ห้างสรรพสินค้า", "Street / shophouse": "ริมถนน/ตึกแถว", "Community mall": "คอมมูนิตี้มอลล์", "CBD office": "ย่านธุรกิจ", "Tourist zone": "แหล่งท่องเที่ยว", "Campus": "ใกล้มหาวิทยาลัย", "Counter service": "บริการหน้าเคาน์เตอร์", "Table service": "เสิร์ฟที่โต๊ะ", "Self service": "บริการตัวเอง", "Delivery only": "เดลิเวอรี่อย่างเดียว", "First-timer": "มือใหม่", "Worked in F&B": "เคยทำงานร้านอาหาร", "Opened before": "เคยเปิดร้านมาก่อน", "Owner-operator": "เจ้าของที่บริหารเอง", "Investor": "นักลงทุน", "Few": "น้อย", "Some": "ปานกลาง", "Many": "เยอะ", "Budget": "ประหยัด", "Mid": "ปานกลาง", "Premium": "พรีเมียม", "Luxury": "หรูหรา", }; const HEARD_TH = { "Category": "ประเภทร้าน", "Cuisine": "ประเภทอาหาร", "Name": "ชื่อร้าน", "Tagline": "แท็กไลน์", "Target customer": "กลุ่มลูกค้าเป้าหมาย", "Price band": "ระดับราคา", "Channel mix": "สัดส่วนช่องทาง", "Seats": "ที่นั่ง", "Size": "ขนาด", "Service": "การบริการ", "Location type": "ประเภททำเล", "Your edge": "จุดเด่น", "Experience": "ประสบการณ์", "Capital": "เงินทุน", "Involvement": "บทบาท", }; function optLabel(lang, v) { if (lang !== "th") return v; return OPT[v] || v; } function heardLabel(lang, k) { if (lang !== "th") return k; return HEARD_TH[k] || k; } const LangContext = React.createContext(null); function useLang() { return React.useContext(LangContext); } function LanguageProvider({ children }) { const [lang, setLangState] = React.useState(() => { try { return localStorage.getItem(LANG_KEY) || "th"; } catch (e) { return "th"; } }); const setLang = React.useCallback((l) => { setLangState(l); try { localStorage.setItem(LANG_KEY, l); } catch (e) {} }, []); const t = React.useCallback((path, vars) => { const parts = path.split("."); let node = T; for (const p of parts) node = node && node[p]; let str = node ? (node[lang] || node.en || path) : path; if (vars) { for (const k in vars) str = str.split("{" + k + "}").join(vars[k]); } return str; }, [lang]); const value = React.useMemo(() => ({ lang, setLang, t }), [lang, setLang, t]); return {children}; } function LanguageToggle() { const { lang, setLang } = useLang(); return (
{["th", "en"].map((l) => ( ))}
); } Object.assign(window, { useLang, LanguageProvider, LanguageToggle, optLabel, heardLabel });