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.