Files
datatools-dev/src/i18n/packs/en.json
Michael ac94208d8f chore: production-readiness sweep on the help-popover wave
- Drop unused 'from src.i18n import t' from pages 1-9 (the swap to
  render_tool_header(tool_id) means no page calls t() directly anymore).
  Pages 10, 11 and the underscore-prefixed pages were already clean or
  legitimately use t().

- Rewrite PDF Extractor help_md (en + es). The original prose described
  features the tool does NOT have — template drawing, per-source saved
  templates, automatic reuse. The actual tool is a heuristic batch
  scanner (per its own docstring: "No templates, no per-bank
  configuration"). New copy: scan → uncheck → pick date format → enable
  OCR if needed → download. Spanish version tagged with
  '<!-- TODO: review Spanish -->' since the prose is best-effort.

- Document why both stSidebarNavSectionHeader (legacy, streamlit~=1.35)
  and stNavSectionHeader (current, 1.57) testids appear in the chrome
  CSS — requirements floor is streamlit>=1.35,<2 so dropping the legacy
  selector would silently break the lower bound.

- Pin the t()-returns-key-on-miss contract that render_tool_header's
  fallback path depends on, with a comment at the call site.

- Pin the demo's intentional skip of hide_streamlit_chrome (so the
  +/- sidebar swap JS doesn't ever try to load there) with a load-
  bearing comment in app_demo.py.

- Confirmed i18n parity: every tool id has page_title / page_caption /
  description / name / help_md in BOTH packs; help.button_label and
  help.missing_body in both.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 18:07:33 +00:00

222 lines
17 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"chrome": {
"language_label": "Language",
"footer": "Runs locally. Your data never leaves this computer. | DataTools v3.0"
},
"home": {
"page_title": "UNALOGIX DataTools",
"title": "UNALOGIX DataTools",
"caption": "Clean. Normalize. Transform.",
"privacy_pill": "Runs 100% locally",
"findings_badge_one": "{n} finding",
"findings_badge_other": "{n} findings"
},
"status": {
"ready": "Ready",
"coming_soon": "Coming Soon"
},
"help": {
"button_label": "Help",
"missing_body": "No help written yet for this tool."
},
"upload": {
"heading": "Import one or more files to start",
"intro": "Optional: scan an imported file for data quality issues and see which tools can fix each one. Skip if you already know what you need.",
"limits": "**Up to 1.5 GB.** Formats: CSV, TSV, XLSX, XLS. Delimiters auto-detected: comma, tab, semicolon, pipe. Encodings auto-detected: UTF-8 (with/without BOM), UTF-16, cp1252, Latin-1/9, cp1250, ISO-8859-2, cp1251, KOI8-R, Mac Roman, Shift_JIS, GB18030, Big5, EUC-KR — and override on the Review page.",
"uploader_label": "Import CSV or Excel",
"uploader_help": "Up to 1.5 GB. Comma / tab / semicolon / pipe delimiters all auto-detected. Encoding auto-detected with override on the Review page if needed.",
"run_button": "Run analysis",
"skip_button": "Skip",
"scanning": "Scanning…",
"skipped_notice": "Analysis skipped. Open any tool below to start working.",
"using_session_file": "Using **{name}** from the import screen.",
"use_different_file": "Use a different file",
"switch_back": "Switch back to import-screen file",
"pickup_caption": "Up to 1.5 GB. Delimiters auto-detected: comma, tab, semicolon, pipe. Encoding auto-detected (UTF-8 / UTF-16 / cp1252 / Latin-1 family / cp1250 / cp1251 / KOI8-R / Mac Roman / Shift_JIS / GB18030 / Big5 / EUC-KR), with override on the Review page.",
"intro_multi": "Drop files below. Each one is analyzed locally — nothing leaves this computer.",
"uploader_label_multi": "Import CSV, TSV, or Excel files",
"clear_results": "Clear results",
"empty_state": "Import one or more files to begin. Your data never leaves this computer."
},
"findings": {
"header": "Detected issues",
"none": "No issues detected. Open any tool below to start working.",
"severity_summary_segment": "{icon} {n} {severity}",
"tool_section_label": "{tool} — {n} finding(s)",
"other_section_label": "Other / file-level — {n} finding(s)",
"open_tool": "Open {tool} →",
"untargeted_label": "Informational"
},
"gate": {
"warning": "**{name}** must pass the CSV-normalization gate before you can use this tool. Open the Review page to apply the fixes our analyzer recommends.",
"default_name": "the imported file",
"open_review": "Go to Review & Normalize"
},
"quit": {
"button": "Quit app",
"shutting_down": "Shutting down… you can close this window.",
"farewell_title": "DataTools has shut down",
"farewell_subtitle": "You can close this window.",
"close_window_button": "Close this window",
"close_hint": "Browsers don't let JavaScript close a tab you opened yourself — and they don't let it send Ctrl+W or Alt+F4 either (those keystrokes are intercepted by the OS, not the page). Launch DataTools with `python -m src.gui` to get a Chrome/Edge --app window that DOES close cleanly. In the meantime, this tab will fall back to a blank page in a moment — close it manually with Ctrl+W (or ⌘W on Mac)."
},
"close_page": {
"page_title": "DataTools — Close",
"title": "Close DataTools",
"caption": "Shut down the local app and free the terminal.",
"body": "Clicking the button below will terminate the DataTools server. Any unsaved work in other tools will be lost. Once the app shuts down you can close this window.",
"button": "Close the app"
},
"activation": {
"page_title": "DataTools — Activate",
"title": "Activate DataTools",
"intro": "DataTools needs to be activated before any tools unlock. Enter the name and email tied to your purchase, then paste the license blob from your delivery email.",
"name_label": "Full name",
"name_help": "Must match the name on your purchase receipt.",
"email_label": "Email",
"email_help": "Must match the email on your purchase receipt.",
"blob_label": "License blob",
"blob_help": "Begins with `DTLIC1:` — paste the entire string.",
"activate_button": "Activate",
"renew_button": "Apply renewal",
"or_separator": "— or —",
"success": "Activated! Welcome, {name}. Your license is valid until {expires}.",
"renewed": "License renewed. New expiry: {expires}.",
"errors_heading": "Activation problem",
"deactivate_button": "Deactivate this device",
"deactivate_help": "Removes the local license file. You'll need to re-paste your blob to reactivate."
},
"license": {
"status_active": "{tier} · {days} days left",
"status_trial": "Trial · {days} days left",
"status_expired": "Expired",
"status_not_activated": "Not activated",
"status_invalid": "License invalid",
"renewal_warning_30": "⚠️ License expires in {days} days. Renew soon to avoid interruption.",
"renewal_warning_expired": "🛑 License expired on {date}. Renew to continue using DataTools.",
"tier_trial": "Trial",
"tier_lite": "Lite",
"tier_core": "Core",
"tier_pro": "Pro",
"tier_enterprise": "Enterprise",
"registered_to": "Registered to {name} · {email}",
"expires_on": "Expires on {date}",
"issued_on": "Issued on {date}",
"view_details": "License details",
"feature_locked_title": "🔒 This tool isn't on your {tier} license",
"feature_locked_body": "Your current license unlocks: {features}. Upgrade to access this tool.",
"upgrade_link": "Manage license",
"status_locked": "Locked"
},
"tools": {
"01_deduplicator": {
"name": "Find Duplicates",
"description": "Find rows that repeat — exact and similar — and remove the extras.",
"page_title": "Find Duplicates",
"page_caption": "Find rows that repeat, then keep one and remove the extras.",
"help_md": "**When to use**\n- Customer or contact lists\n- Mailing lists from multiple sources\n- Product catalogs that may overlap\n\n**Steps**\n1. Upload your file\n2. Pick the column(s) that identify a row (email, phone, name+zip)\n3. Choose **Exact** or **Similar** matching\n4. Pick which row to keep (newest, longest, first)\n5. Preview, then export\n\n**Examples**\n- `John Smith` + `JOHN SMITH` → same person\n- `jane@co.com` + `jane@co.com ` → same email (trailing space)\n- `555-1234` + `(555) 1234` → same phone\n\n**Tip** Start with Exact; add Similar if you suspect typos."
},
"02_text_cleaner": {
"name": "Clean Text",
"description": "Trim extra spaces and strip out odd characters that copy-paste leaves behind.",
"page_title": "Clean Text",
"page_caption": "Trim extra spaces and strip out odd characters.",
"help_md": "**When to use**\n- Text copied from web pages, PDFs, or older systems\n- Files with inconsistent spacing\n- Data with hidden or special characters\n\n**Steps**\n1. Upload your file\n2. Pick the text columns to clean\n3. Choose options: trim spaces, remove invisible characters, normalize quotes\n4. Preview the changes\n5. Export\n\n**Examples**\n- ` hello world ` → `hello world`\n- `“smart quotes”` → `\"normal quotes\"`\n- `datawithhidden` → `datawithhidden`\n\n**Tip** Always preview — text changes can affect later steps like duplicate detection."
},
"03_format_standardizer": {
"name": "Standardize Formats",
"description": "Make dates, phone numbers, currency, names, and addresses look the same throughout.",
"page_title": "Standardize Formats",
"page_caption": "Make dates, phones, currency, and names look the same throughout.",
"help_md": "**When to use**\n- Data from multiple sources that wrote dates/phones differently\n- Before sending to a system that wants one format\n- Preparing data for analysis or charts\n\n**Steps**\n1. Upload your file\n2. Pick a column (date, phone, currency, etc.)\n3. Choose the target format\n4. Preview\n5. Repeat for other columns, then export\n\n**Examples**\n- `Jan 5, 2025` / `01/05/2025` / `5-Jan-25` → `2025-01-05`\n- `(555) 123-4567` / `555.123.4567` → `+1 555-123-4567`\n- `$1,234.50` / `1234.5 USD` → `1234.50`\n\n**Tip** Run on several columns in one session — each column remembers its chosen format."
},
"04_missing_handler": {
"name": "Fix Missing Values",
"description": "Find blank cells (even ones written as 'N/A' or '?') and fill them in or remove them.",
"page_title": "Fix Missing Values",
"page_caption": "Find blank cells (even hidden ones) and fill them in or remove them.",
"help_md": "**When to use**\n- Spreadsheets with gaps\n- Files where someone typed `N/A` or `-` instead of leaving a cell blank\n- Before importing into a system that rejects blanks\n\n**Steps**\n1. Upload your file\n2. Review which columns have blanks\n3. Pick a strategy per column: **fill**, **drop the row**, or **leave alone**\n4. For numbers, pick a fill value: average, median, zero, or your own\n5. Preview, then export\n\n**Examples**\n- `N/A`, `-`, ` ` → treated as blank\n- Blank salary → filled with the column average\n- Row with no email → dropped\n\n**Tip** Don't fill the row's identifier (email, ID) — drop the row instead."
},
"05_column_mapper": {
"name": "Map Columns",
"description": "Rename columns, change their order, and set each one as text, number, or date.",
"page_title": "Map Columns",
"page_caption": "Rename columns, change their order, and set each one as text, number, or date.",
"help_md": "**When to use**\n- Combining files from vendors with different column names\n- Forcing the layout your system expects\n- Cleaning up exports with extra or weirdly-named columns\n\n**Steps**\n1. Upload your file\n2. Match each incoming column to your standard name\n3. Set each column's type: text, number, or date\n4. Reorder or drop columns\n5. Export with the new layout\n\n**Examples**\n- `cust_email` → `Customer Email`\n- `amt` → `Amount` (set as number)\n- `notes_internal` → drop\n\n**Tip** Save the mapping if you'll get the same file format again next month."
},
"06_outlier_detector": {
"name": "Find Unusual Values",
"description": "Spot values that look wrong — way too high, way too low, or breaking your rules.",
"page_title": "Find Unusual Values",
"page_caption": "Spot values that look wrong — way too high, too low, or breaking your rules.",
"help_md": "**When to use**\n- Spotting typos, fraud, or bad imports in numeric data\n- Cleaning sensor or transaction data\n- Before reporting numbers to leadership\n\n**Steps**\n1. Upload your file\n2. Pick the numeric column to check\n3. Set a normal range (or use auto-detect)\n4. Review the flagged rows\n5. Choose: keep, remove, or cap to the limit\n\n**Examples**\n- Salary column with one row at `$9,999,999` → flagged\n- Age column with `250` → flagged\n- Rule: `price must be > 0` → flags negatives\n\n**Tip** Review flagged rows by hand — a real outlier is sometimes the most important data point."
},
"07_multi_file_merger": {
"name": "Combine Files",
"description": "Combine several CSV or Excel files into one — even if their columns don't match.",
"page_title": "Combine Files",
"page_caption": "Combine several CSV or Excel files into one — even if columns differ.",
"help_md": "**When to use**\n- Monthly reports across the year\n- Exports from different stores or branches\n- Multi-system data that needs to be in one file\n\n**Steps**\n1. Upload two or more files\n2. Confirm column matches (auto-detected; override if needed)\n3. Pick how to handle missing columns (skip, blank, default value)\n4. Preview the combined result\n5. Export the single file\n\n**Examples**\n- `January.csv` + `February.csv` → `2025.csv`\n- `NY-store.xlsx` + `LA-store.xlsx` → `all-stores.csv`\n- File A has `Email`, file B has `email_addr` → matched automatically\n\n**Tip** Add a `source` column so you can tell which file each row came from."
},
"08_validator_reporter": {
"name": "Quality Check",
"description": "Check your file against rules you set, and export a PDF or Excel report.",
"page_title": "Quality Check",
"page_caption": "Check your file against rules and export a PDF or Excel report.",
"help_md": "**When to use**\n- Before handing data off to a client or partner\n- Before a strict system import\n- Routine quality audits\n\n**Steps**\n1. Upload your file\n2. Pick the rules to check (required columns, valid emails, no duplicates)\n3. Run the check\n4. Review the score and findings\n5. Export the report as PDF or Excel\n\n**Examples**\n- Rule: `email column must look like an email` → 12 rows fail\n- Rule: `amount must be > 0` → 3 rows fail\n- Rule: `no duplicate customer IDs` → 5 duplicates found\n\n**Tip** Run this last in your cleanup, then keep the PDF as proof of quality."
},
"09_pipeline_runner": {
"name": "Automated Workflows",
"description": "Run several tools in a row — save the steps once, reuse them anytime.",
"page_title": "Automated Workflows",
"page_caption": "Run several tools in a row — save the steps and reuse them anytime.",
"help_md": "**When to use**\n- A cleanup you do every week or month\n- Multi-step processes you keep repeating\n- Onboarding teammates to your data routine\n\n**Steps**\n1. Pick the tools you want to run, in order\n2. Configure each step\n3. Save the workflow as a JSON file\n4. Next time, load the workflow and upload a fresh file\n5. Get the cleaned output in one click\n\n**Examples**\n- `Clean Text` → `Standardize Formats` → `Find Duplicates` → export\n- Saved as `weekly-customer-cleanup.json`\n- Shared with a teammate so they get the same result\n\n**Tip** Start with two or three tools. You can always edit and add more later."
},
"10_pdf_extractor": {
"name": "PDF to CSV",
"description": "Pull transactions out of bank-statement PDFs into a clean CSV file.",
"page_title": "PDF to CSV",
"page_caption": "Pull transactions out of bank-statement PDFs into a clean CSV file.",
"help_md": "**When to use**\n- Bank or credit-card statements\n- Vendor invoices with line-item tables\n- Any PDF with a transaction table\n\n**Steps**\n1. Upload one or more PDFs (batch is fine)\n2. Click **Scan** — rows that look like transactions are pulled out automatically\n3. Uncheck any rows you don't want\n4. Pick your date format (and turn on OCR if the PDF is a scanned image)\n5. Download the CSV\n\n**Examples**\n- Chase March statement → 87 transactions found\n- Drop in 12 months at once and get one combined CSV\n- Image-only scan + OCR → still works if Tesseract is installed\n\n**Tip** If a withdrawal shows as `(4.50)`, leave **Treat (4.50) as negative** on. Turn it off only if your statements use a different convention."
},
"11_reconciler": {
"name": "Reconcile Two Files",
"description": "Compare two lists of transactions (e.g. bank vs. ledger) and flag what doesn't match.",
"page_title": "Reconcile Two Files",
"page_caption": "Compare two lists of transactions (e.g. bank vs. ledger) and flag what doesn't match.",
"help_md": "**When to use**\n- Matching your bank statement to your books\n- Vendor invoices vs. payments sent\n- Inventory receipts vs. orders placed\n\n**Steps**\n1. Upload both files (e.g. bank export + accounting export)\n2. Pick the columns to match on (date, amount, reference)\n3. Set tolerances (e.g. date ±2 days, amount exact)\n4. Review four buckets: **matched**, **only in left**, **only in right**, **needs review**\n5. Export the results\n\n**Examples**\n- Bank `2025-03-15 $99.50` ↔ Books `2025-03-16 $99.50` → matched\n- Bank charge with no books entry → only in left\n- Same amount on the same day twice → flagged for review\n\n**Tip** Tighten the date tolerance once you trust the match — fewer ambiguous cases to review."
}
},
"nav": {
"section_review": "Data Review",
"section_analysis": "Analysis",
"section_cleaners": "Data Cleaners",
"section_transformations": "Transformations",
"section_automations": "Automations",
"review_page_title": "Review",
"home_page_title": "Home",
"file_analysis_title": "File Analysis",
"section_account": "Account",
"activate_title": "Activate",
"close_title": "Close",
"section_close": "Close",
"back_to_home": "← Back to Home"
},
"footer": {
"close": "Close",
"help": "Help",
"help_title": "DataTools",
"help_version": "Version {version}",
"help_support": "Support: {email}",
"help_license_label": "License",
"help_license_inactive": "Not activated",
"help_license_active": "{name}",
"help_license_expires": "Expires {date} ({days} days)",
"help_activate_link": "Activate now →",
"help_manage_link": "Manage license →",
"help_logs_label": "Log file",
"help_logs_link": "View all logs →",
"help_dismiss": "Close"
}
}