Languages and Translation
Your store can sell in multiple languages. This guide shows you how to enable a language, where to translate specific texts, how to change fixed store texts in xoLanguage, and what DeepL translates for you. You’ll also learn which language is used for orders, emails, and receipts.
At a Glance
- Languages: Go to Settings → Languages / Currencies → Languages. New stores come with 19 languages pre-configured, but only German is enabled by default. “Frontend Status” displays the language currently active in the store, while “Admin Status” provides the tabs for translation.
- Content: You can manage products, categories, CMS pages, news articles, and email templates in separate tabs for each language.
- Fixed store texts: You can change texts in the shopping cart and checkout, buttons, payment method names, and total line items under Tools → xoLanguage as “custom values.”
- DeepL: With your own DeepL key, a button above the text fields translates the text of the default language. The automatic translation in the background is provided by the “Automatic Translation with DeepL” add-on module; XONIC Support will set it up for you.
- Orders: Emails and receipts are sent in the language the customer used to place the order.
In this guide
Where Text Is Translated
Text is located in three places: in the data records (with one tab per language), in the language files, and in the forms of individual modules. The table shows where to find each item.
| Text | Where to Translate It |
|---|---|
| Name, descriptions, and meta tags of a product | in the article under Products → Categories / Products: Name in the “General” tab, descriptions in the “Description/Tabs” tab, meta tags in the “SEO” tab—each for each language |
| Categories | Products → Categories / Products, Edit Category, per language |
| Features and their values | Products → Product Attributes, one field per language |
| Product Extra Fields | Products → Product Extra Fields: Each field belongs to a language; see What Happens When You Turn It On |
| CMS Pages and Modules such as the Footer | CMS → CMS Manager; see CMS & Emails |
| News Articles | CMS → News Articles, see News Articles |
| Email Templates | CMS → Emails & Marketing / Automations, see CMS & Emails |
| Name and description of a shipping method | Settings → Checkout → Shipping Methods, Edit Shipping Method, tabs for each language |
| Texts for a payment method when selected, in the order summary, and in the order confirmation | in the payment method screen under Settings → Checkout → Payment Methods, see Payment Methods |
| Name of a payment method, such as “Prepayment” | Tools → xoLanguage, payment method section, such as “payment_moneyorder” |
| Total lines such as “Shipping Costs” | Tools → xoLanguage, “order_total” section |
| Order Status | Orders → Order Status, one field per language |
| Titles and SEO names of static store pages such as Shopping Cart, Checkout, and Contact | Settings → SEO / SEA → Titles & Meta Tags, see SEO & Redirects |
| Buttons, text in the Shopping Cart, Checkout, and Customer Account, error messages | Tools → xoLanguage, see xoLanguage |
Enable a language
You can manage languages under Settings → Languages / Currencies → Languages. New stores come with 19 languages pre-configured, including English, French, Italian, Spanish, and Dutch. Only German is enabled by default. For the pre-configured languages, the fixed store texts are largely already translated. Some newer texts are missing in certain languages; in such cases, they appear in the default language.
Each language has two toggles in the list. They function independently of one another:
| Switch | Effect |
|---|---|
| “Frontend Status” | The language appears in the store: in the language selection, with its own URLs, and as the destination for redirection based on the browser language. |
| “Admin Status” | The language gets its own tab in the backend screens, appears in xoLanguage, and is available as a language option when logging into the backend. |
Here’s how to proceed
- Enable “Admin Status” for the desired language in the list. The store will now create a version in the new language for products, categories, pages, email templates, and other areas—initially as a copy of the texts from the default language.
- Translate the texts: manually in the tabs for the new language, using the DeepL button, or with automatic translation (see DeepL).
- Enable“Frontend Status.” Only now will your customers see the language.
- Check the email templates, legal notices, and a test order; see the checklist.
Under Settings → Languages / Currencies → Languages, toggle “Frontend Status” and “Admin Status” separately for each language; French is currently enabled only in the backend. Click to enlarge.
Default Language
The default language is marked with “(Default)” in the list. It cannot be disabled or deleted. DeepL uses this language for translations, and its URLs do not include a language code. Use “Set as Default” to make another language the default. This will change all of your store’s URLs. Therefore, please discuss any changes with us beforehand.
Frontend Only
A language can be visible in the store without having its own tab in the backend. The list will then show “Frontend Only – Maintenance is handled automatically via DeepL; no backend editing tab.” This is only suitable if DeepL automatically translates all texts. You cannot edit the texts for this language either in the forms or in xoLanguage. For newly created products and pages, the store generates the version in this language when someone opens the Languages page. As a rule, you should therefore enable both toggles.
Create Your Own Language
If a language is missing, create it using the “Insert” tab: “Name” (this is how it appears in the language selection), “Encoding” with two letters according to ISO 639-1, such as pt, “Sort Order,” both statuses, and “Duplicate language values from the following language.” The store copies all texts and language files for the selected language. The store’s fixed texts will still be available in this language afterward. You can delete languages you’ve created yourself, but you can only deactivate pre-installed ones.
What Happens When a Language Is Enabled
When a language is enabled—either in the frontend or backend—the store adds any missing versions for that language. To do this, it copies the texts from the default language. Anything that has already been translated remains as is.
Copy of the default language
Products, categories, attributes, CMS pages, news articles, email templates, shipping methods, order statuses, and other areas receive a copy of the German texts. The shop does not copy customer reviews: they appear only in the language in which they were written.
Product Extra Fields
An extra field always belongs to a specific language. Fields you created for German do not appear in the new language and are not copied. Create your own fields for the new language under Products → Product Extra Fields and fill them in for the product. “Language” = “All” creates one field per language with “Admin Status.”
Addresses
Pages in an additional language begin with /lng/ followed by the language code, such as /lng/en/. The copied German name appears immediately after that. Only after you translate the name will the URL also appear in the new language; see SEO Names.
Fixed Store Pages
If a static store page, such as the checkout page, lacks a name in the new language, the store uses the German name with the language code appended, such as kasse-en. This ensures that every URL remains unique. Translate the names under Settings → SEO / SEA → Titles & Meta Tags.
Changing Languages in the Store
As soon as more than one language has “Frontend Status,” the store displays a language selector in the header. Switching languages takes you to the same page in the other language.
Clicking the globe icon in the header opens the language selector on the right-hand side. Click to enlarge.
Language Selection
Show or hide this feature via Settings → Design → Header → Show/Hide Language Selection in Header; enabled by default. The order of the languages is determined by the “Sort Order” setting.
Addresses by Language
The default language uses addresses without abbreviations; other languages begin with /lng/en/, /lng/fr/, etc. The store permanently redirects old links starting with ?language=en to the new format.
Based on browser language
With Settings → General → Basic Settings → “Adapt store language to browser language ” (off by default), the store directs visitors to the version in their browser language upon their first visit, provided that language is enabled in the store. Visitors who switch languages themselves afterward retain their selection. The store does not redirect search engines.from 4.9.47
Shopping Cart
After a language change, the shopping cart displays the selected attributes in the new language, and they will appear that way in the order as well. If the name of an attribute is missing in that language, the shop uses the namefrom the default language.from 4.9.33
Changing the language does not change the currency; see “Currency by Country.”
Translate Content by Language
Products, categories, CMS pages, news articles, email templates, and many other data records have their own tab or field with the language code for each language with “Admin Status.”
An empty field creates a copy
If you leave a field for another language blank, the store will copy the text from the default language into it when you save. If you later change the German text, the copied text remains unchanged. You can then maintain both languages or let the automatic translation handle it.
Translate with DeepL
If a DeepL key is configured, the “Translate via DeepL” button—or simply “DeepL”—appears to the right of each text field in the tabs for the other languages. It translates the text from the default language field exactly as it appears in the form. Save as usual afterward.
Links in the Text
Link to pages in your store using the editor’s link dialog, for CMS pages via the “CMS Links” drop-down list, or with an address without a domain, such as store-cms.php?cID=<ID>. The store will then construct the address in the visitor’s language. It will retain a complete address with https:// unchanged; it always leads to the same language version.
In the EN tab, “Translate via DeepL” translates the text from the German field into the field below it; then save as usual. Click to enlarge.
Good to Know
- ContentEditor: Finish building the page in the default language before translating; see ContentEditor.
- Manufacturer: The automatic translation does not translate manufacturer texts. Use the DeepL button in the screen under Products → Manufacturer.
- Customer reviews remain in the author’s language. There is no translation available.
Modify fixed store texts: xoLanguage
Texts that do not belong to any product or page are located in the language files: buttons, texts in the shopping cart, checkout, and customer account, error messages, as well as the names of payment methods and total lines. You can edit them under Tools → xoLanguage.
- Under “Framework,” select “Frontend.” This contains the shop’s text; “Backend” contains the backend text.
- Under “Section,” select the page where the text appears (see table below). Use the arrows next to the selection or the arrow keys on your keyboard to navigate to the previous or next section. Sections highlighted in red contain texts that are still missing in a particular language.
- Find the text using your browser’s search function (Ctrl+F,Cmd+F on a Mac). There is no search function that covers all sections.
- Click “Custom Value” in the row and enter the new text for each language in the additional row.
- Click“Update” and reload the store page.
Enter your own value for each language in the yellow row below the provided text—in this case, “Flat-rate shipping fee” instead of “Shipping costs” (excerpt). Click to enlarge.
Which section belongs to which page
| Where the text appears | Section |
|---|---|
| On all pages: header, footer, buttons, text in emails, salutation | default |
| Shopping Cart | store-checkout-cart |
| Login and registration, including on the way to checkout | customer-login |
| Checkout: Shipping, payment, review order, complete order | checkout-step2, checkout-step3, checkout-step4, checkout-step6 |
| Customer account, such as address book and personal information | customer, customer-address, customer-edit and others with customer- |
| Product page | store-products |
| Total lines such as packaging costs | order_total |
| Add-ons to shipping methods such as “Ship to” | shipping |
| Name and description of a payment method | payment_ and the module name, such as payment_moneyorder for prepayment |
| Error messages in forms | form-errors |
Examples
Rename packaging costs
"order_total" section, key MODULE_ORDER_TOTAL_PACKAGING_COSTS_TITLE (default: "Verpackungskosten"). Enter your own value for each language, such as "Verpackungspauschale" and "Packaging fee."
Renaming a payment method
For prepayment: “payment_moneyorder” section, key MODULE_PAYMENT_MONEYORDER_TEXT_TITLE. The other payment methods each have their own section prefixed with payment_.
Login and Registration
“customer-login” section, for example TEXT_AUTH_LOGIN_HEADING (“Welcome back”), TEXT_AUTH_REGISTER_HEADING (“Create an account”), and TEXT_AUTH_GUEST_NOW (“Order as a guest”).
Note in the shopping cart
“store-checkout-cart” section, such as TEXT_INFO_SHIPPING_ESTIMATOR (“Any discounts or credits will not be applied until you proceed to checkout!”) or the notice regarding out-of-stock items OUT_OF_STOCK_CAN_CHECKOUT. The same key is often also found in a checkout step section; be sure to change it there as well.
“Address Book”
The heading “My Address Book” appears in the “customer-address” section. The word also appears in “customer-address-change,” “checkout-step2,” and “checkout-step3.” A piece of text often appears in multiple sections; be sure to check every page after making changes.
Good to Know
- Which languages: xoLanguage displays one column per language with “Status Admin.”
- Missing text: If text is missing in a language, the store displays the text from the default language.
- DeepL in xoLanguage: If a DeepL key is configured, a “DeepL” button appears below empty fields. “Custom DeepL” translates your own values for the section from the German value into the empty fields of the other languages. Then click “Update.” The automatic translation does not update the language files.
- Red message regarding
max_input_vars: xoLanguage requires the PHP setting `max_input_vars` to be set to at least 100,000. If this setting is missing, the page displays this message instead of the text; your hosting provider must increase the value.
Shipping Methods, Payment Methods, Statuses, and Emails
You can edit some texts directly in the module’s interface, with a separate tab or field for each language.
Shipping Methods
Edit the shipping method under Settings → Checkout → Shipping Methods. The tabs for each language contain “Name” and “Description.” If the “Name” field is left blank, it will default to the name in the default language when saved. See Shipping & Delivery for instructions on how to create shipping methods.
Payment Methods
The text displayed during selection, in the order summary, and in the order confirmation is entered in the payment method screen below the fields, with a separate tab for each language. You can change the name itself—such as “Prepayment”—in xoLanguage. See Payment Methods for details.
Order Status
Under Orders → Order Status, each status has one field per language. In the customer account, the customer sees the status in the language they are currently using to browse the store; in the status email, it appears in the language of the order.
Email Templates
Under CMS → Emails & Marketing / Automations, each template has a tab for each language, with DeepL buttons for the subject line and text. Review each template in the new language; see CMS & Emails.
You can edit the name and description of the shipping method in its settings screen, with a separate tab for each language. Click to enlarge.
Switching the Store to the "Du" Form
There is no pre-made “Du” version of the German texts. The provided texts use the formal “Sie” form. To switch to the informal “Du” form, edit the texts at these points.
- Fixed store texts in xoLanguage are stored as separate values for each section. Start with “default,” “store-checkout-cart,” “customer-login,” and the checkout sections “checkout-step2” through “checkout-step6,” followed by the customer account sections.
- Salutation in emails: In the email templates, replace the placeholder
{SALUTATION}(“Dear Ms. Sample”) with{SALUTATION_INFORMAL}(“Hello Erika”). The salutation formulas are located in xoLanguage, “default” section, keysSALUTATION_FORMAL… andSALUTATION_INFORMAL…. - Rewritethe email templates and CMS pages in the respective tabs, as well as the texts for payment methods and shipping options.
- Click through the entire store: shopping cart, login, checkout, customer account, and place a test order to trigger all emails.
Set up DeepL
DeepL translates text from the default language into your other languages in the backend. To do this, you’ll need your own DeepL account with access to the application programming interface (API), either free or paid.
- Copy the API key from your DeepL account.
- Under Settings → Interfaces → Translation Tools → DeepL, enter the key in the “DeepL Authkey” field.
- Selectthe “DeepL API Mode” that matches your account:
freefor the free account,paidfor the paid account. After that, the store will send its requests to the appropriate address at DeepL. - Save. From now on, the DeepL buttons will appear in the forms.
The key and API mode must match your DeepL account: “paid” for the paid account, “free” for the free account. Click to enlarge.
Switch to Pro
Enter the key for the paid account and set “DeepL API Mode” to paid. The key and mode must match; otherwise, translations will fail. If you’re using automatic translation, please let us know in advance: Your background task depends on the key and must be adjusted accordingly.
Logging in to DeepL
The shop sends the key in the header of each request to DeepL, not in the URL. This is how XONIC 4 has worked from the start. Due to changes in DeepL’s login procedures, you do not need to make any adjustments.
Quota
DeepL charges by character. Once the quota is used up, the button displays “DeepL quota used up …” and leaves the field unchanged. Automatic translation pauses and resumes on the next run. If the key is incorrect, the message “DeepL: Authentication failed…” appears.
Tag Handling Version
Leave “DeepL Tag Handling Version” blank. In that case, the settings from your DeepL account will apply. Set a version only if your account definitely supports it.
Automatic Translation with DeepL
Instead of translating field by field, the store can translate your content regularly in the background. This automatic translation is provided by the XONIC Premium add-on module : Automatic Translation with DeepL. After you sign up, XONIC Support will set it up for you. We’ll work with you to determine which languages and which sections will be translated. You can use the DeepL button above the text fields even without the add-on module.
What gets translated
Categories, products (name, descriptions, checkout description, meta tags, image titles), product tabs, attributes and values, CMS pages and boxes, email templates, news articles and news categories, FAQs, sliders, shipping methods and shipping profiles, pickup locations, coupons, order statuses, product badges, text blocks, as well as the title and description of the homepage. Translations are performed into all enabled languages unless we specify otherwise.
What Is Not Translated
The language files—including your own values from xoLanguage—as well as manufacturer texts, product extra fields, and customer reviews. You translate these texts yourself, in xoLanguage and in the forms using the DeepL button.
When translation occurs
Each run translates anything that DeepL has never translated before, as well as anything whose text in the default language has changed since the last run. It doesn’t matter if a field is empty in the target language: the run will overwrite even a filled field—such as the copy of the German text or your own translation—as long as DeepL hasn’t translated the data record yet.
Order and Duration
The shop translates up to 100 records per run and section. Smaller sections such as categories, CMS pages, and email templates are processed first, while the product catalog is processed last. A large catalog therefore requires multiple runs.
If you change the German text
- If you save a record with modified text in the default language, the next run will retranslate it into all target languages—including all fields in the record. It will overwrite any corrections you’ve made in a target language. Therefore, make corrections only after the run is complete.
- If you save without changing the text—for example, after a price or inventory change—the shop will not retranslate anything.
- If DeepL translates a name anew, the address in the target language may change. The store will redirect to the old address; see SEO names.
- Without automatic translation, click “Translate via DeepL” again in the tabs for the other languages and save.
Under Tools → Server Info & Health Check, the shop will notify you if DeepL is set up, if texts are waiting to be translated, and if nothing has been translated for the past two days. This means the task is no longer running in the background; please contact us.from 4.9.139
Save Costs, Protect Sections, Glossary
Content that isn’t sent to DeepL doesn’t count toward your quota. And once something has been translated, the shop will only retranslate it if the source text changes.
Protect sections
The shop does not send anything in the source text between <!-- xo:notranslate --> and <!-- /xo:notranslate --> to DeepL. It replaces this section with a short placeholder before sending and inserts it back unchanged afterward. Place these two markers in the editor’s source code view around code, size charts, or embedded content.
Already protected
Scripts and style specifications, embedded videos, audio, and iFrames; elements containing translate="no"; placeholders such as {STORE_NAME} or %s; and the Content Editor’s “Code,” “Video,” “Form,” “Countdown,” and “Product List” blocks are not sent to DeepL as text.
No duplicate translations
The store remembers the status of each record and language that DeepL has translated. Saving without changing the text, imports with unchanged text, and synchronizations from the inventory management system do not trigger a new translation. Only Support can trigger a complete reset of this status; after that, the translation process will translate everything anew.
Limit languages and sections
We can specify the target languages and exclude individual sections or fields. For products, this can be done separately for individual products, main products, and variants—for example, translating only the names of the variants.
Glossary for Fixed Terms
Terms that DeepL should always translate the same way—such as product names or technical terms—are stored in a glossary for each language pair. For German to English, this is located at DE_EN. There is exactly one translation per term.
- The glossary takes effect for automatic translation starting with the next run. The “Translate with DeepL” button in the forms does not use it.
- A glossary only specifies the translation of the terms entered. It does not account for paraphrases. Check important pages after the run.
- Terms with multiple meanings should not be included in the glossary; otherwise, DeepL will translate them the same way everywhere.
Order Language and Customer Language
Every order and every customer account has a language. Emails and receipts are based on this.
Order in the Store
The order language is the language in which the customer placed the order. Order confirmations and status emails are sent in this language, and the store uses it to generate invoices and other documents. You can change it in the order editor in the “Customer Language” field; the languages available for selection are those marked “Status Admin”—see Orders.
Customer Account
Upon registration, the account is assigned the language the customer is currently using to shop. The customer can change it under “My Account,” “My Personal Data” in the “Language” field. You can change it in the customer’s profile under the “Customer Data” tab, in the “Customer Language” field. Emails regarding the account, such as password-related messages, are sent in this language.
Orders from Marketplaces and Interfaces
If an order is placed without going through the store’s checkout—for example, from a marketplace, via Billbee, or through the xoPort interface—it will be assigned this language:
- the language provided by the vendor for the order—such as Billbee, Galaxus, and the Mirakl marketplaces—or, in the case of xoPort, the language passed along;
- otherwise the language of the customer account,
- otherwise the store’s default language.
Only languages that are enabled in the store are taken into account. Amazon, eBay, Kaufland, and OTTO do not specify a language; orders from these platforms are processed in the language of the customer’s account or in the default language, even if they come from an international marketplace. from 4.9.135
Search Engines: Addresses, hreflang, Sitemap
Each language has its own URLs. To ensure search engines correctly map the language versions, the store handles most of this itself.
- hreflang: Each page lists its versions in the other enabled languages and the default language as
x-default. Settings for a multishop with one domain per marketplace can be found under SEO & Redirects: hreflang. - SEO Names: Translate the names so that the URLs appear in the respective language; see SEO Names.
- Sitemap: Add the new language under Settings → SEO / SEA → SEO Settings → SEO Sitemaps Languages; see Sitemaps.
- Disabling a Language: If you disable a language in the frontend, the store will permanently redirect its existing URLs for products, categories, CMS pages, and news articles to the version in the default language.
Currency by Country
Language and currency are separate. Changing the language does not change the currency.
Under Settings → Checkout → General → Automatic Currency Change: Destination Country (enabled by default), the currency changes based on the shipping country—for example, to CHF for Switzerland and to EUR for EU countries—provided you have set up the currency under Settings → Languages / Currencies → Currencies. The Prices & Customer Groups guide describes exchange rates and currency conversion based on IP address.
Checklist: Launching a New Language
Go through these steps in order before your customers see the new language.
- Enable “Status Admin,” but leave “Status Frontend” disabled for now.
- Translate content: manually, using the DeepL button, or with the add-on module for automatic translation.
- In xoLanguage, translate your own values for the new language and check the sections highlighted in red: text is missing in one of the languages there.
- Create and fill out product custom fields for the new language.
- Check email templates, legal texts, and payment method descriptions in the new language; see Legal Texts.
- Check names and SEO names, and add the language to the sitemap.
- Enable “Frontend Status” and check the language selection in the store.
- Place a test order in the new language and check the order confirmation, status email, and invoice.
Frequently Asked Questions
How do I enable an additional language in the frontend?
What happens to product fields and SEO URLs when I enable a new language?
/lng/en/ plus the German name until you translate the names. It does not copy product extra fields, as each extra field belongs to a specific language. Create them for the new language. See “What Happens When You Enable a Language” for details.Where do I translate terms like the “packaging fee”?
MODULE_ORDER_TOTAL_PACKAGING_COSTS_TITLE. Click “Custom Value,” enter the text for each language, and click “Update.” The other total lines are in the same section.How do I translate the names of shipping methods and payment methods?
How do I find a text in xoLanguage, for example, “Address Book”?
Where do I change the note text in the shopping cart?
TEXT_INFO_SHIPPING_ESTIMATOR ” (“Eventuelle Rabatte oder Gutschriften werden erst berechnet, wenn Sie zur Kasse gehen!”) and the note about out-of-stock items (OUT_OF_STOCK_CAN_CHECKOUT). Enter your text as a “custom value.”How do I rename the text for logging in and registering during checkout?
TEXT_AUTH_LOGIN_HEADING, TEXT_AUTH_REGISTER_HEADING, TEXT_AUTH_GUEST_NOW.Are the German shop texts in the informal “du” form?
{SALUTATION_INFORMAL} instead of {SALUTATION} in the email templates, and rewriting CMS pages as well as payment method and shipping texts. The instructions are listed under “Du” instead of “Sie.”Why does a link on a CMS page in one language open the wrong language version?
https://. The store adopts this unchanged, so it always leads to the same language. Set the link using the editor’s link dialog (“CMS Links”) or as an address without a domain, such as store-cms.php?cID=<ID>. Then the store will construct the address in the visitor’s language.Why does a product attribute appear in the wrong language in the shopping cart after switching languages?
How do I enable automatic translation via DeepL?
Does automatic translation cost extra?
How do I enter my DeepL credentials and switch to the Pro plan?
free for the free account, paid for DeepL Pro. When switching to Pro, enter the new key and set the mode to paid.Do I need to make any adjustments due to the change in how I log in to the DeepL API?
How do I update translations if I change the German text?
How do I prevent DeepL from translating already-translated items multiple times?
How do I prevent HTML code from increasing DeepL costs?
<!-- xo:notranslate --> and <!-- /xo:notranslate -->. The store does not send these sections to DeepL. It already protects scripts, embedded videos, and the Content Editor’s code, video, form, countdown, and product list modules.Why did DeepL overwrite my own translation?
Why do my own texts from xoLanguage remain in German in the new language?
In which language does a customer receive the order confirmation and invoice?
Why are orders from the French marketplace processed in German?
Further Guides
We’ll set up your languages together with you
We’ll help you set up automatic translation, select the relevant sections, and manage the glossary—and if a text isn’t where you expect it to be.
Contact Support Now