How to Translate a CSV File Without Breaking the Columns You Need
To translate a CSV file, use a tool that lets you choose which columns get translated and leaves the rest of the file alone. The CSV File Translator does that: you untick the columns that hold SKUs, prices, IDs and URLs, and only the cells you selected are ever sent for translation. The delimiter, the quoting, the line endings and every unselected column come back byte-identical.
A CSV is the file people most often hand to a general translator and most often regret. It looks like plain text, so it seems safe. Then the result comes back and the SKUs have been “translated”, the prices have picked up a European decimal comma, a product name containing a comma has silently split into two columns, and your import script rejects the whole file on row 3.
None of that is the translator being bad at Spanish. It is a translator being handed a file where only some of the text is language.
A CSV holds two kinds of columns
Open any export, from Shopify, from a PIM, from a support tool, and you are looking at two different things sitting side by side.
Some columns are prose. Product names, descriptions, support replies, survey answers, marketing copy. A human reads these, and they are the entire reason you are translating the file.
The rest is machinery. sku, category_id, price_usd, stock_status, product_url, support_email. Your systems read these. A SKU is not a word, it is an address. in_stock is not a phrase, it is a value your import switches on. Translate in_stock to en_stock and every row quietly lands in the wrong state.
So the rule is narrow: translate the prose columns, leave the machinery alone, and do not touch the shape of the file while you are at it.
Translating the file
The CSV File Translator is built to that rule. Nothing gets sent for translation unless you selected its column.
- Open the CSV File Translator.
- Drop your
.csvin, or click to browse for it. - Untick every column that is not prose.
- Pick your target language under To, then click Translate File.

Your file is read in your own browser first, so the column list appears before anything is uploaded. That also means the delimiter is detected up front. Semicolon files, the European Excel default, and tab-separated .tsv are handled without you doing anything.
Now the step that decides whether this works.

Two columns are ticked here, product_name and short_description. Everything else is off. Untick generously: if you are not certain a column is read by a human, turn it off. What ships to production should never be a guess.
Notice the greyed columns still appear in the preview. They are not being removed, they are being protected. They come back in the output exactly as they went in.
There is a second safety net under that, and it is worth knowing about even though you should not lean on it. Numbers, IDs, URLs, email addresses and dates are skipped automatically even inside a column you ticked. So the support_email cells would have survived a mis-tick anyway. Treat that as a backstop, not as a reason to skip the column picker.
The glossary is where consistency comes from
Open the glossary box before you translate. On a catalog this is the difference between a file you can ship and a file someone has to read line by line.
A model translating 400 rows independently will render the same product term three different ways across those rows, because each row is a fresh decision. The glossary removes the decision:
Standing Desk Converter = Convertidor de escritorio
Light Bar = Barra de luz
Whatever you put on the right is what ships, everywhere the term appears. That cuts both ways, so choose the term deliberately. The tool will not second-guess your wording, and that is the point: your catalog vocabulary is a decision your team makes once, not something a model should re-decide per row.
You can also pin a term to itself, Acme = Acme, to keep a brand name out of the translation entirely.
What comes back
Here is the actual result from that file, original on the left, Spanish on the right.

Read across a row and you can check the whole contract at once.
ACM-1042 is still ACM-1042. CAT-19 is still CAT-19. 29.00 is still 29.00, with the dot where it was, not a comma. The URL and the support address are untouched. The header row is still in English, because the header names are what your import maps against.
The prose moved. “Adjustable Laptop Stand” became “Soporte ajustable para portátil”. “Mechanical Keyboard” became “Teclado mecánico”. And both glossary terms held: row ACM-6320 came out as “Convertidor de escritorio”, exactly as specified, and “Light Bar” became “Barra de luz para monitor”.
Look at row ACM-3187. In the original, the product name is "Desk Lamp, Warm White" in quotes, because it contains a comma. In the output it is "Lámpara de escritorio, blanco cálido", still quoted. That single detail is the one that breaks most CSV translation attempts: a cell whose translation contains a comma has to be re-quoted on the way out, or every downstream row shifts by a column.
The header reads 16/16 cells translated (100%), and that number is not decoration. When a cell comes back in the source language, this tool says so, in the heading, before you download. Partial results are reported as partial rather than presented as success.
Tested, not promised
The CSV engine has a public test harness. As of the run on 2026-08-01 it passes 4 of 4 fixtures: an app-strings export, a product catalog, a pipe-delimited survey, and a file of deliberate edge cases. Across those fixtures it saw 80 strings, selected 42 for translation, deliberately skipped 38, and protected 5 placeholders.
The skipped count is the interesting half. More than a third of the strings in a normal CSV should never be translated, and a tool that translates all 80 is not being more thorough, it is being wrong 38 times. The full results are on the evals page.
What “free” means here, and at the alternative
The closest free CSV translator is ai-glot.com, and it is a real tool. Worth knowing exactly where the free line sits at each of us, because their free tier and their app are two different products.
Their free no-signup CSV tool states a cap of 500 rows and 10,000 words, and 3 batches per day. Your translated file is available to download for 1 hour after it finishes. Glossaries are not included: their page is straightforward that the free no-login tool is deliberately lightweight and does not carry workspace glossaries. For those you sign up, which starts you at 2,000 monthly word credits plus a 5,000-credit signup bonus.
Ours has no row cap, no word cap, and no daily limit. The glossary is in the free tool, with no account. The cap we do have is 400 KB per file, so be honest about that when you compare: a very large catalog will need splitting, and that is a real constraint rather than a footnote. In practice 400 KB of CSV text is well past 10,000 words, but if your file is bigger, split it by rows and translate the parts.
Two other things we do not do yet, said plainly because you should not find out mid-task: there is no multi-file batch mode on the CSV tool, and no multi-language run that hands you a ZIP. One file, one target language, as many times as you like. If you have a job that does not fit, tell us about it rather than fighting the limit.
A short checklist before you import
- Untick every column a human does not read, then untick one more you were unsure about.
- Put your product vocabulary in the glossary before the first run, not after the third.
- Keep the header row in the source language unless you know your importer maps by position.
- Open the result in a spreadsheet and check the column count on a row whose text contains a comma.
- Check the coverage number in the heading. If it does not say 100%, run it again before you ship it.
Ready when you are: the CSV File Translator is free, needs no account, and keeps no copy of your file.
If your data lives in a real spreadsheet rather than an export, the Excel Translator does the same job on .xlsx and leaves your formulas calculating. If it is an app locale file, the JSON Translator translates values while keeping every key.