Upload your .yml files, edit or auto-translate in the browser, and export back to the structure your app expects.
# Authentication screen
auth:
login:
title: Sign in to your account
email_label: Email address
password_label: Password
submit: Log in
forgot_password: Forgot your password?
register:
title: Create an account
submit: Sign up
# Dashboard
dashboard:
welcome: Welcome back, {name}!
notifications:
empty: You have no new notifications
unread: You have {count} unread notificationsYAML uses indentation instead of braces and commas, so translation files stay readable the same way a Rails or Symfony locale file looks in a code editor. That readability is also why YAML is a good format for reviewing translation changes in a pull request: a one-line edit shows up as a one-line diff, not a wall of reformatted JSON.
On import, a nested key like home: interface: signup is recognized automatically and joined into a single home.interface.signup translation key. Export it back to plain YAML, or turn on a nested export and get the original indentation-based structure again.
en:
hello-world: Hello World!
home.interface.signup: Signup
pl:
hello-world: Witaj świecie!
home.interface.signup: Zarejestruj sięNo file restructuring
YAML translation files come in more than one shape. SimpleLocalize supports the common ones on both import and export.
The default layout: translations_en.yml, translations_pl.yml, and so on.
Every language in one file, grouped under a top-level en:, pl:, es: block.
Get indentation-based nesting back on download, instead of flat dot-notation keys.
Combine nesting and multi-language output, with each language nested under its key.
simplelocalize upload \
--apiKey PROJECT_API_KEY \
--uploadFormat yaml \
--uploadLanguageKey en \
--uploadPath ./translations_en.ymlSource language: en
Target languages:
- pl (Polish)
- de (German)
- es (Spanish)
- fr (French)auth:
login:
title: Zaloguj się do swojego konta
email_label: Adres e-mail
password_label: Hasło
submit: Zaloguj
forgot_password: Nie pamiętasz hasła?simplelocalize download \
--apiKey PROJECT_API_KEY \
--downloadFormat yaml \
--downloadPath ./translations_{lang}.yml \
--downloadOptions WRITE_NESTEDFor developers
A YAML file gets your team to the first upload. SimpleLocalize covers everything after: translation, review and automation.
Keep YAML files in sync with a couple of commands, so translations can be pulled into any pipeline alongside your code.
Translate new strings with DeepL, Google Translate, OpenAI, Claude or Gemini, then review before publishing.
Invite translators and reviewers into one shared editor, with comments, history and QA checks along the way.
The same import and export logic is available over the REST API, so a script or a backend job can sync files without the CLI.

More conversions
Free online converter, no account required. Upload a YAML file and download it in the format you need.
More on working with YAML translation files.

Skip manual edits. Learn how to auto-translate YAML files with SimpleLocalize using upload, batch MT, and CI/CD so every push ships with fresh translations.

How to translate YAML localization files correctly, covering structure, common errors, framework-specific patterns, and translation workflows from manual to fully automated.
Nested keys are joined with a dot into a single key on import, so they are editable like any other key. Add the WRITE_NESTED option on export to get indentation-based nesting back.
Yes, with the MULTI_LANGUAGE option: one file with a block per language code. Combine it with LANGUAGES_NESTED to nest the language codes under each key instead.
Ruby on Rails and Symfony both use YAML as their default locale format, and static site generators like Jekyll and Hugo use it for page and content translations.
No. Auto-translation only changes the string values. Keys and the export structure you choose stay exactly as configured.