Ship 23 transactional templates, shared brand tokens/logo, preview UI, render API, CHANGELOG, and docs for Ecom/Admin/B2B consumers. Co-authored-by: Cursor <cursoragent@cursor.com>
413 lines
18 KiB
TypeScript
413 lines
18 KiB
TypeScript
import type { Locale } from '../types';
|
||
|
||
export const templateCopy = {
|
||
"welcome": {
|
||
"en": {
|
||
"preview": "Welcome to Gishen Pharmacy",
|
||
"heading": "Welcome, {userName}",
|
||
"body1": "Your Gishen Pharmacy account is ready. Order medicines, manage prescriptions, and track deliveries from one place.",
|
||
"body2": "Start by browsing the shop or linking your organisation benefits if your employer covers pharmacy care.",
|
||
"cta": "Open Gishen",
|
||
"closing": "We’re glad you’re here."
|
||
},
|
||
"am": {
|
||
"preview": "እንኳን ወደ ጊሼን ፋርማሲ በደህና መጡ",
|
||
"heading": "እንኳን ደህና መጡ፣ {userName}",
|
||
"body1": "የጊሼን ፋርማሲ መለያዎ ዝግጁ ነው። መድሃኒት ይዘዙ፣ የመድሃኒት ማዘዣዎችን ያስተዳድሩ እና ማድረሶችን ከአንድ ቦታ ይከታተሉ።",
|
||
"body2": "ሱቁን በመድረስ ወይም አሰሪዎ የፋርማሲ ጥቅማጥቅሞች ካሉ መገልገያዎችን በማገናኘት ይጀምሩ።",
|
||
"cta": "ጊሼንን ክፈት",
|
||
"closing": "እዚህ ስላሉ ደስ ብሎናል።"
|
||
}
|
||
},
|
||
"password-reset": {
|
||
"en": {
|
||
"preview": "Reset your Gishen password",
|
||
"heading": "Reset your password",
|
||
"body1": "We received a request to reset the password for {userName}. This link expires in 60 minutes.",
|
||
"cta": "Choose a new password",
|
||
"body2": "If you did not request this, you can ignore this email. Your password will stay the same.",
|
||
"banner": "Security notice"
|
||
},
|
||
"am": {
|
||
"preview": "የጊሼን የይለፍ ቃልዎን ያደሱ",
|
||
"heading": "የይለፍ ቃልዎን ያድሱ",
|
||
"body1": "ለ{userName} የይለፍ ቃል ማደስ ጥያቄ ደርሶናል። ይህ አገናኝ በ60 ደቂቃ ውስጥ ጊዜው ያልፍበታል።",
|
||
"cta": "አዲስ የይለፍ ቃል ይምረጡ",
|
||
"body2": "ይህን ካልጠየቁ ይህን ኢሜይል ችላ ማለት ይችላሉ። የይለፍ ቃልዎ አይለወጥም።",
|
||
"banner": "የደህንነት ማስታወቂያ"
|
||
}
|
||
},
|
||
"email-verify": {
|
||
"en": {
|
||
"preview": "Verify your email for Gishen",
|
||
"heading": "Confirm your email",
|
||
"body1": "Hi {userName}, please verify {email} to activate your Gishen Pharmacy account.",
|
||
"cta": "Verify email",
|
||
"body2": "This helps us keep prescriptions and order updates secure."
|
||
},
|
||
"am": {
|
||
"preview": "ለጊሼን ኢሜይልዎን ያረጋግጡ",
|
||
"heading": "ኢሜይልዎን ያረጋግጡ",
|
||
"body1": "ሰላም {userName}፣ የጊሼን ፋርማሲ መለያዎን ለማንቃት {email}ን እባክዎ ያረጋግጡ።",
|
||
"cta": "ኢሜይል አረጋግጥ",
|
||
"body2": "ይህ የመድሃኒት ማዘዣዎችን እና የትዕዛዝ ዝመናዎችን ደህንነቱ የተጠበቀ ያደርገዋል።"
|
||
}
|
||
},
|
||
"user-invite": {
|
||
"en": {
|
||
"preview": "You’re invited to Gishen",
|
||
"heading": "Join {orgName} on Gishen",
|
||
"body1": "{inviterName} invited you to access Gishen Pharmacy as {role}.",
|
||
"cta": "Accept invitation",
|
||
"body2": "The invite expires in 7 days."
|
||
},
|
||
"am": {
|
||
"preview": "ወደ ጊሼን ተጋብዘዋል",
|
||
"heading": "በጊሼን ላይ {orgName}ን ይቀላቀሉ",
|
||
"body1": "{inviterName} እንደ {role} ወደ ጊሼን ፋርማሲ እንዲገቡ ጋብዘዎታል።",
|
||
"cta": "ግብዣ ተቀበል",
|
||
"body2": "ግብዣው በ7 ቀናት ውስጥ ጊዜው ያልፍበታል።"
|
||
}
|
||
},
|
||
"order-confirmation": {
|
||
"en": {
|
||
"preview": "Order {orderId} confirmed",
|
||
"heading": "Order confirmed",
|
||
"body1": "Thanks {userName}. We received order {orderId} and the pharmacy team is reviewing it.",
|
||
"orderLabel": "Order",
|
||
"totalLabel": "Total",
|
||
"cta": "Track order",
|
||
"banner": "We’ll email you when packing starts."
|
||
},
|
||
"am": {
|
||
"preview": "ትዕዛዝ {orderId} ተረጋግጧል",
|
||
"heading": "ትዕዛዝ ተረጋግጧል",
|
||
"body1": "አመሰግናለን {userName}። ትዕዛዝ {orderId}ን ተቀብለናል እና የፋርማሲ ቡድኑ እየገመገመው ነው።",
|
||
"orderLabel": "ትዕዛዝ",
|
||
"totalLabel": "ድምር",
|
||
"cta": "ትዕዛዝን ተከታተል",
|
||
"banner": "ማሸግ ሲጀምር በኢሜይል እናሳውቅዎታለን።"
|
||
}
|
||
},
|
||
"order-packing": {
|
||
"en": {
|
||
"preview": "Order {orderId} is being packed",
|
||
"heading": "Packing your order",
|
||
"body1": "Hi {userName}, pharmacists at {branchName} are preparing order {orderId}.",
|
||
"orderLabel": "Order",
|
||
"totalLabel": "Total",
|
||
"cta": "View status",
|
||
"banner": "Status: Packing"
|
||
},
|
||
"am": {
|
||
"preview": "ትዕዛዝ {orderId} እየታሸገ ነው",
|
||
"heading": "ትዕዛዝዎን እያሸግን ነው",
|
||
"body1": "ሰላም {userName}፣ በ{branchName} ያሉ ፋርማሲስቶች ትዕዛዝ {orderId}ን እያዘጋጁ ነው።",
|
||
"orderLabel": "ትዕዛዝ",
|
||
"totalLabel": "ድምር",
|
||
"cta": "ሁኔታ ይመልከቱ",
|
||
"banner": "ሁኔታ፡ እየታሸገ"
|
||
}
|
||
},
|
||
"order-out-for-delivery": {
|
||
"en": {
|
||
"preview": "Order {orderId} is out for delivery",
|
||
"heading": "Out for delivery",
|
||
"body1": "Good news {userName}: order {orderId} left {branchName} with rider {riderName}.",
|
||
"orderLabel": "Order",
|
||
"totalLabel": "Total",
|
||
"cta": "Track delivery",
|
||
"banner": "Estimated arrival: {eta}"
|
||
},
|
||
"am": {
|
||
"preview": "ትዕዛዝ {orderId} ለማድረስ በመንገድ ላይ ነው",
|
||
"heading": "ለማድረስ በመንገድ ላይ",
|
||
"body1": "ደስ የሚል ዜና {userName}፡ ትዕዛዝ {orderId} ከ{branchName} ከአድራሽ {riderName} ጋር ወጥቷል።",
|
||
"orderLabel": "ትዕዛዝ",
|
||
"totalLabel": "ድምር",
|
||
"cta": "ማድረስን ተከታተል",
|
||
"banner": "የሚገመት መድረሻ፡ {eta}"
|
||
}
|
||
},
|
||
"order-delivered": {
|
||
"en": {
|
||
"preview": "Order {orderId} delivered",
|
||
"heading": "Delivered",
|
||
"body1": "Order {orderId} was delivered to {userName}. Thank you for choosing Gishen Pharmacy.",
|
||
"orderLabel": "Order",
|
||
"totalLabel": "Total",
|
||
"cta": "Reorder",
|
||
"banner": "Delivered successfully"
|
||
},
|
||
"am": {
|
||
"preview": "ትዕዛዝ {orderId} ተደርሷል",
|
||
"heading": "ተደርሷል",
|
||
"body1": "ትዕዛዝ {orderId} ለ{userName} ተደርሷል። ጊሼን ፋርማሲን ስለመረጡ እናመሰግናለን።",
|
||
"orderLabel": "ትዕዛዝ",
|
||
"totalLabel": "ድምር",
|
||
"cta": "ድጋሚ እዘዝ",
|
||
"banner": "በተሳካ ሁኔታ ተደርሷል"
|
||
}
|
||
},
|
||
"order-cancelled": {
|
||
"en": {
|
||
"preview": "Order {orderId} cancelled",
|
||
"heading": "Order cancelled",
|
||
"body1": "Hi {userName}, order {orderId} was cancelled. Reason: {reason}.",
|
||
"orderLabel": "Order",
|
||
"totalLabel": "Total",
|
||
"cta": "Browse shop",
|
||
"banner": "No payment was captured for this order."
|
||
},
|
||
"am": {
|
||
"preview": "ትዕዛዝ {orderId} ተሰርዟል",
|
||
"heading": "ትዕዛዝ ተሰርዟል",
|
||
"body1": "ሰላም {userName}፣ ትዕዛዝ {orderId} ተሰርዟል። ምክንያት፡ {reason}።",
|
||
"orderLabel": "ትዕዛዝ",
|
||
"totalLabel": "ድምር",
|
||
"cta": "ሱቁን ይመልከቱ",
|
||
"banner": "ለዚህ ትዕዛዝ ክፍያ አልተያዘም።"
|
||
}
|
||
},
|
||
"org-invite": {
|
||
"en": {
|
||
"preview": "Invite to {orgName} on Gishen B2B",
|
||
"heading": "Organisation invitation",
|
||
"body1": "{inviterName} invited you to join {orgName} on the Gishen B2B portal as {role}.",
|
||
"cta": "Join organisation",
|
||
"body2": "You’ll be able to manage members, packages, and covered pharmacy spend."
|
||
},
|
||
"am": {
|
||
"preview": "በጊሼን B2B ላይ ወደ {orgName} ግብዣ",
|
||
"heading": "የድርጅት ግብዣ",
|
||
"body1": "{inviterName} እንደ {role} በጊሼን B2B ፖርታል ላይ {orgName}ን እንዲቀላቀሉ ጋብዘዎታል።",
|
||
"cta": "ድርጅትን ይቀላቀሉ",
|
||
"body2": "አባላትን፣ ጥቅሎችን እና የተሸፈነ የፋርማሲ ወጪን ማስተዳደር ይችላሉ።"
|
||
}
|
||
},
|
||
"join-code": {
|
||
"en": {
|
||
"preview": "Your Gishen join code",
|
||
"heading": "Join with this code",
|
||
"body1": "Hi {userName}, use this code to join {orgName} on Gishen B2B.",
|
||
"cta": "Enter join code",
|
||
"banner": "Code: {joinCode}"
|
||
},
|
||
"am": {
|
||
"preview": "የጊሼን የመቀላቀያ ኮድዎ",
|
||
"heading": "በዚህ ኮድ ይቀላቀሉ",
|
||
"body1": "ሰላም {userName}፣ በጊሼን B2B ላይ {orgName}ን ለመቀላቀል ይህን ኮድ ይጠቀሙ።",
|
||
"cta": "የመቀላቀያ ኮድ አስገባ",
|
||
"banner": "ኮድ፡ {joinCode}"
|
||
}
|
||
},
|
||
"approval-needed": {
|
||
"en": {
|
||
"preview": "Approval needed for {requestType}",
|
||
"heading": "Action required",
|
||
"body1": "Hi {approverName}, {requesterName} submitted a {requestType} that needs your approval for {orgName}.",
|
||
"cta": "Review request",
|
||
"banner": "Pending finance / HR approval"
|
||
},
|
||
"am": {
|
||
"preview": "ለ{requestType} ማጽደቅ ያስፈልጋል",
|
||
"heading": "እርምጃ ያስፈልጋል",
|
||
"body1": "ሰላም {approverName}፣ {requesterName} ለ{orgName} ማጽደቅ የሚያስፈልገውን {requestType} አስገብቷል።",
|
||
"cta": "ጥያቄን ይገምግሙ",
|
||
"banner": "የፋይናንስ / HR ማጽደቅ በመጠባበቅ ላይ"
|
||
}
|
||
},
|
||
"statement-ready": {
|
||
"en": {
|
||
"preview": "Statement ready for {periodLabel}",
|
||
"heading": "Statement ready",
|
||
"body1": "Hi {userName}, the pharmacy benefits statement for {orgName} ({periodLabel}) is ready.",
|
||
"cta": "Download statement",
|
||
"banner": "Amount due: {amountDue}"
|
||
},
|
||
"am": {
|
||
"preview": "ለ{periodLabel} መግለጫ ዝግጁ ነው",
|
||
"heading": "መግለጫ ዝግጁ ነው",
|
||
"body1": "ሰላም {userName}፣ የ{orgName} የፋርማሲ ጥቅማጥቅም መግለጫ ({periodLabel}) ዝግጁ ነው።",
|
||
"cta": "መግለጫ አውርድ",
|
||
"banner": "የሚከፈል መጠን፡ {amountDue}"
|
||
}
|
||
},
|
||
"credit-alert": {
|
||
"en": {
|
||
"preview": "Credit alert for {orgName}",
|
||
"heading": "Credit utilisation alert",
|
||
"body1": "Hi {userName}, {orgName} has used {usedPercent}% of its pharmacy credit limit.",
|
||
"banner": "Available credit: {availableCredit}",
|
||
"cta": "View finance dashboard",
|
||
"body2": "Contact your Gishen account manager if you need a limit review."
|
||
},
|
||
"am": {
|
||
"preview": "ለ{orgName} የክሬዲት ማስጠንቀቂያ",
|
||
"heading": "የክሬዲት አጠቃቀም ማስጠንቀቂያ",
|
||
"body1": "ሰላም {userName}፣ {orgName} የፋርማሲ ክሬዲት ገደቡን {usedPercent}% ተጠቅሟል።",
|
||
"banner": "ያለ ክሬዲት፡ {availableCredit}",
|
||
"cta": "የፋይናንስ ዳሽቦርድ ይመልከቱ",
|
||
"body2": "የገደብ ግምገማ ካስፈለገዎት የጊሼን አካውንት ማኔጀርዎን ያግኙ።"
|
||
}
|
||
},
|
||
"organisation-verified": {
|
||
"en": {
|
||
"preview": "{orgName} is verified",
|
||
"heading": "Organisation verified",
|
||
"body1": "Great news {userName}: {orgName} passed Gishen verification and can now use B2B benefits features.",
|
||
"cta": "Open B2B portal",
|
||
"banner": "Verification complete"
|
||
},
|
||
"am": {
|
||
"preview": "{orgName} ተረጋግጧል",
|
||
"heading": "ድርጅት ተረጋግጧል",
|
||
"body1": "ደስ የሚል ዜና {userName}፡ {orgName} የጊሼን ማረጋገጫ አልፏል እና አሁን የB2B ጥቅማጥቅም ባህሪያትን መጠቀም ይችላል።",
|
||
"cta": "B2B ፖርታል ክፈት",
|
||
"banner": "ማረጋገጫ ተጠናቋል"
|
||
}
|
||
},
|
||
"prescription-submitted": {
|
||
"en": {
|
||
"preview": "Prescription {rxId} received",
|
||
"heading": "Prescription submitted",
|
||
"body1": "Hi {userName}, we received prescription {rxId}. A pharmacist will review it shortly.",
|
||
"cta": "View prescription",
|
||
"banner": "Under clinical review"
|
||
},
|
||
"am": {
|
||
"preview": "የመድሃኒት ማዘዣ {rxId} ደርሷል",
|
||
"heading": "የመድሃኒት ማዘዣ ገብቷል",
|
||
"body1": "ሰላም {userName}፣ የመድሃኒት ማዘዣ {rxId}ን ተቀብለናል። ፋርማሲስት በቅርቡ ይገመግመዋል።",
|
||
"cta": "ማዘዣ ይመልከቱ",
|
||
"banner": "በክሊኒካል ግምገማ ላይ"
|
||
}
|
||
},
|
||
"prescription-decision": {
|
||
"en": {
|
||
"preview": "Prescription {rxId} {decision}",
|
||
"heading": "Prescription {decision}",
|
||
"body1": "Hi {userName}, prescription {rxId} was {decision}. {note}",
|
||
"cta": "Open prescription",
|
||
"approvedBanner": "Approved — you can proceed to order",
|
||
"rejectedBanner": "Rejected — see pharmacist note"
|
||
},
|
||
"am": {
|
||
"preview": "የመድሃኒት ማዘዣ {rxId} {decision}",
|
||
"heading": "የመድሃኒት ማዘዣ {decision}",
|
||
"body1": "ሰላም {userName}፣ የመድሃኒት ማዘዣ {rxId} {decision} ሆኗል። {note}",
|
||
"cta": "ማዘዣ ክፈት",
|
||
"approvedBanner": "ጸድቋል — ለመግዛት መቀጠል ይችላሉ",
|
||
"rejectedBanner": "ተቀባይነት አላገኘም — የፋርማሲስት ማስታወሻን ይመልከቱ"
|
||
}
|
||
},
|
||
"prescription-ready": {
|
||
"en": {
|
||
"preview": "Prescription {rxId} ready for pickup",
|
||
"heading": "Ready for pickup",
|
||
"body1": "Hi {userName}, prescription {rxId} is ready at {branchName}.",
|
||
"cta": "Get directions",
|
||
"banner": "Bring a valid ID when you collect."
|
||
},
|
||
"am": {
|
||
"preview": "የመድሃኒት ማዘዣ {rxId} ለመውሰድ ዝግጁ ነው",
|
||
"heading": "ለመውሰድ ዝግጁ",
|
||
"body1": "ሰላም {userName}፣ የመድሃኒት ማዘዣ {rxId} በ{branchName} ዝግጁ ነው።",
|
||
"cta": "አቅጣጫ ያግኙ",
|
||
"banner": "ሲወስዱ የሚሰራ መታወቂያ ይዘው ይምጡ።"
|
||
}
|
||
},
|
||
"low-stock": {
|
||
"en": {
|
||
"preview": "Low stock: {skuName}",
|
||
"heading": "Low stock alert",
|
||
"body1": "SKU {skuCode} ({skuName}) at {branchName} is down to {quantity} units (threshold {threshold}).",
|
||
"cta": "Open stock",
|
||
"banner": "Action needed in Admin"
|
||
},
|
||
"am": {
|
||
"preview": "አነስተኛ ክምችት፡ {skuName}",
|
||
"heading": "የአነስተኛ ክምችት ማስጠንቀቂያ",
|
||
"body1": "SKU {skuCode} ({skuName}) በ{branchName} ወደ {quantity} አሃዶች ዝቅ ብሏል (ገደብ {threshold})።",
|
||
"cta": "ክምችት ክፈት",
|
||
"banner": "በአስተዳደር ውስጥ እርምጃ ያስፈልጋል"
|
||
}
|
||
},
|
||
"dispatch-assigned": {
|
||
"en": {
|
||
"preview": "Dispatch assigned for {orderId}",
|
||
"heading": "Dispatch assigned",
|
||
"body1": "Order {orderId} was assigned to rider {riderName} from {branchName}.",
|
||
"cta": "Open dispatch",
|
||
"banner": "Pickup window: {pickupWindow}"
|
||
},
|
||
"am": {
|
||
"preview": "ለ{orderId} ማጓጓዝ ተመድቧል",
|
||
"heading": "ማጓጓዝ ተመድቧል",
|
||
"body1": "ትዕዛዝ {orderId} ከ{branchName} ለአድራሽ {riderName} ተመድቧል።",
|
||
"cta": "ማጓጓዝ ክፈት",
|
||
"banner": "የመውሰጃ ጊዜ፡ {pickupWindow}"
|
||
}
|
||
},
|
||
"procurement-alert": {
|
||
"en": {
|
||
"preview": "Procurement alert: {title}",
|
||
"heading": "Procurement alert",
|
||
"body1": "Hi {userName}, {title}. Supplier: {supplierName}. Priority: {priority}.",
|
||
"cta": "Review procurement",
|
||
"banner": "Ops notification"
|
||
},
|
||
"am": {
|
||
"preview": "የግዥ ማስጠንቀቂያ፡ {title}",
|
||
"heading": "የግዥ ማስጠንቀቂያ",
|
||
"body1": "ሰላም {userName}፣ {title}። አቅራቢ፡ {supplierName}። ቅድሚያ፡ {priority}።",
|
||
"cta": "ግዥን ይገምግሙ",
|
||
"banner": "የኦፕስ ማሳወቂያ"
|
||
}
|
||
},
|
||
"promotional": {
|
||
"en": {
|
||
"preview": "{headline}",
|
||
"heading": "{headline}",
|
||
"body1": "{body}",
|
||
"cta": "{cta}",
|
||
"banner": "From Gishen Pharmacy"
|
||
},
|
||
"am": {
|
||
"preview": "{headline}",
|
||
"heading": "{headline}",
|
||
"body1": "{body}",
|
||
"cta": "{cta}",
|
||
"banner": "ከጊሼን ፋርማሲ"
|
||
}
|
||
},
|
||
"shop-summary": {
|
||
"en": {
|
||
"preview": "{periodLabel} shop summary",
|
||
"heading": "{periodLabel} e‑commerce summary",
|
||
"body1": "Hi {userName}, here is the Gishen shop performance for {periodLabel} ({dateRange}).",
|
||
"cta": "Open analytics",
|
||
"orders": "Orders",
|
||
"revenue": "Revenue",
|
||
"aov": "Avg order",
|
||
"topSku": "Top SKU"
|
||
},
|
||
"am": {
|
||
"preview": "የ{periodLabel} የሱቅ ማጠቃለያ",
|
||
"heading": "የ{periodLabel} ኢ-ኮሜርስ ማጠቃለያ",
|
||
"body1": "ሰላም {userName}፣ ለ{periodLabel} ({dateRange}) የጊሼን ሱቅ አፈጻጸም ይኸውና።",
|
||
"cta": "ትንታኔ ክፈት",
|
||
"orders": "ትዕዛዞች",
|
||
"revenue": "ገቢ",
|
||
"aov": "አማካይ ትዕዛዝ",
|
||
"topSku": "ከፍተኛ SKU"
|
||
}
|
||
}
|
||
} as const;
|
||
|
||
export type TemplateId = keyof typeof templateCopy;
|
||
|
||
export function tTemplate<T extends TemplateId>(id: T, locale: Locale) {
|
||
return templateCopy[id][locale];
|
||
}
|