Skip to main content
How to deploy Translations

A walkthrough on how to deploy translations and some common gotchas

Kevin Boyle avatar
Written by Kevin Boyle
Updated over a week ago

Translations are one of those parts of Salesforce that people really struggle to deploy and with good reason - they're a pain and come from the earliest days of the platform.

How do I include translations in my comparison?

Gearset will compare your custom field translation settings if Custom object translation and Custom object are both selected in your metadata comparison filter. They are included in the Default comparison filter, or you can create your own custom metadata filter.

Gearset will compare your custom label translation settings if Custom labels and Translations are both selected in your metadata comparison filter. These are also included in the Default comparison filter.

If you need to deploy translations for a prompt, you will need to include the prompt metadata type, Custom labels and Translations. You will see the transitions for your prompt listed in the results as a Translations component.

What do translations look like in the comparison results?

Historically, one of the issues with deploying translations on Salesforce was that you had to deploy all the translated strings for a given language at the same time.

This often failed if the language had a translated string for a component that didn't exist in the target, or if only some of the translated strings in the org had been reviewed and were ready for deployment.

Gearset solves this problem by making each translated string individually selectable and deployable. This allows you to deploy the translated strings that are ready for a given language and do partial translations of your org's strings.

When it makes sense, Gearset will still group translated strings together into a common parent. For example, if Gearset detects that all the custom field translations for a given object are New, then they'll be grouped into a single row in the results.

Common gotchas

Inactive languages

If a language is Enabled in an org but not marked Active, then the Metadata API doesn't return the translations when Gearset requests them. This can be confusing, as Gearset will sometimes display one side of the translated string comparison as blank.

Deploying over inactive languages

If a language is Enabled in an org but not marked Active, then the Metadata API does still allow the deployment to happen. This means you can accidentally overwrite a translated string because Gearset reported the target as blank. This is a limitation of the Metadata API that Gearset is built on.

Deploying languages as part of a managed package

If your languages or translations are part of a managed package, try running the comparison with All selected for Include managed packages in the custom metadata filter. 

Manageable state of the language is in beta

If a language is not being retrieved to your comparison, then its manageable state may be in beta. This is something you can confirm in Workbench by retrieving the translation. To get these translations to appear in your comparison results, try running the comparison with All selected for Include managed packages in the custom metadata filter.

Seeing something else you don't understand?

Translations are complex! If you're seeing something strange that you don't understand about translations, then open up the chat widget and get support direct from one of the team.

Did this answer your question?