If your Shopify store sells in more than one language, the swatches created by Rubik Combined Listings Swatch should speak those languages too. A French shopper should read "Bleu nuit", not "Midnight blue".
This page covers everything about translations: what can be translated, how to translate a single group by hand, and how to translate your entire store at once with a CSV file.
Three kinds of text belong to Rubik, and all three are translatable:
| What | Example | Where shoppers see it |
|---|---|---|
| Option name | Color, Size, Material | The label above the swatch row, and the "Color: Midnight blue" selected value line |
| Option values | Midnight blue, Sand, Espresso brown | The swatch label and tooltip, one per linked product |
| Swatch categories | Leather, Fabrics, Metallics | The heading above each group of swatches, when you sort swatches into categories |
Product titles, descriptions, and prices are not part of this. Those belong to Shopify and are translated wherever you already translate your products, whether that is Shopify's own Translate & Adapt app or a third-party translation app. Rubik only translates the three things above.
Rubik stores translations in Shopify's own translation system, the same place every other translation app writes to. Your storefront then serves the right language automatically, with no theme changes and no extra script.
That has two useful consequences. Your translations survive if you ever uninstall and reinstall the app, because they live in your store rather than in ours. And they follow the same language rules as the rest of your storefront, so a shopper who switches to French sees French swatch labels at the same moment the rest of the page switches.
Rubik translates into the languages your Shopify store already has. If you have not added a second language yet, do that first in your Shopify admin under Settings → Languages, or through Settings → Markets if you run different languages per market.
Once a language exists there, it appears in Rubik's language picker. If you open the Translate page and see "No additional languages are configured for this store", that is what is missing.
Best for a handful of groups, or for fixing a single word.
Go to Product groups and click the translate icon on any group in the list. You can also open the group and click Translate on its edit page.
Choose from the language picker at the top. Every language configured in your store is listed, and the page reloads its content for that language.
The page shows the original text on the left and an input for your translation on the right, in up to three sections: Option name, Option values, and Categories. Sections you do not use are hidden, so a group without categories shows only the first two.
Leaving a field empty is fine. The original text is used as a fallback anywhere a translation is missing, so shoppers never see a blank swatch.
Click Save translations. The change reaches your storefront immediately.
Categories are shared. A category like "Leather" can be used by many groups. Translating it on one group's page translates it everywhere it is used, which is exactly what you want, but worth knowing before you wonder why another group changed too.
Doing 40 groups in 5 languages by hand is a bad afternoon. The CSV route exports every translatable piece of text in your store into one spreadsheet, with a column per language and your existing translations already filled in. Fill in the gaps, or hand the file to a translator, then upload it back.
On any group's Translate page, click Export all translations. Despite living on a single group's page, this exports the whole store.
The file is built in the background and emailed to you, because for a large catalog it takes a few minutes to gather. The email arrives with the CSV attached, named something like rubik-translations-export-your-store-08-06-2026.csv, and tells you how many items it contains and how many are still untranslated.
Open the file in Excel, Numbers, Google Sheets, or hand it to a translator. There is one row per piece of text and one column per language. Type translations into the language columns and change nothing else.
Back on the Translate page, click Import translations, choose your file, and click Start import.
The import also runs in the background. When it finishes you get a second email with exactly what happened: how many translations were applied, how many were already up to date, and anything that could not be saved.
Only the language columns are yours to edit. Everything to their left is context so you know what you are translating.
| resource_id | type | original | fr | de |
|---|---|---|---|---|
| …/8123 | option_name | Color | Couleur | Farbe |
| …/9001 | option_value | Midnight blue | Bleu nuit | Nachtblau |
| …/5555 | category | Fabrics | Tissus | Stoffe |
The shaded columns are the ones you fill in, one per language in your store. Shortened to fit: the real file also carries group_id, group_name, product_id and product_title between type and original, and full resource_id values. Every column is listed below.
| Column | What it is | Edit it? |
|---|---|---|
| resource_id | How the import knows which text a row belongs to. Long and ugly on purpose. | Never |
| type | option_name, option_value, or category. Handy for sorting the file. | Never |
| group_id, group_name | Which group the row belongs to. Blank on category rows, because categories are shared. | No, context only |
| product_id, product_title | Which product a swatch belongs to. This is what tells you whether "Sand" is a color or a material. | No, context only |
| original | The text in your store's main language. This is what you translate. | No |
| fr, de, pt-BR, ... | One column per language in your store, pre-filled with any translation you already have. | Yes, this is your job |
Blank means "leave whatever is already there". You can safely import a file where you only filled in 12 cells out of 400. To remove a translation, clear it on the group's Translate page instead.
Nothing is duplicated and nothing breaks. Values that already match are recognised and skipped, and the email reports them as already up to date. So if you are unsure whether an import went through, just run it again.
You can re-sort rows, delete rows you do not care about, hide columns, or add your own column of notes for a translator. None of it confuses the import, as long as resource_id and type stay intact. Any extra column you add is reported in the email and ignored.
The import matches on resource_id, never on names, so a group you renamed in the meantime still gets its translations.
The export is written so Excel opens it with accents and non-Latin characters intact, and the import accepts files back from Excel in any region, including the versions that save with semicolons instead of commas.
Say you export, then rename a swatch from "Midnight blue" to "Navy", then import your translations. Rubik still applies the translation you typed, but the completion email flags how many rows were in that situation so you can check whether the translation still fits.
Both actions run in the background and email you when they finish, so you can start an export and close the tab.
Both go to your store's contact email address.
No. Rubik writes directly into Shopify's translation system, so all you need is a second language added in your Shopify settings. If you do use a translation app for your products, the two work side by side without conflict.
Check that the language is published in Settings → Languages. An unpublished language can be translated in advance but is not visible to shoppers yet. Also confirm you are viewing the storefront in that language, usually through your theme's language switcher or a market-specific domain.
They fall back to the original text. A half-translated store looks like a partly translated store, never a broken one.
That means a resource_id in the file does not match anything in your store. The usual causes are a file from a different store, a row typed by hand, or a group that was deleted after the export. Everything else in the file still gets applied.
Yes. Delete the language columns you are not working on, or just leave them empty. Only the columns you filled in are applied.
Around 30,000 rows, which is far more than most stores ever reach. If you are past that, split the file and import the parts one at a time.
Split the file by language or by group and import each part separately. Imports are applied one at a time per store, so if you start a second one while the first is still running you will be asked to wait a moment.
If you run into trouble, message us from inside the Rubik app and we'll take a look at your shop directly.