Skip to main content

wxrks Figma Plugin

Install the wxrks plugin in Figma to send design text for translation directly from a Figma file, and pull finished translations back in as new pages.

wxrks Figma Plugin

The wxrks plugin for Figma lets you send text from a Figma design file to wxrks for translation, then pull the finished translations back into Figma as new pages — one per target language — without leaving Figma.

💡 Who is this for? This guide is for Account Admins who need to configure the Figma connector in wxrks, and for any Figma user who needs to install the plugin and request translations.


1. Install the plugin in Figma

These steps happen entirely inside Figma:

  1. Log in to your Figma account and open the design file you want to translate.

  2. Open the Plugins menu and select Manage plugins….

Figma's Plugins menu

  1. Use Search all plugins to find the wxrks plugin.

Figma plugin search results with the wxrks plugin listed among the matches.

  1. Click the wxrks plugin, then Save to install it, then Run to open it.

On first run, the plugin asks you to connect it to your wxrks account with an API ID, API Secret, and region:

wxrks plugin connection screen in Figma, requesting an API ID, API Secret, and region.

Generate that pair from the wxrks side: open your avatar menu (top right), go to Profile → Security, and click Generate under API Token. The secret is shown only once, so copy both values into the plugin (or somewhere safe) right away.

Profile page, Security tab, showing the Change your password, MFA, and API Token sections; the API ID field under API Token is highlighted, with the Generate button below it.

Once connected, the plugin's features are available directly inside your Figma file.


2. Configure Figma in wxrks

Before the plugin can create projects, set up at least one Figma configuration in wxrks: go to Integrations → Figma.

Figma connector page on the Figma Configurations tab, with the Add Configuration button highlighted and the Configuration Group tab next to it; the configuration list is empty.

Figma Configuration

Click Add Configuration on the Figma Configurations tab:

Create new Configuration form for Figma, with a required Name field, a required Organizational Unit selector, and a Create button.

Give it a Name and pick the Organizational Unit that projects created through this configuration should belong to, then click Create. You can rename it or change its Organizational Unit later from the same list.

Configuration Group

A Configuration Group lets the plugin split one translation request across more than one Organizational Unit at once. Switch to the Configuration Group tab and click Add Configuration:

Figma connector page on the Configuration Group tab, with the Add Configuration button highlighted above the list of configuration groups (empty here).

Create new Config Group form for Figma, with a required Name field, a required Figma Configurations selector, and a Create button.

Give the group a Name and select the Figma Configurations (each tied to its own Organizational Unit) to include.

When a project is created against a Configuration Group, wxrks splits the target languages you request across the group's Organizational Units by each unit's own configured target languages — any requested language left over after that filtering is added to the last Organizational Unit in the group. In practice: if Organizational Unit A's configured languages include French and Organizational Unit B's include German and Spanish, requesting all three from the plugin creates two projects — one for A with French, one for B with German and Spanish — each with the languages relevant to that unit's stakeholders.


3. Create a project from Figma

ℹ️ Fonts for Chinese, Japanese, and Korean: Your source Figma page is never changed. If its font doesn't include Chinese, Japanese, or Korean characters, Figma shows the translated text as blank. To prevent this, the plugin can switch the translated layers to a font that includes those characters when you fetch translations. See Replace fonts by target language in the next section.

With the plugin running and connected, request a translation directly from Figma by filling in:

wxrks plugin translation request form in Figma, with Configuration, Contact person, Source language, Target languages, Workflows, and Project name fields.

  1. Configuration (or Configuration Group) — set up in wxrks per the previous section.

  2. Contact person — someone associated with the Organizational Unit tied to that configuration.

  3. Source language

  4. Target language(s)

  5. Workflows the project should go through.

  6. Project name

Send the request to wxrks, and the project (or projects, if a Configuration Group split it across Organizational Units) is created immediately:

Confirmation in the wxrks plugin that the translation project was created in wxrks.

Each page in your Figma file becomes its own work unit for every target language in the wxrks project.


4. Pull translations back into Figma

Once translation is finished, open the plugin on the source page you sent to wxrks. Before you click Fetch translations, check the font settings below the button, described in Replace fonts by target language below. The defaults work for most files.

Click Fetch translations and wait for it to complete:

wxrks plugin Fetch translations button and progress state while pulling completed translations into Figma.

wxrks plugin showing translations successfully fetched into Figma.

Each source page you sent gets a new page per target language:

Figma pages panel showing a new page created for each target language after pulling translations back.

ℹ️ Mixed styling within a text node: wxrks translates and re-applies formatting at the level of the whole text node, not per character. If a text node combines a node-wide style — for example, Bold applied to the entire node — with a character-level override on only part of the text — for example, a different fill color on a single word — only the node-wide style carries over to the translated text; the character-level override does not. This is expected: the plugin round-trips each node's own style, not Figma's internal per-character style ranges, so the translated node keeps the formatting that belongs to it as a whole and drops whatever was layered on top of just a few characters within it.

In the example below, the source text node "Hello, world!" (1) has Bold applied to the entire node (2) — a node-wide style — plus a red fill applied only to the word "world," which Figma tracks separately as a character-level override. That's visible in the Fill panel reporting mixed content (3) and the Selection colors panel listing both FF0000 and FFFFFF (4). After translation, the resulting node "Olá, mundo!" (5) keeps the Bold style, but its Fill panel now shows a single FFFFFF color (6) — the word-level red override was not carried over.

Side-by-side Figma comparison of a text node with mixed styling, before and after translation through the wxrks plugin: the source

  1. Source text node, before translation.

  2. Typography → Bold — the node-wide style, applied to the whole node.

  3. Fill reporting "Click + to replace mixed content" — Figma's own indicator that the node has more than one fill color.

  4. Selection colors — the two colors actually in use: FF0000 (the "world" override) and FFFFFF (the rest of the node).

  5. Translated text node, after translation.

  6. Fill after translation — a single FFFFFF, confirming the FF0000 word-level override did not carry over.

If part of a text node needs distinct styling after translation, reapply it manually in Figma once translations are pulled back, or split that portion into its own text node before requesting translation, so its style travels as that node's own (global) style instead of a character-level override.

Replace fonts by target language

Many fonts don't include Chinese, Japanese, or Korean characters. When the source font is one of them, Figma shows the translated text as blank, and the plugin can't make Figma pick a fallback font automatically. To avoid blank text, the plugin switches the translated layers to a font that includes these characters while it creates the translated pages.

The font settings appear below Fetch translations on the plugin's fetch screen:

wxrks plugin fetch screen in Figma with three numbered red boxes: 1, the Enable font replacement by target language checkbox, selected; 2, the font dropdown for each target language, such as Chinese (China) set to Noto Sans SC and Chinese (Hong Kong) set to Noto Sans HK; 3, the Fetch translations button.

  1. Enable font replacement by target language is selected by default. Clear it to keep the source font for every language.

  2. Each target language in the project has a dropdown that lists the fonts available in your Figma. To use a different font for a language, type its name in the dropdown and select it. To keep the source font for a language, choose Same as source.

  3. Click Fetch translations.

The default font depends on the target language:

Target language

Default font

Chinese (Simplified), including Singapore

Noto Sans SC

Chinese (Traditional), including Taiwan

Noto Sans TC

Chinese (Hong Kong, Macau)

Noto Sans HK, or Noto Sans TC if Noto Sans HK isn't available

Japanese

Noto Sans JP

Korean

Noto Sans KR

Any other language

Same as source

The Noto Sans fonts come with Figma, so you don't have to install anything.

The plugin saves your choices for that Figma page and uses them the next time you fetch translations for it.

What changes on the translated pages:

  • Only translated text layers get the new font. Layers that weren't translated keep their original font, and your source page doesn't change at all.

  • Each replaced layer keeps the source text's weight. For example, Bold text uses the Bold style of Noto Sans JP. The Noto Sans CJK fonts have no italic styles, so italic text becomes upright.

  • Text styles on replaced layers are detached, so the layer no longer follows its shared text style.

  • The new font has different character widths and line heights, which can change the layout. Review the translated pages for text that overflows or wraps differently.

ℹ️ Other languages with their own scripts: The plugin only picks a font automatically for Chinese, Japanese, and Korean. Other languages, such as Thai, Bengali, Tamil, or Telugu, use Same as source by default. If the source font doesn't support one of them, choose a font for that language in its dropdown before you fetch translations.

Troubleshooting Fetch translations

Message

What it means

What to do

Missing font: … No pages were created. Install the font, or choose a replacement font for …

Your Figma can't load the source font, and at least one language listed in the message uses Same as source. The plugin stops before it creates any page.

Install the missing font, or choose a replacement font for each language the message lists, then fetch again.

Font "…" is not available; using "…" for …

The font saved for that language isn't available in this Figma, for example on another computer. The plugin used the default Noto Sans font for that language.

No action needed. To use a different font, choose it in the language's dropdown.

Font "…" is not available; keeping the source font for …

The saved font isn't available, and that language has no default replacement font.

Choose an available font for that language, or install the saved font.

Could not load the available fonts. Translations will keep the source fonts.

The plugin couldn't read the list of fonts in your Figma, so the language dropdowns don't appear.

Close and reopen the plugin. If you fetch translations anyway, translated text keeps the source font.

No translated files were returned for this project, so no pages were created.

wxrks returned no translations for the project.

Check in wxrks that the project's translations are finished, then fetch again.

No translation was returned for …, so no page was created for it.

The other languages were fetched, but the languages listed in the message had no translation.

Finish those languages in wxrks, then fetch again.

Did this answer your question?