Connect your Zendesk Help Center to a localization engine. Pick the categories, sections, and articles you want covered, and Lingo.dev translates them into your target languages and writes the translations back to Zendesk.
Works with Zendesk Guide (Help Center) content: categories, sections, and articles.
The Zendesk integration is enabled per organization. If you don't see it under Settings -> Integrations, reach out and we'll turn it on for you.
Before You Start#
You need three things:
Admin access to Zendesk. Connecting uses OAuth, and the authorizing account needs permission to manage Help Center content.
Your target languages enabled in Zendesk. Zendesk only accepts a translation for a language the Help Center already knows about. Enable them in Zendesk under Knowledge -> Settings -> Language settings.
Languages added under Admin Center -> Account -> Appearance -> Localization are a separate list and do NOT enable a Help Center language.
To see exactly what your Help Center accepts, open
https://<subdomain>.zendesk.com/api/v2/help_center/locales.jsonwhile signed in as an admin. Whatever that endpoint lists is what you can pick in Lingo.dev.A localization engine. Its glossary, brand voice, and rules are what your Help Center translations will follow.
Locale codes must match Zendesk exactly
Zendesk uses codes like en-us and de-de. If your Help Center source language is listed as en-us, pick English (United States) in Lingo.dev, not plain English - those are two different locales (en-US vs en), and the mismatch is the single most common reason a connection fails.
Connect Your Help Center#
Open the integration
Go to Settings -> Integrations and click Connect under Zendesk.
Fill in the form
| Field | What to enter |
|---|---|
| Subdomain | Only the label from your Zendesk URL. For https://acme.zendesk.com enter acme - no https://, no .zendesk.com |
| Engine | The localization engine that will translate this content |
| Source locale | The language your articles are written in, exactly as Zendesk lists it |
| Target locales | The languages to translate into. All of them must be enabled in Zendesk first |
| Save as drafts | Leave on to write translations as unpublished drafts. Turn off to publish immediately |
Authorize on Zendesk
You are redirected to Zendesk. Click Allow. You land back on the Zendesk page in Lingo.dev with the connection active.
Choose What Gets Translated#
The Zendesk page has two tabs: Content and Runs.
The Content tab lists everything in your Help Center - categories, sections, and articles in one table. Use the filter chips above it (All, Categories, Sections, Articles) to narrow the list, and the checkboxes to pick what you want covered. Every row name links to that item in Zendesk, so you can check what you are selecting.
Selecting a category does not select what is inside it
Categories, sections, and articles are picked independently. If you want a whole category translated, select the category and its sections and articles.
Save before you sync. A new connection starts with an empty scope, and a sync uses the saved scope - not whatever is currently ticked on screen. Sync before saving anything and the run comes back with nothing to translate. Click Save, then translate.
What gets translated#
| Item | Fields translated |
|---|---|
| Category | Title, description |
| Section | Title, description |
| Article | Title, body |
Article bodies are translated as HTML, so formatting, links, and embedded media survive the round trip.
Sync and Retranslate#
Two buttons, two different jobs:
| Button | What it does | When to use it |
|---|---|---|
| Sync | Translates only what changed since the last run | Routine updates. This is the one you want most of the time |
| Retranslate | Translates everything in scope again, from scratch | After changing your engine's glossary, brand voice, or rules, when you want existing translations regenerated |
Both are available in two places: in the page header, where they cover your entire saved scope, and above the content table, where they cover just the rows you have selected.
Runs are manual. Editing an article in Zendesk does not start one - you decide when to translate.
Only one run can be in flight at a time. While a run is active, both buttons are disabled.
Watch a Run#
The Runs tab lists every run with its status, what triggered it, when it started, and how long it took. A run that is still going can be cancelled from the list.
Open a run to see its detail: the stage it is in - pulling content from Zendesk, translating, writing back - plus overall progress and progress per target language, so you can see that German finished while Japanese is still going.
A run that ends as nothing to translate is not a failure. It means everything in scope already matches its translations, which is the normal result of syncing twice without editing anything in between.
Where Translations Land#
Each translation is attached to the same article, section, or category as a per-locale version - Zendesk's own translation model. Your readers switch language in the Help Center and get it; nothing is duplicated or moved.
Who the translations are attributed to
In Zendesk, every translation is authored by the account that authorized the connection, not by the person who clicked Sync. If you would rather not have one teammate's name on the whole Help Center, connect using a shared service account.
Drafts vs Published#
With Save as drafts on, translations arrive in Zendesk as unpublished drafts. Nothing is visible to your customers until someone reviews and publishes them in Zendesk. This is the safe default, and the one to keep while you are evaluating translation quality.
Turn it off and translations publish as soon as they are written.
You can change this later in Settings -> Integrations -> Zendesk, along with your engine and target languages.
Disconnecting#
Disconnecting removes the connection, its run history, and the per-article record of what has already been translated. Translations already written stay in Zendesk - they belong to your Help Center, not to us.
Reconnecting starts from zero
Because the per-article sync state is gone, the first sync after reconnecting treats your whole scope as new and translates all of it again - with the cost that implies. Disconnect when you mean to stop, not to troubleshoot.
Limits#
| Limit | Detail |
|---|---|
| Content types | Categories, sections, and articles. Tickets, macros, themes, and community posts are not covered |
| Content blocks | Articles built from Zendesk content blocks are not translated |
| Triggers | Manual only - no webhook, no automatic sync when an article changes |
| Concurrent runs | One per connection |
| Target languages | Must be enabled in your Zendesk Help Center before a run can write to them |
Troubleshooting#
The connection fails right after you click Allow. Almost always a locale mismatch: the source locale you picked does not exist in the Help Center. Open https://<subdomain>.zendesk.com/api/v2/help_center/locales.json, note the exact code listed there, and reconnect with that one.
A target language is missing from the dropdown. Enable it in Zendesk under Knowledge -> Settings -> Language settings first, then reopen the configuration in Lingo.dev.
Sync says there is nothing to translate. Either your saved scope is empty - select content in the Content tab and click Save - or everything in it is already up to date.
Translations do not appear in the Help Center. Check whether the connection is in draft mode. Drafts exist in Zendesk but stay invisible to customers until published.
