Skip to content

feat: add Telugu (te) locale support - #1499

Open
khaira777 wants to merge 5 commits into
mainfrom
fm/flocafe-i18n-telugu
Open

khaira777 wants to merge 5 commits into
mainfrom
fm/flocafe-i18n-telugu

Conversation

@khaira777

@khaira777 khaira777 commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Intent

Implement full Telugu (te, te-IN, తెలుగు) language support across the entire FloCafe application, including the main POS app, KDS, Server App, Customer Display, Setup, Settings, thermal print/KOT labels, WhatsApp plain-text reports, and sample seed data.

Fixes #1474

What Changed

  • Added Telugu (te / te-IN / తెలుగు) to the frontend locale registry (frontend/src/lib/i18n/languages.ts), message catalogue (frontend/src/lib/i18n/messages/te.json), Electron lifecycle status strings (main/status-messages.ts), WhatsApp export formatters (main/services/*-export.ts), and localized sample seed data (main/setup/seed-data.ts).
  • Extended thermal print and browser receipt rendering for the Telugu script by adding generated Telugu print labels (main/print/print-labels.generated.ts), Telugu virama (U+0C4D) and consonant range (U+0C15-U+0C39, U+0C58-U+0C5A) grapheme-cluster handling in shared/print/width.ts and shared/print/raster-canvas.ts, and Telugu font stacks across CSS and print surfaces.
  • Added unit, thermal/raster capability, and Playwright end-to-end test coverage for Telugu alongside updated architecture and internationalization documentation.

Risk Assessment

✅ Low: The Telugu (te / te-IN) localization addition follows established Indic locale patterns across the language registry, message catalogue, print/export font stacks, Indic virama grapheme segmentation, setup seed data, status messages, and test suites with no identified defects.

Testing

Drove all 7 Telugu (te / te-IN) user-facing scenarios live against the running FloCafe servers (:3001 POS/Setup/Customer Display/Print-Test/Reports API, :3002 Standalone KDS, and :3003 Standalone Server App) via Playwright Chromium, captured 8 screenshots plus HTML and plain-text report artifacts in the evidence directory, and ran 15 targeted i18n, thermal/raster printing, seed-data, and WhatsApp report test suites; all checks passed.

  • Live validation: ✅ go - 7 of 7 scenarios driven live against the product
Scenario Result Live Evidence
User selects తెలుగు (TE) in the Setup wizard and sees html[lang="te-IN"][dir="ltr"] and localized Telugu onboarding steps ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/01-setup-wizard-telugu.png
Staff switches Main POS to Telugu, applies Noto Sans Telugu font stack, and adds Telugu sample products (హైదరాబాదీ బిర్యానీ, పునుగులు) to cart ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/02-pos-telugu-seed-catalog.png
Waitstaff opens Standalone Server App (:3003/server-standalone) in Telugu, selects a table, adds Telugu menu items, and dispatches order to kitchen (వంటగదికి పంపు) ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/05-server-app-telugu.png
Kitchen staff logs into Standalone KDS (:3002/kds-standalone) in Telugu and views active kitchen tickets with Telugu product names and stage controls ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/04-kds-standalone-telugu.png
Customer Display (/customer-display) pairs and displays Preparing (సిద్ధమవుతోంది) and Ready for Pickup (పికప్ కోసం సిద్ధంగా ఉంది) order queues in Telugu ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/06-customer-display-telugu.png
User previews and downloads Web Print Customer Receipt and Browser Print KOT from /print-test in Telugu with localized headers, totals, and thank-you footer ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/07-web-print-receipt-and-kot-telugu.png
Store generates Telugu WhatsApp plain-text Daily Sales report and HTML report exports (/api/reports/daily-sales/export?format=html and /api/reports/daily-invoices/export?format=html) with Telugu font… ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/08-whatsapp-reports-telugu.png

Setup wizard in Telugu (te-IN)
Main POS in Telugu with sample catalog items in cart
Print-test and Settings UI in Telugu
Standalone KDS (:3002) in Telugu
Standalone Server App (:3003) in Telugu
Customer Display in Telugu showing preparing and ready queues
Web Print Receipt and KOT rendered in Telugu

Evidence: Downloaded Telugu Web Print Receipt HTML
<!DOCTYPE html>
<html lang="te-IN" dir="ltr">
<head>
  <meta charset="utf-8">
  <title>బిల్లు # BILL-001</title>
  <style>
    
    * { box-sizing: border-box; margin: 0; padding: 0; }
    body { font-family: -apple-system, 'Segoe UI', Tahoma, 'Noto Naskh Arabic', 'Noto Sans Bengali', 'Vrinda', 'Bangla Sangam MN', 'Noto Sans Devanagari', 'Nirmala UI', 'Kohinoor Devanagari', 'Devanagari Sangam MN', 'Noto Sans Gurmukhi', 'Raavi', 'Kohinoor Gurmukhi', 'Gurmukhi Sangam MN', 'Noto Sans Telugu', 'Kohinoor Telugu', 'Telugu Sangam MN', 'Noto Sans Thai', 'Leelawadee UI', Thonburi, 'PingFang SC', 'Microsoft YaHei', 'Noto Sans CJK SC', 'Hiragino Sans', 'Yu Gothic', 'Meiryo', 'Noto Sans CJK JP', 'Noto Sans JP', 'Helvetica Neue', Arial, sans-serif; font-size: 13px; font-weight: 600; line-height: 1.4; color: #000; }
    body:lang(zh-TW) { font-family: -apple-system, 'Segoe UI', Tahoma, 'Noto Naskh Arabic', 'PingFang TC', 'Microsoft JhengHei', 'Noto Sans CJK TC', 'Noto Sans TC', 'Helvetica Neue', Arial, sans-serif; }
    .bill-container { max-width: 100%; margin: 0 auto; color: #000; }
    .reprint-banner { text-align: center; font-size: 20px; font-weight: 700; letter-spacing: 2px; color: #000; border: 2px solid #000; padding: 6px; margin-bottom: 12px; }
    .online-order-banner { text-align: center; font-size: 18px; font-weight: 700; letter-spacing: 1px; color: #000; border: 2px solid #000; padding: 6px; margin-bottom: 12px; }
    .online-order-banner .online-order-detail { font-size: 13px; font-weight: 600; letter-spacing: normal; margin-top: 2px; color: #000; }
    .header { text-align: center; margin-bottom: 12px; padding-bottom: 8px; color: #000; border-bottom: 1px solid #000; }
    .receipt-logo { max-width: 80%; max-height: 120px; object-fit: contain; margin: 0 auto 8px auto; display: block; }
    .header h1 { font-size: 20px; font-weight: 700; margin-bottom: 4px; color: #000; }
    .bill-details { margin-bottom: 12px; color: #000; }
    .bill-details table { width: 100%; }
    .items-table { width: 100%; border-collapse: collapse; margin-bottom: 12px; color: #000; }
    .items-table th, .items-table td { padding: 6px; border-bottom: 1px solid #000; text-align: start; color: #000; }
    .items-table th { background: transparent; font-weight: 700; color: #000; }
    .tax-table, .payments-table { width: 50%; margin-inline-start: 50%; border-collapse: collapse; margin-bottom: 12px; color: #000; }
    .tax-table th, .tax-table td, .payments-table th, .payments-table td { padding: 4px 6px; color: #000; }
    .tax-table th, .payments-table th { background: transparent; text-align: start; font-weight: 700; color: #000; }
    .totals-table { width: 100%; border-collapse: collapse; margin-bottom: 12px; color: #000; }
    .totals-table td { padding: 4px 6px; color: #000; }
    .total-row { border-top: 2px solid #000; font-size: 16px; font-weight: 700; color: #000; }
    .footer { text-align: center; margin-top: 16px; padding-top: 10px; border-top: 1px solid #000; color: #000; }
    .powered-by { font-size: 11px; font-weight: 600; margin-top: 8px; color: #000; }
    .text-end { text-align: end !important; }
    .num { unicode-bidi: isolate; white-space: nowrap; }
    .ltr { direction: ltr; unicode-bidi: isolate; }
    .text-muted { color: #000; font-weight: 600; }
    .text-italic { font-style: italic; color: #000; font-weight: 600; }
  
        @page { size: 58mm auto; margin: 0; }
        body { color: #000; font-size: 13px; font-weight: 600; width: 58mm; max-width: 58mm; margin: 0 auto; }
        .bill-container { padding: 2mm; width: 100%; max-width: 58mm; font-size: 13px; font-weight: 600; color: #000; }
        .reprint-banner, .online-order-banner { color: #000; border: 2px solid #000; font-size: 16px; font-weight: 700; }
        .header { color: #000; border-bottom: 1px solid #000; }
        .header h1 { font-size: 17px; font-weight: 700; color: #000; }
        .text-muted, .text-italic { color: #000; font-weight: 600; }
        .items-table th, .tax-table th, .payments-table th { background: transparent; color: #000; border-bottom: 1px solid #000; font-weight: 700; }
        .items-table td { color: #000; border-bottom: 1px dashed #000; font-size: 13px; font-weight: 600; }
        .total-row { color: #000; border-top: 2px solid #000; font-size: 15px; font-weight: 700; }
        .footer { color: #000; border-top: 1px solid #000; }
        .powered-by { color: #000; font-size: 11px; font-weight: 600; }
        .tax-table, .payments-table { width: 100%; margin-inline-start: 0; }
        .items-table th, .items-table td, .tax-table td, .totals-table td, .payments-table td { padding: 2px 4px; }
      
    @media print {
      .no-print { display: none !important; }
      body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
    }
  </style>
</head>
<body>
  <div class="bill-container">
    
    
    <!-- Header -->
    <div class="header">
      
      <h1>Test Restaurant</h1>
      <p>123 Main Street, Mumbai - 400001</p>
      <p>ఫోన్: +91 9876543210</p>
      <p>Tax ID: TAXID-0001</p>
    </div>

    <!-- Bill Details -->
    <div class="bill-details">
      <table>
        <tr>
          <td><strong>బిల్లు #</strong> BILL-001</td>
          <td class="text-end"><strong>తేదీ</strong> 8, నవం 2569 BE 01:18 AM</td>
        </tr>
        <tr><td><strong>టేబుల్</strong> Table 5</td><td></td></tr>
        
        <tr><td><strong>కస్టమర్</strong> John Doe</td><td></td></tr>
        <tr><td><strong>కస్టమర్ నం</strong> 9876543210</td><td></td></tr>
        
      </table>
    </div>

    <!-- Items Table -->
    <table class="items-table">
      <thead>
        <tr>
          <th>ఐటెమ్</th>
          <th class="text-end">పరిమాణం</th>
          <th class="text-end">ధర</th>
          <th class="text-end">మొత్తం</th>
        </tr>
      </thead>
      <tbody>
        
          <tr>
            <td>
              Chicken Biryani
              <br><small class="text-muted">+ Extra Spice (฿40.00)</small>
              <br><small class="text-italic">Less onion</small>
            </td>
            <td class="text-end num">2</td>
            <td class="text-end num">฿180.00</td>
            <td class="text-end num">฿378.00</td>
          </tr>
        
          <tr>
            <td>
              Tandoori Roti
              
              
            </td>
            <td class="text-end num">4</td>
            <td class="text-end num">฿30.00</td>
            <td class="text-end num">฿126.00</td>
          </tr>
        
          <tr>
            <td>
              Masala Papad
              
              
            </td>
            <td class="text-end num">1</td>
            <td class="text-end num">฿50.00</td>
            <td class="text-end num">฿52.50</td>
          </tr>
        
      </tbody>
    </table>

    <!-- Tax Breakdown -->
    
    <table class="tax-table">
      <thead>
        <tr><th colspan="2">పన్ను వివరాలు</th></tr>
      </thead>
      <tbody>
        
          <tr><td>Tax A @6%</td><td class="text-end num">฿27.00</td></tr>
        
          <tr><td>Tax B @6%</td><td class="text-end num">฿27.00</td></tr>
        
      </tbody>
    </table>
    

    <!-- Totals -->
    <table class="totals-table">
      
      
      <tr><td>ఉప మొత్తం</td><td class="text-end num">฿450.00</td></tr>
      
      
      
      
      
      
      <tr class="total-row"><td><strong>గ్రాండ్ టోటల్</strong></td><td class="text-end num"><strong>฿504.00</strong></td></tr>
      
      
      
    </table>

    <!-- Payments -->
    
    <table class="payments-table">
      <thead>
        <tr><th colspan="2">చెల్లింపులు</th></tr>
      </thead>
      <tbody>
        
          <tr><td>నగదు</td><td class="text-end num">฿504.00</td></tr>
        
      </tbody>
    </table>
    

    <!-- Footer -->
    <div class="footer">
      <p>మీ సందర్శనకు ధన్యవాదాలు!</p>
      <p>వర్తించే చోట పన్ను కలిపి ఉంటుంది</p>
      <p class="powered-by">Powered by FloPOS (flopos.com)</p>
    </div>
  </div>

  <div class="no-print" style="text-align:center;margin-top:20px;">
    <button onclick="window.print()" style="padding:10px 20px;font-size:16px;cursor:pointer;">బిల్లు ప్రింట్ చేయి</button>
  </div>
</body>
</html>
  
![WhatsApp Daily Sales and HTML export rendered in Telugu](https://github.com/user-attachments/assets/735d3ad6-7d35-4c4e-84f0-aa683fd13786)
Evidence: WhatsApp Daily Sales plain-text report in Telugu

FloCafe హైదరాబాద్ రోజువారీ అమ్మకాల నివేదిక వ్యాపార తేదీ: 7 నవం, 2026 (Asia/Kolkata) ఆర్డర్లు: 2 · బిల్లులు: 2 అమ్మకాల సారాంశం స్థూల వసూళ్లు: ₹598.50 రీఫండ్లు: ₹0.00 నికర వసూళ్లు: ₹598.50 పన్ను: ₹28.50 తగ్గింపు: ₹0.00 సర్వీస్ ఛార్జ్: ₹0.00 ప్యాకేజింగ్: ₹0.00 డెలివరీ: ₹0.00 చెల్లింపు విధానాలు - నగదు: ₹350.00 - కార్డ్: ₹248.50 అగ్ర ఉత్పత్తులు 1. హైదరాబాదీ బిర్యానీ (1) - ₹320.00 2. పునుగులు (1) - ₹250.00

*FloCafe హైదరాబాద్*
రోజువారీ అమ్మకాల నివేదిక
వ్యాపార తేదీ: 7 నవం, 2026 (Asia/Kolkata)
ఆర్డర్లు: 2 · బిల్లులు: 2

*అమ్మకాల సారాంశం*
స్థూల వసూళ్లు: ₹598.50
రీఫండ్లు: ₹0.00
*నికర వసూళ్లు: ₹598.50*
పన్ను: ₹28.50
తగ్గింపు: ₹0.00
సర్వీస్ ఛార్జ్: ₹0.00
ప్యాకేజింగ్: ₹0.00
డెలివరీ: ₹0.00

*చెల్లింపు విధానాలు*
- నగదు: ₹350.00
- కార్డ్: ₹248.50

*అగ్ర ఉత్పత్తులు*
1. హైదరాబాదీ బిర్యానీ (1) - ₹320.00
2. పునుగులు (1) - ₹250.00

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

✅ **Review** - passed

✅ No issues found.

✅ No issues found.

✅ **Test** - passed

✅ No issues found.

  • Live validation: ✅ go - 7 of 7 scenarios driven live against the product
Scenario Result Live Evidence
Select Telugu (తెలుగు / TE) in the first-run Setup wizard and verify html[lang='te-IN'][dir='ltr'] and localized wizard steps ✅ pass live 01-setup-wizard-telugu.png; npx playwright test e2e/telugu-live-evidence.spec.ts e2e/phase7-setup-print-i18n.spec.ts
Switch Main POS and Settings/Print-Test to Telugu, verify Noto Sans Telugu font family, and add Telugu sample catalog items (హైదరాబాదీ బిర్యానీ, పునుగులు) to cart ✅ pass live 02-pos-telugu-seed-catalog.png; 03-settings-and-print-test-telugu.png; npx playwright test e2e/telugu-live-evidence.spec.ts
Open standalone Server App (:3003/server-standalone) in Telugu, select table TE-1, add Telugu catalog items, and send the order to the kitchen (వంటగదికి పంపు -> ఆర్డర్ పంపబడింది) ✅ pass live 05-server-app-telugu.png; npx playwright test e2e/telugu-live-evidence.spec.ts
Sign into standalone KDS (:3002/kds-standalone) in Telugu and verify html[lang='te-IN'] and live kitchen ticket rendering for Telugu items ✅ pass live 04-kds-standalone-telugu.png; npx playwright test e2e/telugu-live-evidence.spec.ts
Pair and open Customer Display (/customer-display) in Telugu and verify localized Preparing (సిద్ధమవుతోంది) and Ready for Pickup (పికప్ కోసం సిద్ధంగా ఉంది) order queues ✅ pass live 06-customer-display-telugu.png; npx playwright test e2e/telugu-live-evidence.spec.ts
Generate and download live Web Print receipt HTML and KOT browser print preview in Telugu from /print-test, and verify complex-script raster routing and zero-width akhanda-virama cell widths for Telug… ✅ pass live 07-web-print-receipt-and-kot-telugu.png; 07-web-print-receipt-telugu.html; npm run test:thermal-capabilities; npm run test:raster; npm run test:print-labels
Format plain-text WhatsApp daily sales reports and export Daily Sales & Daily Invoices HTML reports from the live API in Telugu (te / te-IN) ✅ pass live 08-whatsapp-reports-telugu.png; 08-whatsapp-reports-telugu.txt; npx playwright test e2e/telugu-live-evidence.spec.ts
  • npm run i18n:check
  • npm run test:print-labels
  • npm run test:phase7-setup-i18n
  • npm run test:status-messages
  • npm run test:thermal-capabilities
  • npm run test:raster
  • npm run test:print-kernel
  • npm run test:rtl-setup-auth-settings
  • npm run test:rtl-dashboard-pos-common
  • npm run test:rtl-kds-server-whatsapp
  • npx ts-node --transpile-only -P tests/tsconfig.json tests/browser-receipts.test.ts
  • npx ts-node --transpile-only -P tests/tsconfig.json tests/decoupled-ui-locale.test.ts
  • npx ts-node --transpile-only -P tests/tsconfig.json tests/i18n-audit-remediations.test.ts
  • npx ts-node --transpile-only -P tests/tsconfig.json tests/phase3-print-regressions.test.ts
  • npx ts-node --transpile-only -P tests/tsconfig.json tests/reports-whatsapp.test.ts
  • npm run docs:check
  • cd frontend && npx playwright test e2e/telugu-live-evidence.spec.ts e2e/phase7-setup-print-i18n.spec.ts --config=playwright.config.ts --project=chromium

✅ No issues found.

  • Live validation: ✅ go - 7 of 7 scenarios driven live against the product
Scenario Result Live Evidence
User selects తెలుగు (TE) in the Setup wizard and sees html[lang="te-IN"][dir="ltr"] and localized Telugu onboarding steps ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/01-setup-wizard-telugu.png
Staff switches Main POS to Telugu, applies Noto Sans Telugu font stack, and adds Telugu sample products (హైదరాబాదీ బిర్యానీ, పునుగులు) to cart ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/02-pos-telugu-seed-catalog.png
Waitstaff opens Standalone Server App (:3003/server-standalone) in Telugu, selects a table, adds Telugu menu items, and dispatches order to kitchen (వంటగదికి పంపు) ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/05-server-app-telugu.png
Kitchen staff logs into Standalone KDS (:3002/kds-standalone) in Telugu and views active kitchen tickets with Telugu product names and stage controls ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/04-kds-standalone-telugu.png
Customer Display (/customer-display) pairs and displays Preparing (సిద్ధమవుతోంది) and Ready for Pickup (పికప్ కోసం సిద్ధంగా ఉంది) order queues in Telugu ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/06-customer-display-telugu.png
User previews and downloads Web Print Customer Receipt and Browser Print KOT from /print-test in Telugu with localized headers, totals, and thank-you footer ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/07-web-print-receipt-and-kot-telugu.png
Store generates Telugu WhatsApp plain-text Daily Sales report and HTML report exports (/api/reports/daily-sales/export?format=html and /api/reports/daily-invoices/export?format=html) with Telugu font… ✅ pass live ~/.no-mistakes/evidence/01M6TWNVZRE2MT9WHN20Z3GYKA/08-whatsapp-reports-telugu.png
  • cd frontend && npx playwright test e2e/telugu-live-evidence.spec.ts e2e/phase7-setup-print-i18n.spec.ts --config=playwright.config.ts --project=chromium
  • npm run test:translations
  • npm run test:print-labels
  • npm run test:print-kernel
  • npm run test:thermal-capabilities
  • npm run test:browser-receipts
  • npm run test:decoupled-ui-locale
  • npm run test:i18n-audit-remediations
  • npm run test:rtl-setup-auth-settings
  • npm run test:rtl-dashboard-pos-common
  • npm run test:rtl-kds-server-whatsapp
  • npm run test:status-messages
  • npm run test:phase7-setup-i18n
  • node tests/run-electron-node-test.cjs tests/reports-whatsapp.test.ts
  • npx ts-node --transpile-only -P tests/tsconfig.json tests/raster-printing.test.ts
  • ./node_modules/.bin/electron --no-sandbox tests/raster-renderer-electron.test.cjs
✅ **Document** - passed

✅ No issues found.

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

✅ No issues found.

@coderabbitai

coderabbitai Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Add Telugu localization across FloCafe

✨ Enhancement 🧪 Tests 📝 Documentation 🕐 40+ Minutes

Grey Divider

AI Description

• Add Telugu translations, locale selection, startup messages, and localized setup samples across
 FloCafe surfaces.
• Support Telugu text in print and report fonts, and preserve conjuncts in thermal layouts.
• Extend localization, printing, setup, and live-browser tests; document the 26 supported locales.
Diagram

graph TD
  A["Locale registry"] --> B["Telugu catalogue"] --> C["App surfaces"] --> G["Print renderers"]
  B --> E["Print labels"] --> H["Report exports"]
  A --> D["Setup samples"]
  E --> G
  F["Grapheme widths"] --> G
Loading
High-Level Assessment

Use the existing locale registry, catalogue, generated-label pipeline, and shared print-width helper. A separate Telugu rendering path would duplicate established behavior; broader seed-data restructuring is not necessary for this locale addition.

Files changed (39) +5464 / -340

Enhancement (15) +3978 / -103
globals.cssAdd Telugu UI font fallbacks +1/-1

Add Telugu UI font fallbacks

• Extends the global sans-serif stack with Telugu-capable fonts.

frontend/src/app/globals.css

languages.tsRegister selectable Telugu locale +7/-0

Register selectable Telugu locale

• Registers te with te-IN, its native name, LTR direction, and a dynamic message loader.

frontend/src/lib/i18n/languages.ts

te.jsonAdd complete Telugu message catalogue +3601/-0

Add complete Telugu message catalogue

• Adds Telugu translations for application messages, including setup, POS, KDS, settings, printing, and WhatsApp, with ICU placeholders retained.

frontend/src/lib/i18n/messages/te.json

PrinterService.tsSupport Telugu in printer service HTML +1/-1

Support Telugu in printer service HTML

• Adds Telugu fonts to the service's printable HTML font stack.

frontend/src/lib/printer/PrinterService.ts

delivery-slip-web-print.tsAdd Telugu delivery-slip fonts +1/-1

Add Telugu delivery-slip fonts

• Adds Telugu fallbacks to browser-printed delivery slips.

frontend/src/lib/printer/delivery-slip-web-print.ts

kot-web-print.tsSelect a Telugu KOT font stack +1/-0

Select a Telugu KOT font stack

• Maps the Telu script to Telugu-capable fonts for browser KOT output.

frontend/src/lib/printer/kot-web-print.ts

order-slip-web-print.tsAdd Telugu order-slip fonts +1/-1

Add Telugu order-slip fonts

• Adds Telugu fallbacks to browser-printed order slips.

frontend/src/lib/printer/order-slip-web-print.ts

web-print.tsAdd Telugu receipt fonts +1/-1

Add Telugu receipt fonts

• Extends browser receipt styles with Telugu-capable font fallbacks.

frontend/src/lib/printer/web-print.ts

print-labels.generated.tsGenerate Telugu print labels +148/-0

Generate Telugu print labels

• Adds te to supported print-label languages and includes its localized receipt, KOT, Z-report, and report labels.

main/print/print-labels.generated.ts

cash-close-export.tsAdd Telugu cash-close export fonts +1/-1

Add Telugu cash-close export fonts

• Adds Telugu fallbacks to cash-close report HTML styles.

main/services/cash-close-export.ts

daily-invoices-export.tsAdd Telugu invoice export font +1/-0

Add Telugu invoice export font

• Includes Noto Sans Telugu in the report font stack.

main/services/daily-invoices-export.ts

daily-sales-export.tsAdd Telugu daily-sales export fonts +1/-1

Add Telugu daily-sales export fonts

• Adds Telugu fallbacks to exported daily-sales HTML.

main/services/daily-sales-export.ts

seed-data.tsSeed Telugu restaurant examples +202/-95

Seed Telugu restaurant examples

• Recognizes te for setup seeding and supplies localized express and demo categories, products, customers, and staff names.

main/setup/seed-data.ts

status-messages.tsLocalize desktop status messages +10/-0

Localize desktop status messages

• Adds Telugu startup, backup, welcome, shutdown, and saved-state messages.

main/status-messages.ts

raster-canvas.tsAdd Telugu raster font fallbacks +1/-1

Add Telugu raster font fallbacks

• Extends canvas text rendering with Telugu-capable system fonts.

shared/print/raster-canvas.ts

Bug fix (1) +59 / -48
width.tsKeep Telugu conjuncts intact +59/-48

Keep Telugu conjuncts intact

• Adds the Telugu virama to fallback grapheme segmentation so thermal wrapping and truncation do not split conjuncts. Other changes reformat existing width logic.

shared/print/width.ts

Tests (16) +1398 / -167
phase7-setup-print-i18n.spec.tsAdd Telugu print-action expectations +1/-0

Add Telugu print-action expectations

• Adds Telugu button labels to the existing setup and print localization E2E cases.

frontend/e2e/phase7-setup-print-i18n.spec.ts

telugu-live-evidence.spec.tsExercise Telugu across live app surfaces +542/-0

Exercise Telugu across live app surfaces

• Adds Playwright coverage for setup, POS, printing, KDS, Server App, Customer Display, and reports. Captures screenshots and output artifacts and attempts to clean up created test data.

frontend/e2e/telugu-live-evidence.spec.ts

browser-receipts.test.tsCheck Telugu browser receipts and slips +50/-0

Check Telugu browser receipts and slips

• Loads Telugu messages and verifies receipt labels, locale metadata, and Telugu font fallbacks in print HTML.

tests/browser-receipts.test.ts

decoupled-ui-locale.test.tsCheck Telugu independent of store region +25/-1

Check Telugu independent of store region

• Adds a Telugu-UI receipt case for a store in Argentina, checking labels and localized month text.

tests/decoupled-ui-locale.test.ts

i18n-audit-remediations.test.tsInclude Telugu in translation audits +2/-0

Include Telugu in translation audits

• Adds te to receipt-message and catalogue audit loops.

tests/i18n-audit-remediations.test.ts

phase3-print-regressions.test.tsCover Telugu KOT print safety +81/-1

Cover Telugu KOT print safety

• Checks Telugu browser KOT metadata and fonts, and verifies unsupported Telugu text triggers warnings rather than being emitted through native or WebUSB paths.

tests/phase3-print-regressions.test.ts

phase7-setup-i18n.test.tsVerify Telugu setup seed data +54/-0

Verify Telugu setup seed data

• Checks localized express and demo records, including menu items, staff, customers, and Indian phone numbers.

tests/phase7-setup-i18n.test.ts

print-kernel.test.tsTest Telugu grapheme-safe thermal layout +278/-108

Test Telugu grapheme-safe thermal layout

• Adds Telugu conjunct cases to width, truncation, and fallback segmentation checks; also reformats existing assertions.

tests/print-kernel.test.ts

print-labels.test.tsPin Telugu print terminology +16/-0

Pin Telugu print terminology

• Verifies Telugu totals, bill number, print-test amount, and distinct takeaway and delivery labels.

tests/print-labels.test.ts

raster-renderer-electron.test.cjsRender Telugu through Electron rasterizer +44/-6

Render Telugu through Electron rasterizer

• Adds a Telugu system-font raster case that checks successful, nonempty output; reformats existing tests.

tests/raster-renderer-electron.test.cjs

reports-whatsapp.test.tsInclude the new locale in report coverage +1/-1

Include the new locale in report coverage

• Raises the expected message-catalogue count to 26 for all-locale report tests.

tests/reports-whatsapp.test.ts

rtl-dashboard-pos-common.test.tsCheck Telugu LTR behavior +2/-0

Check Telugu LTR behavior

• Adds te to dashboard, POS, and common-component direction checks.

tests/rtl-dashboard-pos-common.test.ts

rtl-kds-server-whatsapp.test.tsCover Telugu across secondary apps +6/-1

Cover Telugu across secondary apps

• Adds te to message loading and KDS, Server App, WhatsApp, and LTR validation loops.

tests/rtl-kds-server-whatsapp.test.ts

rtl-setup-auth-settings.test.tsCheck Telugu browser language detection +13/-0

Check Telugu browser language detection

• Verifies that te and te-IN select Telugu and includes it in setup, auth, and settings locale coverage.

tests/rtl-setup-auth-settings.test.ts

thermal-capabilities.test.tsCheck unsupported Telugu thermal output +134/-48

Check unsupported Telugu thermal output

• Verifies a generic thermal printer warns about Telugu KOT text instead of emitting unrepresentable characters; reformats existing tests.

tests/thermal-capabilities.test.ts

translations.test.tsValidate Telugu translation quality +149/-1

Validate Telugu translation quality

• Adds intentional-English exceptions and checks for untranslated, malformed, non-NFC, or invisible text. Pins cross-surface terminology and order-number placement.

tests/translations.test.ts

Documentation (7) +29 / -22
CONTRIBUTING.mdList Telugu in translation guidance +1/-1

List Telugu in translation guidance

• Adds Telugu to the documented languages available for translation contributions.

CONTRIBUTING.md

README.mdAdvertise 26 languages and Telugu +2/-1

Advertise 26 languages and Telugu

• Updates the supported-language count and adds Telugu to the UI language list.

README.md

frontend.mdUpdate frontend locale inventory +3/-3

Update frontend locale inventory

• Documents the registry and message directory as containing 26 locales.

docs/architecture/frontend.md

internationalization.mdDocument the Telugu catalogue +3/-3

Document the Telugu catalogue

• Updates the supported count and lists te among committed catalogues.

docs/architecture/internationalization.md

printing.mdDocument Telugu virama handling +1/-1

Document Telugu virama handling

• Includes U+0C4D in the documented Indic conjunct protection for thermal text.

docs/architecture/printing.md

adding-a-language.mdRefresh language-testing guidance +9/-9

Refresh language-testing guidance

• Adds Telugu to NFC guidance and updates counts for locale-specific validation and test coverage.

docs/guides/adding-a-language.md

translation-terminology.mdDefine Telugu print terminology +10/-4

Define Telugu print terminology

• Documents Telugu conjunct handling, NFC validation, and consistent financial and product labels.

docs/reference/translation-terminology.md

@qodo-code-review

qodo-code-review Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. Failed display checks leave tokens active 🐞 Bug ☼ Reliability
Description
The test revokes its customer-display token only after the display assertions succeed, rather than
in finally. If navigation or an assertion fails after token creation, the token remains active in
the shared server session, and retries can accumulate tokens toward the API’s 20-token limit.
Code

frontend/e2e/telugu-live-evidence.spec.ts[R369-372]

+      if (tokenId) {
+        await request
+          .delete(`${E2E_BASE_URL}/api/settings/customer-display/tokens/${tokenId}`, { headers })
+          .catch(() => {});
Relevance

●●● Strong

Team consistently accepts moving e2e cleanup into finally so created fixtures are removed on failure
(PRs 1025, 1412, 1246).

PR-#1025
PR-#1412
PR-#1246

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Token creation precedes several operations that can throw, while revocation is on the success path
and absent from finally. The settings route rejects token creation once the active-token limit is
reached.

frontend/e2e/telugu-live-evidence.spec.ts[333-373]
frontend/e2e/telugu-live-evidence.spec.ts[502-540]
main/routes/settings.ts[888-918]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
A failure during customer-display verification skips token revocation, leaving the token active across retries on the shared E2E server.
## Fix Focus Areas
- frontend/e2e/telugu-live-evidence.spec.ts[333-340]
- frontend/e2e/telugu-live-evidence.spec.ts[369-373]
- frontend/e2e/telugu-live-evidence.spec.ts[502-540]
## Recommended Fix
Track the token ID outside the try block and revoke it from `finally` whenever creation succeeds. Check the revocation response rather than silently accepting an unsuccessful cleanup.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


2. Telugu test tables remain in the suite 🐞 Bug ☼ Reliability
Description
The test creates a table but attempts to clean it up with DELETE /api/tables/:id, an endpoint the
tables router does not provide. That request returns 404 rather than deleting the table, and the
unchecked response leaves it in the shared E2E database for the rest of the server session.
Code

frontend/e2e/telugu-live-evidence.spec.ts[R535-538]

+      if (createdTableId !== null) {
+        await request
+          .delete(`${E2E_BASE_URL}/api/tables/${createdTableId}`, { headers })
+          .catch(() => {});
Relevance

●●● Strong

Verifiable factual bug: no DELETE /api/tables/:id route exists; team accepts cleanup-correctness
fixes in e2e specs.

PR-#1025
PR-#1246

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The test saves the ID returned by table creation and later issues a delete request, but the router’s
only DELETE route is for floor labels; it has no table-ID deletion route. Playwright runs these
tests against one shared server.

frontend/e2e/telugu-live-evidence.spec.ts[230-238]
frontend/e2e/telugu-live-evidence.spec.ts[535-538]
main/routes/tables.ts[259-300]
frontend/playwright.config.ts[9-13]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The new E2E test creates a table but its teardown calls a nonexistent table-delete endpoint, leaving fixture data behind.
## Fix Focus Areas
- frontend/e2e/telugu-live-evidence.spec.ts[230-238]
- frontend/e2e/telugu-live-evidence.spec.ts[535-538]
- main/routes/tables.ts[259-300]
## Recommended Fix
Reuse an existing fixture table, or provide a test-only teardown mechanism that actually removes the created table. Assert cleanup responses so a future unsupported request cannot pass silently.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Dismiss ↗ | View ↗


3. Telugu tests disable WhatsApp for the suite ✓ Resolved

Resolving commit: 6362097

Resolution reason
The unconditional WhatsApp disable teardown is absent from the PR head version of
telugu-live-evidence.spec.ts; the finally block only restores state the test itself changed
(language, orders, products, categories, customer display token).
Description
The test’s finally block calls /api/whatsapp/disable unconditionally, although the test never
enables WhatsApp or records its previous state. The E2E server seeds whatsapp_enabled as true
for other UI coverage, so running this test changes that shared setting to false even when the
Telugu checks fail early.


Informational

4. Operator guide omits Telugu ✗ Dismissed
Description
Adding te to the selectable languages leaves the FloCafe page in docs.flopos.com listing only
English, Spanish, and Brazilian Portuguese. Operators consulting that guide will not see that Telugu
is available; the guide's language list was already incomplete and needs updating alongside this
addition.

Grey Divider

Context sources
✅ Linked PRs:
  🌐 PR #34
  🌐 PR #10
❌ Tickets: failed to load — Ticket collection could not establish complete evidence
✅ Compliance rules (platform): 5 rules
✅ Cross-repo context — repo relationships
  Explored: repo: FreeOpenSourcePOS/FloCafe-Plugins (sha: 19dcb656) — View relationship
  Explored: repo: FreeOpenSourcePOS/docs.flopos.com (sha: abe7cff3) — View relationship
✅ Context preparation
  Description: summarized; full text retained for this review
Review mode: Auto: ⚖️ Balanced: Mostly locale catalog data; limited logic in width.ts and print paths.

Grey Divider

Tip of the day
💡 Did you know, you can hide the parts of a finding you never read, like the evidence or the agent prompt

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread frontend/src/lib/i18n/languages.ts Resolved
@khaira777
khaira777 force-pushed the fm/flocafe-i18n-telugu branch 2 times, most recently from fcf9b60 to 556b304 Compare November 7, 2026 11:18
@khaira777
khaira777 force-pushed the fm/flocafe-i18n-telugu branch from 84f5e14 to 6362097 Compare November 7, 2026 18:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(i18n): add Telugu (తెలుగు) locale (te)

1 participant