{ "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- `data​with​hidden` → `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" } }