Come tradurre un file CSV
TABLE OF CONTENTS
CSV sembra semplice, ma la traduzione può facilmente causare problemi: le colonne si spostano, le virgolette si rompono, i caratteri non latini diventano illeggibili o gli ID vengono “tradotti” in qualcosa di inutilizzabile. Questa guida mostra un flusso di lavoro sicuro e pratico per tradurre un file CSV preservandone la struttura, oltre a una checklist di QA e soluzioni per i problemi comuni.
Se vuoi l’opzione più semplice, utilizza un traduttore compatibile con CSV (Metodo 1) invece di copiare il testo CSV in un traduttore generico.
Prima di importare il file tradotto, esegui la checklist di QA in questa guida per individuare tempestivamente problemi di colonne/codifica.
Cosa Rende Difficile la Traduzione dei CSV
Il CSV è testo semplice, ma contiene regole strutturali:
- Delimitatore: di solito la virgola (
,), a volte il punto e virgola (;) in alcune località. - Virgolette: i valori di testo possono essere racchiusi tra virgolette doppie (
"). Le virgolette all’interno dei valori devono essere escape (solitamente""). - A capo nelle celle: consentiti, ma solo se la cella è correttamente racchiusa tra virgolette.
- Codifica: il tuo file potrebbe essere UTF‑8, UTF‑8 con BOM, o codifiche legacy.
- Tipi di dati misti: numeri, date, SKU, ID, URL e placeholder spesso devono rimanere invariati.
Gli strumenti di traduzione che trattano il CSV come “solo testo” possono accidentalmente modificare i caratteri strutturali (delimitatori/virgolette/a capo) o trasformare i tipi di dati (date/numeri), causando importazioni fallite.
Prima di Iniziare
Questi passaggi rapidi prevengono la maggior parte dei problemi nella traduzione dei CSV:
-
Crea una copia di backup
- Salva
file.csv→file.original.csv. - Se il CSV contiene dati di clienti, rimuovi o anonimizza i campi sensibili prima di caricarlo ovunque.
- Salva
-
Identifica i campi “da non tradurre” Mantieni questi invariati:
- ID, chiavi, SKU, numeri d’ordine
- URL, email, percorsi file
- Segnaposto e variabili (
{name},{{amount}},%s,:count) - Tag, valori enum, codici di stato interni (
PAID,REFUNDED) - Qualsiasi campo utilizzato dal codice (API keys, JSON blobs, HTML snippets)
- Se hai dubbi, vedi: /what-not-to-translate
-
Conferma delimitatore, regole di citazione e terminazioni di riga
- Se apri il CSV e “sembra una sola colonna”, probabilmente il delimitatore è errato.
- Il CSV tipico utilizza il delimitatore
,e le virgolette"(vedi RFC 4180: https://www.rfc-editor.org/rfc/rfc4180).
-
Conferma codifica
- Preferisci UTF‑8 per contenuti multilingue.
- Se aprirai il CSV tradotto in Excel su Windows, potresti aver bisogno di UTF‑8 con BOM per evitare caratteri illeggibili.
- Informazioni sul BOM: https://unicode.org/faq/utf_bom.html
-
Opzionale ma consigliato: aggiungi una colonna stabile
row_idPer i CSV che verranno reimportati o confrontati in seguito, aggiungi una colonna chiave unica (ad esempio,row_id) così puoi verificare che le righe non siano state riordinate.
Metodo 1 — Traduttori online compatibili con CSV (consigliato)
I traduttori compatibili con CSV trattano il CSV come dati strutturati, non “solo testo”, quindi è meno probabile che rompano delimitatori, virgolette o la disposizione di righe/colonne. Esegui sempre la checklist di QA prima di importare.
Confronto opzioni neutrali
| Opzione | Punti di forza | Compromessi | Migliore per |
|---|---|---|---|
| OpenL CSV Translator Online | Progettato per la struttura CSV; caricamento/scaricamento veloce | Workflow basato su upload; non ideale per dati sensibili | Bozze CSV rapide e affidabili |
| DeepL / Google Cloud / AWS Translate (API) | Automatizzabile; buona qualità; adatto a pipeline batch | Richiede competenze tecniche + gestione attenta del CSV | Team che traducono molti file |
| CAT tools (Smartling, Lokalise, Phrase, ecc.) | Terminologia/QA, collaborazione | Più configurazione + costi | Localizzazione di prodotto/UI su larga scala |
| Formule di foglio di calcolo (Sheets/Excel) | Nessun strumento aggiuntivo | Facile formattare automaticamente o corrompere il CSV | Solo file piccoli e a basso rischio |
Limiti e note
- Non caricare dati sensibili che non sei autorizzato a condividere. Se necessario, esporta prima un CSV sanificato.
- Se il tuo sistema richiede nomi di intestazione specifici, non tradurre la riga di intestazione.
- Esegui sempre la checklist di QA prima di importare il CSV tradotto.
- Se utilizzi uno strumento online, controlla i limiti di upload e i formati supportati nella pagina dello strumento.
Procedura passo-passo
-
Apri lo strumento
- Esempio: https://doc.openl.io/translate/csv
-
Scegli le lingue
- Seleziona le lingue di destinazione.
-
Carica il tuo CSV
- Carica o trascina il tuo file
.csv. - Se il tuo CSV contiene più colonne di testo, il traduttore tradurrà il contenuto mantenendo sicuri separatori e virgolette.
- Carica o trascina il tuo file
-
Scarica il CSV tradotto
- Salvalo con un nome chiaro come
products_es.csv.
- Salvalo con un nome chiaro come
Best practices per risultati migliori
- Traduci solo le colonne visibili all’utente: titoli dei prodotti, descrizioni, stringhe UI, note rivolte ai clienti.
- Mantieni stabili i codici: non tradurre
status,type,sku,category_id,url,handle.
Metodo 2 — Google Sheets o Excel
Questo workflow può funzionare, ma è più facile modificare accidentalmente formattazione, delimitatori o tipi.
Google Sheets (file piccoli)
-
Importa il CSV
- Google Sheets → File → Importa → Carica.
- Se i tuoi dati appaiono in una sola colonna, scegli il delimitatore corretto (virgola vs punto e virgola).
-
Proteggi le colonne “da non tradurre”
- Format le colonne ID come Testo normale prima (es. SKU, order id) per evitare
00123→123.
- Format le colonne ID come Testo normale prima (es. SKU, order id) per evitare
-
Traduci solo le colonne di destinazione
- Usa
=GOOGLETRANSLATE(A2,"en","es")in una nuova colonna, poi Copia → Incolla speciale → Solo valori. - Non eseguire formule di traduzione su colonne che contengono URL, segnaposto, codici o formule.
- Usa
-
Esporta
- File → Scarica → Valori separati da virgola (.csv) (Google Sheets esporta in UTF‑8).
Excel (Windows) — come importare ed esportare correttamente in UTF‑8
Excel è il luogo in cui gli errori di codifica si verificano più frequentemente. Segui questi passaggi per evitare caratteri illeggibili e problemi con i delimitatori.
A) Importa CSV senza caratteri illeggibili
- Dati → Da testo/CSV
- Nella finestra di importazione:
- Origine file / Codifica: scegli 65001: Unicode (UTF‑8) (la dicitura può variare a seconda della versione)
- Delimitatore: Virgola (
,) o Punto e virgola (;) in base al tuo file
- Clicca su Carica (o Trasforma dati se hai bisogno di forzare le colonne ID come Testo)
B) Esporta come UTF‑8 (e quando usare BOM)
- File → Salva con nome
- Per Salva come tipo, scegli:
- CSV UTF‑8 (delimitato da virgola) (*.csv) (consigliato per testo multilingue)
- Se il tuo sistema a valle rifiuta BOM, esporta UTF‑8 senza BOM usando uno script (vedi “Batch Processing”) oppure salva nuovamente con un editor di codice.
Errori comuni
- Formattazione automatica: i fogli di calcolo possono convertire ID come
00123in123. - Conversione delle date:
2026-01-09può essere visualizzato in modo diverso ed esportato in modo incoerente. - Cambiamento del delimitatore: le esportazioni possono passare a
;a seconda delle impostazioni locali.
Se utilizzi questo metodo, la sezione QA qui sotto è obbligatoria.
Workflow avanzato — Tabella di traduzione
Se il tuo CSV è un mix di dati “da tradurre” e “da non tradurre”, crea una tabella di traduzione separata in modo che la traduzione non tocchi mai i campi sensibili.
Passo 1: Crea una tabella di traduzione
Crea un nuovo CSV (o foglio) come:
| row_id | field | source_text | context | translated_text |
|---|---|---|---|---|
| 101 | product_title | Wireless Mouse | E-commerce product title | Mouse Wireless |
| 101 | product_desc | Silent clicks, 2-year battery | Short description | Click silenziosi, batteria da 2 anni |
| 102 | product_title | USB-C Charger | E-commerce product title | Caricatore USB-C |
| 102 | product_desc | Fast charging for phones and tablets | Short description | Ricarica rapida per telefoni e tablet |
| 103 | product_title | Stainless Steel Water Bottle | Product title | Bottiglia d’acqua in acciaio inox |
| 103 | product_desc | BPA-free, keeps drinks cold 24h | Short description | Senza BPA, mantiene le bevande fredde per 24 ore |
| 104 | product_title | Noise-Canceling Headphones | Product title | Cuffie con cancellazione del rumore |
| 104 | product_desc | Over-ear, Bluetooth 5.3 | Short description | Over-ear, Bluetooth 5.3 |
Passo 2: Traduci solo source_text
Traduci la colonna source_text con il workflow scelto e inserisci il risultato in translated_text. (Un traduttore online compatibile con CSV è generalmente più sicuro rispetto ai fogli di calcolo.)
Passo 3: Rimappa le traduzioni nei dati originali
Unisci tramite row_id + field e scrivi il testo tradotto nel dataset originale. Questo garantisce che ID, prezzi e campi di sistema non vengano mai tradotti.
Esempio (Python + pandas)
import pandas as pd
# Dati originali (mantieni i tipi stabili; tratta gli ID come stringhe)
orig = pd.read_csv("products.csv", dtype=str, keep_default_na=False)
# Tabella di traduzione dopo la traduzione
tt = pd.read_csv("translation_table_es.csv", dtype=str, keep_default_na=False)
# Rimodella in un formato largo (una riga per row_id)
wide = (
tt.pivot(index="row_id", columns="field", values="translated_text")
.add_suffix("__translated")
.reset_index()
)
merged = orig.merge(wide, on="row_id", how="left")
# Scrivi indietro (esempi di campi)
merged["product_title"] = merged["product_title__translated"].where(
merged["product_title__translated"].ne(""), merged["product_title"]
)
merged["product_desc"] = merged["product_desc__translated"].where(
merged["product_desc__translated"].ne(""), merged["product_desc"]
)
merged.drop(columns=[c for c in merged.columns if c.endswith(“__translated”)], inplace=True) merged.to_csv(“products_es.csv”, index=False, encoding=“utf-8-sig”)
#### Esempio (pattern di join/update SQL)
```sql
-- translation_table(row_id, field, translated_text)
-- products(row_id, product_title, product_desc, ...)
UPDATE products p
SET product_title = t.translated_text
FROM translation_table t
WHERE p.row_id = t.row_id
AND t.field = 'product_title'
AND t.translated_text IS NOT NULL
AND t.translated_text <> '';
Elaborazione batch (più file CSV)
Se hai bisogno di tradurre molti file CSV, evita passaggi manuali su fogli di calcolo e utilizza una pipeline ripetibile:
-
Standardizza gli input
- Normalizza in UTF‑8 (o UTF‑8 con BOM se il tuo importatore lo richiede).
- Assicurati che ogni file abbia una chiave stabile (
row_id/id) per il mapping.
-
Genera tabelle di traduzione per ogni file
- Estrai solo i campi traducibili in
translation_table_<file>.csv. - Mantieni una colonna
source_filese preferisci una tabella combinata per tutti i file.
- Estrai solo i campi traducibili in
-
Traduci le tabelle
- Usa un workflow API o uno strumento compatibile con CSV file per file.
-
Unisci i risultati ed esporta
- Mappa tramite
row_id + field(esource_filese utilizzato). - Esporta con la codifica richiesta dal tuo sistema a valle.
- Mappa tramite
Loop minimale di partenza (per processare molti file in modo coerente):
for f in ./input/*.csv; do
base="$(basename "$f" .csv)"
# 1) estrai la tabella di traduzione (implementa secondo il tuo schema)
# 2) traduci translation_table_${base}.csv -> translation_table_${base}_translated.csv
# 3) unisci e esporta ${base}_translated.csv
echo "Processed: $base"
done
Checklist QA post-traduzione
Dopo aver scaricato il CSV tradotto, esegui questi controlli prima dell’importazione:
Controlli rapidi
- Confronta il conteggio delle righe (macOS/Linux):
wc -l file.original.csv file.translated.csv - Controlla la coerenza dei delimitatori aprendo il file in un editor di testo semplice e confermando che i separatori siano uguali.
- Facoltativo: verifica la coerenza del numero di colonne con Python:
python -c "import csv,sys; p=sys.argv[1]; r=list(csv.reader(open(p,newline='',encoding='utf-8'))); print('rows',len(r),'max_cols',max(len(x) for x in r))" file.translated.csv
Se ricevi un errore di decodifica Unicode, converti prima il CSV in UTF-8, oppure prova con utf-8-sig:
python -c "import csv,sys; p=sys.argv[1]; r=list(csv.reader(open(p,newline='',encoding='utf-8-sig'))); print('rows',len(r),'max_cols',max(len(x) for x in r))" file.translated.csv
Controlli sulla struttura
- Conteggio delle righe invariato: stesso numero di righe dati dell’originale.
- Conteggio delle colonne invariato: ogni riga ha lo stesso numero di colonne.
- Delimitatore invariato: virgola vs punto e virgola coerente con il tuo importatore.
- Virgolette valide: i campi con virgole/a capo rimangono correttamente racchiusi tra virgolette.
Controlli sull’integrità dei dati
- ID e chiavi invariati: confronta
sku,id,row_id,handle. - URL/email invariati: nessuno spazio aggiunto, nessun dominio tradotto.
- Numeri preservati: prezzi, quantità, decimali rimangono uguali.
- Segnaposto preservati:
{name},{{count}},%s,:valuerimangono intatti.
Controlli sulla qualità della traduzione
- Terminologia coerente: i termini chiave dei prodotti sono tradotti nello stesso modo tra le righe.
- Vincoli di lunghezza rispettati: le etichette UI non sono troppo lunghe (importante per le app).
- Nessun residuo di lingua mista: cerca parole comuni della lingua sorgente che dovrebbero essere tradotte.
Risoluzione dei problemi comuni nella traduzione di file CSV
1) Le colonne risultano spostate dopo la traduzione
Sintomi
- Il tuo importatore segnala “numero di colonne errato”
- I valori appaiono sotto le intestazioni sbagliate
Cause probabili
- Un campo tradotto contiene una virgoletta non escapeata (
") - Un campo tradotto contiene una virgola/nuova riga ma non è correttamente racchiuso tra virgolette
Soluzione
- Assicurati che il CSV utilizzi le regole corrette di racchiudimento tra virgolette (virgolette doppie attorno ai campi; virgolette interne escapeate come
""). - Traduci nuovamente utilizzando un workflow compatibile con CSV (anziché tradurre testo CSV grezzo).
2) Caratteri illeggibili (mojibake) come ???? o é
Cause probabili
- Codifica errata in esportazione/importazione (UTF‑8 vs legacy)
Soluzione
- Esporta come UTF‑8.
- Se utilizzi Excel su Windows, prova UTF‑8 con BOM.
- Evita copia/incolla manuale che può modificare la codifica.
3) Zeri iniziali scomparsi (00123 → 123)
Cause probabili
- Formattazione automatica del foglio di calcolo (Excel/Sheets)
Soluzione
- Tratta le colonne ID come testo prima di modificare/esportare.
- Preferisci tradurre con un workflow compatibile con CSV che non modifichi il tipo dei dati.
4) Date o decimali hanno cambiato formato
Esempi
1,234.56diventa1.234,562026-01-09diventa09/01/2026
Soluzione
- Non tradurre colonne numeriche/data.
- Mantieni i valori leggibili dalla macchina; localizza i formati di visualizzazione nell’interfaccia utente, non nei dati grezzi.
5) Problema di sicurezza: CSV injection (formule Excel)
Se una cella tradotta inizia con =, +, - o @, aprendo il file in Excel questa può essere valutata come formula.
Soluzione
- Per i CSV che verranno aperti in fogli di calcolo, esegui l’escape delle celle a rischio anteponendo un apostrofo (
') o sanifica durante l’esportazione. - Considera di rimuovere i caratteri iniziali di formula dal testo fornito dagli utenti prima della traduzione/importazione.
- Riferimento: https://owasp.org/www-community/attacks/CSV_Injection
FAQ
Come posso tradurre un CSV senza rompere le colonne?
Utilizza un workflow compatibile con CSV e verifica la struttura prima dell’importazione:
- Traduci con un metodo compatibile con CSV (Metodo 1)
- Esegui i “Quick checks” + checklist QA per confermare il numero di righe/colonne e la validità delle virgolette
- Se il tuo CSV mescola campi sensibili e testo rivolto all’utente, utilizza il “Workflow Avanzato — Translation Table”
Posso tradurre solo una colonna in un CSV?
Sì. L’approccio più sicuro è creare una tabella di traduzione (row_id + source_text + context), tradurre solo quella e poi rimappare il risultato. Questo previene modifiche accidentali agli ID e ai campi numerici.
Devo tradurre la riga di intestazione?
Dipende dal tuo caso d’uso:
- Traduci le intestazioni se il CSV sarà letto da persone (report, esportazioni).
- Non tradurre le intestazioni se il tuo sistema/importatore si aspetta nomi di campo specifici (importazioni e-commerce, database, app).
Il mio CSV usa i punti e virgola (;) invece delle virgole. Va bene lo stesso?
Sì, ma assicurati che il tuo strumento/importatore usi sempre lo stesso delimitatore. In molte località europee il punto e virgola è il valore predefinito. Una discordanza è una delle cause più comuni di errore nell’importazione dei CSV.
Come gestisco il testo su più righe (a capo) nelle celle?
Le celle multilinea sono consentite nei CSV, ma devono essere correttamente racchiuse tra virgolette. Se il contenuto tradotto include interruzioni di riga, si raccomanda fortemente un traduttore compatibile con CSV per evitare rotture di riga indesiderate.
Strumenti
- OpenL CSV Translator Online (esempio di strumento compatibile con CSV): https://doc.openl.io/translate/csv
- Per flussi di lavoro con Excel: vedi anche “How to Translate Excel Online”: /how-to-translate-excel-online
- Per contenuti Markdown: “How to Translate Markdown”: /how-to-translate-markdown
- Se hai bisogno di regole su cosa non modificare: “What Not to Translate”: /what-not-to-translate
Riepilogo
Per tradurre un file CSV in modo sicuro, preserva la struttura (delimitatore, virgolette, codifica) e proteggi i campi “da non tradurre” (ID, URL, segnaposto, numeri). Preferisci flussi di lavoro compatibili con CSV, quindi verifica con la checklist di QA prima dell’importazione.


