In this article, you will learn how to manage Framer site translations in SimpleLocalize. Framer has built-in localization, and it can exchange translations with external tools using XLIFF files. SimpleLocalize reads and writes the same format, so you can keep your Framer content in a proper translation editor with auto-translation, translation memory, glossary, and team collaboration.
How localization works in Framer
Framer organizes localized content in three levels:
- Locales - a language with an optional region, for example
en,en-CA, orde. - Localization groups - pages, CMS items, and other containers that hold translatable content.
- Localization sources - the individual strings from your site, with their localized values.
When you export localization data from Framer, every source becomes a <trans-unit> entry in an XLIFF file,
and every locale becomes a separate file. That is exactly what SimpleLocalize imports as translation keys and translations.
Requirements
- A Framer project with localization enabled and at least one target locale added in Framer.
- A SimpleLocalize project with matching languages and a default language set.
- Optionally the SimpleLocalize CLI if you want to script the whole exchange.
Add your locales in Framer first. Framer is the place where the site structure and the list of locales live, SimpleLocalize is the place where the translations are produced and reviewed.
Step 1: Export XLIFF from Framer
Open your project in Framer, switch to the Localization view, and run a plugin that exports XLIFF files, for example Locale Sync published by Framer. Localization plugins appear in the Plugins menu of the Localization view.
Export the locales you want to translate. You will get one XLIFF file per locale.
Open one of the exported files and check the version attribute of the root element, you will need it in the next step:
<xliff version="1.2">
version="1.2"corresponds to the XLIFF 1.2 format in SimpleLocalize (xliff:1.2),version="2.0"corresponds to the XLIFF 2.0 format (xliff:2).
Step 2: Import translations to SimpleLocalize
Upload the exported files to SimpleLocalize. Every file contains one target language, so import them one by one.
In the web app: open your project, go to Translations, and use the import action. Select the file, pick the XLIFF format matching your export, and choose the language the file contains.
With the CLI:
simplelocalize upload \
--apiKey PROJECT_API_KEY \
--uploadFormat xliff:1.2 \
--uploadLanguageKey de \
--uploadPath ./framer-de.xliff
Repeat for every locale exported from Framer.
Add the
--updateflag when you want the imported file to overwrite translations that already exist in SimpleLocalize. Without it, only new translation keys and empty translations are filled in.
Learn more about the upload command.
Step 3: Translate
Once your Framer content is in SimpleLocalize, you can work on it like on any other project:
- Auto-translate everything with DeepL, Google Translate, OpenAI, or Anthropic,
- reuse previous work with translation memory and keep wording consistent with a glossary,
- invite translators and reviewers, assign languages, and collect feedback without giving anyone access to your Framer project,
- run quality checks to catch missing translations and formatting problems before they reach the site.
Step 4: Export and import back to Framer
Download the finished translations in the same XLIFF version you exported from Framer:
simplelocalize download \
--apiKey PROJECT_API_KEY \
--downloadFormat xliff:1.2 \
--downloadLanguageKey de \
--downloadPath ./framer-{lang}.xliff
Learn more about the download command.
Then open the Localization view in Framer again and import the files with the same plugin you used for the export. Publish your site to make the new translations live.
Automating the exchange
The export and import inside Framer are manual, because Framer exposes localization data only to plugins running in the editor. Everything on the SimpleLocalize side can be scripted, so a repeatable round trip looks like this:
# 1. export XLIFF files from Framer (manual, in the Localization view)
# 2. upload every exported locale
for lang in de fr es; do
simplelocalize upload \
--apiKey PROJECT_API_KEY \
--uploadFormat xliff:1.2 \
--uploadLanguageKey "$lang" \
--uploadPath "./framer-$lang.xliff" \
--update
done
# 3. auto-translate missing content
simplelocalize auto-translate --apiKey PROJECT_API_KEY
# 4. download translations back
simplelocalize download \
--apiKey PROJECT_API_KEY \
--downloadFormat xliff:1.2 \
--downloadPath "./framer-{lang}.xliff"
# 5. import the files back in Framer (manual, in the Localization view)
Good practices
- Do not edit the
trans-unitidentifiers. SimpleLocalize matches content by translation key, and Framer matches it by the same identifier, so untouched ids mean every round trip updates existing entries instead of creating duplicates. - Keep language codes aligned. A locale exported as
en-CAfrom Framer should be aen-CAlanguage in SimpleLocalize. - Treat Framer as the source of truth for source texts. Copy changes made in the Framer canvas flow into SimpleLocalize with the next export, translations flow back with the next import.
- Use namespaces or tags if you manage several Framer projects in one SimpleLocalize project.
Limitations
- There is no automatic, background synchronization between Framer and SimpleLocalize. Framer exposes localization data only to plugins running inside the editor, so the export and import steps are always triggered by a person with access to the Framer project.
- Source texts must be edited in Framer. Changing a source string in SimpleLocalize does not change the site content.
- Site structure, slugs, and locale settings are managed in Framer, not in SimpleLocalize.
- Content that Framer does not expose in the Localization view cannot be exported, and therefore cannot be translated this way.