---
title: "Files and formats"
description: "See every file format AI Glot accepts, the size ceiling for each one, what structure is preserved on the round trip, and how to prepare an export that re-imports cleanly."
canonical: "https://ai-glot.com/docs/platform/files-and-formats"
updated: "2026-08-31"
---

# Files and formats

AI Glot accepts twelve format families. Whatever you upload, the same promise holds: the words change and the structure does not, so the file goes back where it came from.

## What you can upload

Size ceilings are **per format**, not global. A limit that works for a spreadsheet would be far too generous for a locale file, where a few megabytes is already an enormous catalogue.

| Format            | Extensions       | Ceiling |
| ----------------- | ---------------- | ------: |
| CSV               | `.csv`           |   60 MB |
| Excel             | `.xlsx`          |   50 MB |
| Archive           | `.zip`           |   20 MB |
| XLIFF             | `.xlf`, `.xliff` |   12 MB |
| Android resources | `.xml`           |   12 MB |
| .NET resources    | `.resx`          |   12 MB |
| JSON              | `.json`, `.arb`  |    8 MB |
| YAML              | `.yaml`, `.yml`  |    4 MB |
| gettext           | `.po`, `.pot`    |    4 MB |
| iOS strings       | `.strings`       |    4 MB |
| Java properties   | `.properties`    |    4 MB |
| Subtitles         | `.srt`           |    4 MB |

A file over its ceiling is refused before any bytes are stored, so an oversized upload costs you nothing but the time to notice.

> **Info: The extension decides the parser**
>
> Identical bytes named `strings.xml` and `export.csv` are read by different parsers. `.xml` covers both Android `strings.xml` and .NET-style payloads. Content detection picks between them, and both share the 12 MB ceiling. `.arb` is Flutter's JSON and is handled as JSON.

## What survives the round trip

Structure is not decoration; it is what makes the result usable. Each family has its own idea of what must not change.

| Family                   | Preserved exactly                                                            |
| ------------------------ | ---------------------------------------------------------------------------- |
| CSV, Excel               | Column order, identifiers, prices, URLs, blank rows, whitespace              |
| JSON, YAML               | Every key, nesting level, array order, indentation and interpolated variable |
| XLIFF                    | Localization units, placeholders and inline markup                           |
| gettext                  | Message IDs, contexts and plural forms                                       |
| Android, iOS, .NET, Java | Resource keys and their format specifiers                                    |
| Subtitles                | Cue numbering and timecodes                                                  |
| Archive                  | The folder tree and every filename inside it                                 |

Keys are structure, not words. A translated JSON file drops straight back into the repository because nothing outside the values moved.

## Per-cell length

Each individual source value selected for translation can hold up to **50,000 Unicode characters**. Split longer HTML or editorial content into several rows or smaller fields before uploading.

A translated value is often longer than its source, so AI Glot keeps storage headroom above the input ceiling for the finished file.

![Upload drop zone](/docs/screenshots/platform/translation-upload-empty.webp)

_Start with the drop zone or the file picker_

## Preparing a spreadsheet export

CSV and Excel are the two formats people usually build by hand, and the two where a careless export causes the most trouble later.

1. **Keep stable identifiers**

   Include the key your destination system uses to match rows, such as a product ID or a record ID, and leave it out of what you ask to translate.
2. **Give columns unique names**

   Replace blank or duplicate headers before uploading. `description_en` and `description_fr` are far easier to reason about than two columns both called `description`.
3. **Export CSV as UTF-8**

   Choose the UTF-8 CSV option in your spreadsheet tool. Renaming a file's extension does not convert its contents, but you no longer need to convert at all, since `.xlsx` is accepted directly.
4. **Keep a source copy**

   Structure is preserved, but the original export is still the safest rollback if your destination system rejects an import for reasons of its own.

## CSV specifics

| Requirement  | Supported behaviour                                          |
| ------------ | ------------------------------------------------------------ |
| Encoding     | Strict UTF-8                                                 |
| Delimiter    | Comma or semicolon, detected automatically                   |
| Line endings | LF, CRLF or CR                                               |
| Quoting      | RFC 4180, including embedded commas and line breaks          |
| Headers      | Every column needs a unique, non-empty header                |
| Rows         | At least one data row; every row must match the header width |

## Rejected files

The browser applies the same structural rules as the translation engine before the upload starts, so a malformed file fails in front of you rather than several minutes later. It rejects empty files, invalid UTF-8, unclosed or unescaped quotes, empty or duplicate headers, missing data rows, rows with the wrong number of columns, an unsupported extension, and any file over its format's ceiling.

Over the API the same refusals arrive as [`unsupported_format`](/docs/api/errors#unsupported_format) and [`file_too_large`](/docs/api/errors#file_too_large).
