# Formats

> Supported file formats, layouts and placeholder styles, with recipes for Laravel, i18next, Android and iOS.

An **export profile** describes how a project's files look on disk. Upload and download use
the same profile, so files round-trip with a clean git diff.

## What a profile sets

| Setting | Options |
| --- | --- |
| Format | `json`, `php_array` (Laravel), `xml` (Android), `strings` (Apple), `plist` (Apple) |
| Structure | `flat`, `nested`, `per_ns_flat`, `per_ns_nested` (one file per namespace) |
| Namespace separator | `.`, `:`, `/` or none |
| Key separator | `.`, `-`, `_`, camelCase, or none (the key is the source text) |
| Placeholder style | `laravel` `:name`, `icu` `{name}`, `printf` `%s`, `mustache` `{{name}}`, `apple` `%@` |
| Folders | per-locale folders (`en/…`) or flat files (`en.json`) |

Placeholders are checked: a translation whose placeholders do not match the source cannot be
saved, and machine translation keeps them intact.

## Recipes

| Stack | Typical files | Profile |
| --- | --- | --- |
| Laravel | `lang/en/auth.php`, `lang/en/validation.php` | `php_array`, `per_ns_nested`, separator `.`, `laravel` placeholders |
| Laravel JSON | `lang/en.json` | `json`, `flat`, no folders, key separator none |
| i18next / React / Vue | `locales/en/translation.json` | `json`, `nested`, `icu` or `mustache`, `file_name: "translation"` |
| Android | one XML string resource file per locale | `xml`, `flat`, `printf` placeholders |
| iOS / macOS | one `.strings` or `.plist` file per locale | `strings` or `plist`, `flat`, `apple` placeholders |

Layouts are always locale-first (`en.json` or `en/…`). You do not need to pick these by hand: the agent playbook detects the layout and either reuses
a matching profile or creates one with `rodarion profile create`.