Bulk Translate

Batch Translation

Tips, features, and best practices for translating large batches of text efficiently.

Bulk Translate is designed for translating 10–100 rows across 1–5 languages. This guide covers the features and workflow patterns that make batch translation fast and reliable.

Concurrency & Performance

Translations run up to 7 at a time in parallel. The remaining cells are queued and processed as slots free up. This concurrency limit balances speed against API rate limits — most providers allow at least 7 concurrent requests on paid tiers.

What to expect:

  • A 10-row × 3-language batch (30 translations) completes in a few seconds
  • A 100-row × 5-language batch (500 translations) takes 1–2 minutes depending on model speed
  • You can cancel at any time — click Cancel in the toolbar to abort all in-flight and queued translations

To optimize speed:

  • Use faster models (gpt-4o-mini, claude-haiku-4-5, gemini-2.0-flash) for large batches
  • Reduce the number of target languages if you're hitting rate limits
  • Run smaller batches (10–20 rows at a time) rather than all 100 at once

Column Colors

Color-code your language columns to make the grid easier to scan — especially useful when working with multiple languages.

  • Click the colored dot on any language chip in the language bar
  • Pick from 10 Radix-based colors that automatically adapt to light and dark themes
  • The column header and all cells in that column inherit the color
  • Colors persist across sessions

To remove all colors at once, click the palette icon in the toolbar.

Language Presets

If you frequently switch between language sets, presets save you time.

  • Save — Click the bookmark icon, enter a name, and your current languages are saved
  • Load — Click a saved preset to instantly switch to that language set
  • Manage — Delete presets you no longer need

Presets store language codes and their order only — they don't include column colors or other settings.

Font Size

Toggle between S, M, and L in the toolbar to adjust text size. This is especially useful for:

  • Small — scanning large batches where density matters
  • Medium — general use
  • Large — reviewing translations in detail or presenting to others

The setting persists across sessions. The default is Large.

Theme & Dark Mode

The app includes six complete theme palettes, each with light and dark variants:

  • Default — clean neutral with violet accents
  • Nord — arctic, bluish pastels
  • Catppuccin — warm, muted pastels
  • Dracula — dark with vibrant accents
  • Solarized — earthy, low-contrast
  • Gruvbox — retro, warm earth tones

Toggle dark mode from the sun/moon icon in the header. Switch themes in Settings → Appearance. All preferences persist in your browser.

Export Formats

CSV

Standard comma-separated values. The first row is a header (Input, language names). Each subsequent row contains the input text followed by translations. Values containing commas are automatically quoted.

Best for: Spreadsheets, data analysis, localization tools

JSON

Structured output with targetLanguages array and rows array. Each row has an input field and a translations object keyed by language code. Missing translations are null.

Best for: Scripts, APIs, content pipelines

Copy to Clipboard

Tab-separated text — paste directly into Excel, Google Sheets, or any text editor. Uses your configured delimiter (tab, comma+space, space, newline, or custom).

Best for: Quick one-off exports, sharing results

Troubleshooting

"Authentication failed" error on every cell: Your API key is invalid or expired. Check Settings and verify your key with your provider.

"Rate limited" error on some cells: Your API tier has a low rate limit. Reduce concurrency (translate fewer languages at once) or upgrade your API plan.

Translations are slow: Switch to a faster model. gpt-4o-mini and claude-haiku-4-5 are 3–5× faster than their full-size counterparts and often adequate for translation.

Placeholders are being translated: Ensure your placeholders use one of the supported formats ({var}, {{var}}, %s). If they still get modified, the tokenization safety net should catch it — but please report the issue.