Lingo.dev + .csv (Data)
Lingo.dev CLI translates CSV files while preserving structure, headers, and data integrity for content management and data localization. The CLI maintains exact CSV format and delimiters, keeps column names unchanged, processes only text content while preserving numbers and dates, handles UTF-8 and various character encodings safely, and works seamlessly with Excel, Google Sheets, and database imports.
Quick Setup
Configure for CSV files with locale-based naming:
{
"locale": {
"source": "en",
"targets": ["es", "fr", "de"]
},
"buckets": {
"csv": {
"include": ["data/[locale].csv"]
}
}
}
Reminder: [locale]
is a placeholder that should remain in the config literally, as it's replaced with the actual locale during CLI run.
Translate CSV Data
npx lingo.dev@latest i18n
Preserves CSV structure, headers, and data types while translating text content in specified columns.
CSV Structure Handling
Content with Headers
id,title,description,category
1,"Getting Started","Learn the basics quickly","Tutorial"
2,"Advanced Features","Deep dive into advanced topics","Guide"
3,"API Reference","Complete API documentation","Reference"
Headers remain unchanged while translatable content gets localized.
Mixed Data Types
product_id,name,price,description,created_date
SKU001,"Premium Widget",29.99,"High-quality widget for professionals","2024-01-15"
SKU002,"Basic Tool",9.99,"Simple tool for everyday use","2024-01-16"
Only text columns are translated; numbers, dates, and IDs stay intact.
Advanced Features
Custom Delimiter Support
Works with various CSV dialects:
- Comma-separated:
value1,value2,value3
- Semicolon-separated:
value1;value2;value3
- Tab-separated:
value1 value2 value3
Quote Handling
title,content,tags
"Article Title","Content with ""quotes"" inside","tag1,tag2"
"Another Article","Simple content","single-tag"
Preserves CSV quoting and escaping conventions.
Advanced Configuration
Multiple CSV Files
"csv": {
"include": [
"data/[locale].csv",
"content/[locale]/*.csv"
]
}
Lock Specific Columns
"csv": {
"include": ["data/[locale].csv"],
"lockedKeys": ["id", "price", "created_date", "status"]
}
Use column headers as keys to prevent translation of specific columns.