Translate and customize texts in your webshop
Customize all text in your online store's theme—from buttons to checkout and emails—under Design → Text, and see how it aligns with the translations into your country's languages. Includes CSV import and developer documentation.
All text in your online store’s theme can be customized and translated using the text manager. This includes button text such as “Add to Cart,” error messages, checkout text, form fields, email text, and all other text in your theme. You decide what the text should say and can customize the language to suit your target audience and your brand identity.
The text manager is for the store’s own language. If you sell in other countries using the “Countries” feature, the text is translated into those countries’ languages under Web Store → Translations, usually completely automatically. You can read more about this in the “Multiple Languages” section below and in “Translate Your Web Store into Other Languages.”
Open Text Management
- Go to Design → Texts in the admin panel
- You’ll now see all texts organized into sections (e.g., Cart, User, Email, Order)
- Use the search field to find a specific text, or filter by section
Customize a text
For each text, you’ll see the original text on the left and a field for your customized version on the right. Enter your desired text and click Save Translations. If the field is empty, the original text will be used.

For example, you can change:
- "Add to Cart" to "Add to Shopping Cart"
- "Sold out" to "Temporarily out of stock—contact us for delivery"
- "Order Confirmation" to "Thank you for your order!"
- Checkout texts to suit your target audience
Some texts contain variables (such as order number or product name). These are displayed with curly brackets, e.g., {x}. You must keep the variables in your customized text, but you’re free to move them around within the sentence.
Sections
The texts are organized into sections that correspond to different parts of your online store. This makes it easy to find the texts you want to customize:
- Email — Texts in order confirmations, shipping emails, and other automated emails
- User — Profile texts, login, create account, and account pages
- Order — Order history and order details for the customer
- Basket — Shopping cart and adding products
- Checkout — Payment flow and order completion
- Thanks — Thank-you page after a successful purchase
- Search — Search function
- Product — Product pages
- Address — Address fields
- General — General text throughout the store
New text appears automatically
When a page in your online store is displayed for the first time, the system automatically detects all text on the page. New text will therefore appear under Design → Text as pages are visited. You don’t need to create them manually—simply visit the relevant pages in your online store, and the text will become available for customization.
If you’ve created countries under Web Store → Countries, Shoporama also scans the theme’s files when you activate a country, when you open Web Store → Translations, and when automatic translation is running. This means that most of the theme’s texts will appear on the list—including those in emails and error messages—without a customer having seen them first. Texts that include a variable from the theme in the middle of the text itself will only appear once they’ve been displayed in the store.
Export and Import Translations
You can export all your texts as a CSV file, edit them in a spreadsheet, and import them again. This is especially useful if you need to translate many texts at once or want a translator to review them.
- Click Export to download all texts as a CSV
- Open the file in a spreadsheet (e.g., Excel or Google Sheets)
- Fill in the “translated ” column with your customized texts
- Save the file as a CSV (with semicolons as delimiters and UTF-8 as the character set)
- Click Import to upload the updated file
Important: The original text in the CSV file must match exactly the text stored in the system. The system uses a checksum to find the correct text, so even small changes to the original text can prevent the translation from being linked correctly.
The CSV file has four columns:
- original — The original text (must not be changed)
- translated — Your adapted/translated text
- hint — A contextual description explaining where the text is used
- section — The section to which the text belongs
Note: This export contains the store’s own texts in the store’s language. If you use Countries, you export the translations into the countries’ languages under Web Store → Translations → Theme Texts using the Export and Import button. That file has different columns, and you import it back in the same place, not here.
How the export works
The export always includes all texts in the store. If you’ve filtered the list by a section or searched for a specific word, you’ll still get the entire list in the file—not just the rows you can see on the screen. The file is named language.csv and contains both the texts you’ve already localized and those that are still blank.
At the top of the file is a header row with the four column names. Each line below that represents a single text entry. If the “translated” column is empty, the text hasn’t been localized yet, and the customer will see the original text. This makes the file a great working document: if you filter for empty cells in the spreadsheet, you’ll immediately see what still needs to be written. For a store with several hundred texts, this is much faster than clicking through the list page by page.
Tip: Save a copy of the latest export before you start editing it. If something goes wrong along the way, just reload the copy and you’ll be back where you started.
How the import works
The import function reads the file line by line and uses the header row to determine which column corresponds to what. The order of the columns therefore doesn’t matter. The “original” and “translated” columns must always be included, while “hint” and “section” can be omitted. If a translator only needs to fill in the translations, a file with just those two columns is sufficient.
For each line, one of two things happens:
- The text already exists. The original text matches exactly, and your translation is saved over the existing text.
- The text does not exist. In that case, it is created as a new text with the “hint” and “section” specified in the file.
Two details are worth noting. First, only the “translated” column is updated for texts you already have. If you correct the hint or section in the file for a text that already exists, nothing happens. The two columns are only used when the import creates a new text.
Second, an empty “translated” column clears the existing translation, so the original text reappears. This is handy if you want to undo a translation, but it’s a bummer if you accidentally upload a file where the column has been cleared by mistake. The same thing happens if the column isn’t included in the file at all.
Once the import is complete, the page displays a message such as “42 rows were imported.” This number refers to the number of lines in the file, not the number of texts that were recognized. Therefore, always check a few random entries on the list afterward.
Important: Just because the import creates a new text entry doesn’t mean that the text will actually appear in your online store. A translation will only be used if your theme contains the exact original text. If a comma or space has been changed in the “original” column, you’ll get a new, unused row in the list instead of the translation you were expecting.
Save the file as UTF-8 with semicolons
Most import issues stem from how the spreadsheet saved the file. Two things must be in place:
- A semicolon between the columns. If your spreadsheet saves the file with commas instead, the import function won’t be able to tell where one column ends and the next begins.
- UTF-8 as the character set. If you save the file in an older Windows format, characters like æ, ø, and å will appear as question marks or other strange characters in your text.
In Excel, select the CSV UTF-8 file type when saving. Whether Excel then uses semicolons or commas depends on your language settings, so it’s a good habit to open the saved file in a simple text editor and check that there are actually semicolons between the columns. If you’re using Google Sheets or Numbers, the character set is always UTF-8, but still check to make sure the columns are separated by semicolons. If you’re unsure, try importing two or three lines first, and then check the list afterward to see if the text has been imported correctly.
When the import doesn’t work as expected
- Question marks appear instead of æ, ø, and å. The file isn’t saved as UTF-8. Save it again in the correct format and run the import from the beginning. The incorrect text will be overwritten.
- An empty or strange row has appeared in the list. The file is likely comma-separated. Save it with semicolons, and delete the incorrect row using the trash can icon on the far right.
- The translation appears in the list but not in the store. This means the original text doesn’t match. Search for a few words from the original text and see if there are two nearly identical rows. The one being used is the one that matches the theme exactly.
- Only some of the rows were imported correctly. Check that the columns in the header row at the top of the file are still labeled “original” and “translated,” and that no extra spaces or quotation marks have been added around the original text.
Multiple Languages
The texts under Design → Texts are the store’s own texts in the store’s language, which you select under Webstore → General. These are the texts customers see in your store as it stands today.
If you sell in other countries using the “Countries” feature, and a country has a different language, the texts are translated into that country’s language under Web Store → Translations in the “Theme Texts” category. It is your version from Design → Texts that gets translated: if you’ve customized a text, it’s your customized text; otherwise, it’s the theme’s default text. If “Translate Texts Automatically” is enabled under Webshop → Countries, the translation will happen automatically within a few minutes, and you can edit the translations afterward.
Here’s how the two pages are connected:
- If you edit a text here, its translations will become outdated. Automatic translations will be regenerated, and the ones you’ve written yourself will be marked as “Danish changed” under “Translations,” so you can see that they need to be reviewed.
- Do not enter Swedish or English texts here if you’re using “Countries.” Otherwise, customers in your Danish store would also see them. Country-specific texts belong under “Translations.”
- If a translation is missing, customers in that country will see your text from here until it is translated.
For information on how “Translations,” automatic translation, and CSV files work, see “Translate Your Webshop into Other Languages.”
If, instead, you have a separate online store for each language, each store has its own list of texts, and you customize them individually in each store. The export feature here makes it easy to move texts from one store to another. Developers can read more in Language Support in Themes.
What happens to your texts when the theme is updated?
Your customized texts belong to your online store, not to the theme. They are stored along with the rest of the store’s data and are neither deleted nor reset when your theme is updated to a new version or when you switch to a completely different theme.
When you switch themes
If the theme includes its own translations in the package, they’ll be loaded into the list as soon as you switch themes or activate a theme from the Theme Store. Texts that didn’t exist before are created, and empty fields are filled in with the theme’s own wording. Your own customizations are never overwritten.
When an original text changes
The only thing you need to keep an eye on is text where the original text itself has been changed in the new version of the theme. A customization is tied to the exact original text. If “Add to Cart” becomes “Add to the Cart,” this constitutes a new text. Your old customization won’t be deleted, but it will no longer be used, and instead, a new, empty row will appear in the list. You can quickly find them by looking through the list for empty translation fields. If you use Countries, the new text will also appear under Translations, and it will be translated into the languages of those countries if automatic translation is enabled.
Texts from a Previous Theme
Texts from a theme you no longer use remain on the list. They don’t cause any harm, because a translation is only used if the original text appears in the currently active theme. If you want to clean things up, you can delete a row using the trash can icon on the far right. Please note that this button also saves any translations you’ve written on the page. If your theme still uses the text, it will reappear on its own the next time the page is displayed, just without your customization. If you’re using the “Countries” theme, the text will also lose its translations into the countries’ languages, and it will need to be translated again when it reappears.
Checklist After a Theme Update
- Click around your online store so that new text has time to be registered. Don’t forget the shopping cart, checkout, and receipt page.
- Go to Design → Texts and review the list for empty translation fields.
- If you have a lot of text, export the list using the Export button and locate the empty fields in the spreadsheet.
- Fill in the missing information and re-import the file using Import.
- Finally, check an order confirmation to make sure the email texts are also in place.
Tips for Good Texts
- Be consistent — Use the same tone and style in all texts
- Think about the customer — Write text that’s easy for your customers to understand
- Test in the online store — Visit the relevant pages to see how the text looks in practice
- Use hints — Hints provide context and help you remember where the text appears
Frequently Asked Questions
I’ve edited some text, but the old version is still showing up in the store
When logged into the admin panel, you always see the latest version of the pages. A regular visitor, however, may see a cached copy of the page that is no more than four hours old. The shopping cart, checkout, and receipt page are never cached in this way, so changes there take effect immediately. If the old text is still there the next day, it’s not the cached copy but the original text that doesn’t match. See the section “When the import doesn’t work as expected.”
We just updated the theme. Do I need to translate everything from scratch?
No. All your customized texts will remain, and the new version of the theme will continue to use them. You only need to review the texts where the original text itself has been reworded in the update. You’ll find these as empty fields in the list under Design → Texts.
Can I reuse my translations in another online store?
Yes. Export the texts from the first store using Export, and import the same file into the other store using Import. Translations where the original text is the same in both stores will work immediately. The remaining lines will become new, unused rows, which you can simply leave as is or delete. This works best when the stores are running on the same theme.
Can I just use two columns in the file?
Yes. “original” and “translated” are sufficient, and both must always be included. The header row at the top determines the column names, so the order doesn’t matter. You can omit “hint” and “section”; they only matter when the import creates new text.
Can I send the file to an external translator?
Yes, and that’s one of the best reasons to use the export feature. Ask the translator to write only in the “translated” column and never to touch the “original” column. Also ask that variables such as {x} and {order_id} remain as is, and that the file be saved as UTF-8 with semicolons. Then you can import the file directly again when it’s returned.
What happens if I clear the translation field?
The original text will reappear. This applies both when you delete the content in the field on the list and save, and when you upload a file where the “translated” column is empty. This is an easy way to undo a single customization without deleting the text itself.
I imported the wrong file. What should I do?
There’s no “Undo” button, but it’s easy to fix. Re-import your saved copy of the original export, and the incorrect translations will be overwritten. If the import also created rows with incorrect original texts, delete them one by one using the trash can icon on the far right. They won’t affect your store as long as they’re just sitting there.
Can I also change the text in the order confirmation via import?
Yes. The email texts are located in the Mail section and are included in the export along with everything else. Emails are generated the moment they’re sent, so a change takes effect starting with the next email that’s sent out. Remember to keep variables such as {order_id} and {webshop_name} so the customer still receives their order number. If you also want to adjust the checkout flow itself, you can read more in Customize Your Checkout.
I also sell in Sweden using Lande. Should I write the Swedish text here?
No. Here, you only edit the store’s own text, and if you write Swedish here, your Danish customers will see it as well. You’ll find the Swedish text under Webstore → Translations → Theme Texts. If automatic translation is enabled, they’ve already been translated from your Danish texts, and you should only edit them if you want to rephrase something.
Do customers in my other countries receive emails in their own language?
Yes. Emails regarding an order—such as the order confirmation, the shipping notification, and the credit memo—are sent in the language and currency of the country where the customer made the purchase. The email texts are the theme’s default texts, so the translations found under Webshop → Translations → Theme Texts are used. If a translation is missing, the text will appear in Danish in the email.
Do you need help with text management? Contact us at support@shoporama.dk.
For developers: Smarty syntax for translatable text
When you develop or customize a Shoporama theme, you can make all text translatable by using the Smarty block <{t}>...<{/t}>. Text enclosed in this block automatically appears in the text management section under Design → Texts and can be customized by the store owner.
Basic Syntax
The simplest form simply wraps the text:
<{t}>Add to Cart<{/t}>
The text "Add to Cart" will now appear in the text manager, where the store owner can replace it with, for example, "Add to Shopping Cart."
Sections — Group Your Texts
Use the section parameter to organize text into logical groups. This makes it easier for the store owner to find and edit text:
<{t section="Basket"}>Basket<{/t}>
<{t section="User"}>Edit profile<{/t}>
<{t section="Mail"}>Order confirmation<{/t}>
The most commonly used sections in Shoporama themes are:
- Mail — Email Templates
- User — User and account pages
- Order — Order history and order details
- Basket — Shopping cart
- Address — Address fields
- Thanks — Thank You Page
- General — General Texts
- Checkout — Checkout Flow
- Search — Search function
- Product — Product pages
Hints — Provide context for the translator
Use the "hint " parameter to provide a description of where the text is used. The hint appears in the text editor and helps the store owner understand the context:
<{t section="Mail" hint="Email Subject"}>Thank you for your pickup<{/t}>
Variables in Texts
You can insert dynamic values into translatable texts by specifying them as parameters. In the text, they are referenced using curly braces:
<{t x=$product->getName()}>Which emoji best describes your experience with {x}?<{/t}>
You can use multiple variables in the same text:
<{t section="Thanks" x=$order->getWebshopOrderId() y=$smarty.capture.order_total}>Order #{x} has been received. Total: {y}<{/t}>
The variables are automatically replaced with the actual values when the page is displayed. The store owner can freely move the variables around in the text, but must keep them in the customized version.
Auto-discovery of text
When a template is rendered and the system encounters a <{t}> block that has not yet been registered, the text is automatically created in the database. This means you don’t need to create texts manually—new texts appear in the text management system as users visit the pages.
Note: Auto-discovery only creates new texts when the language is Danish. This ensures that the original texts are not contaminated with foreign-language texts.
For shops with multiple countries, Shoporama also reads the theme’s .html files and creates the missing <{t}>...<{/t}> blocks and "..."|t texts so they can be translated before they are displayed. This happens when a country is activated, when Webshop → Translations is opened, and when automatic translation is running—and only when the theme’s files have been modified since the last time. Texts containing Smarty code within the text itself, e.g., <{t}>Hello <{$name}><{/t}>, are skipped because the key is the final text. Use parameters instead, as shown above.
CSV Import/Export — Technical Details
The CSV file uses the following format:
- Separator: Semicolon (;)
- Encoding: UTF-8
- Columns: original;translated;hint;section
Example of CSV content:
original;translated;hint;section Add to Cart;Add to Shopping Cart;;Basket Sold Out;Currently Out of Stock;;Product Order Confirmation;Thank you for your order!;Email Subject;Mail
Important for developers: The system matches text using an MD5 checksum of the original text. This means that the original text in the CSV file must be identical to the text used in the template—even a small change in spacing or punctuation will create a new, separate text entry instead of updating the existing one.
Best Practices for Theme Developers
- Always use sections —this gives the store owner an overview and makes it easy to find texts
- Add hints to ambiguous texts —For example, “OK” can be used in many places, so a hint explains the context
- Name variables descriptively — For example, use `order_id` or `webshop_name` instead of `x` and `y`. All parameters other than `section ` automatically become variables in the text
- Keep original texts in Danish — Auto-discovery requires the Danish language to create new texts. If the theme’s original texts are written in another language—such as Delaware, which is in English—specify the language using “text_language” in theme_settings.json so that a country with that language displays the theme’s original texts where no translation exists
- Prepare the theme for different countries — All visible text must be enclosed in <{t}> or |t, including in emails and error messages; otherwise, they will appear in Danish in all countries. See Prepare your theme for different countries
- Test the translations — Visit the pages in the online store to verify that the variables are being replaced correctly
Read more about theme development and language support in the article Language Support in Themes.
Related articles
Customize your checkout
Guide to customizing the checkout flow in your Shoporama online store, including payment methods, shipping, customer fields and gift cards.
Blacklist - Block unwanted orders
Learn how to use Shoporama's blacklist feature to block spam orders and unwanted customers by blacklisting email, phone number or IP address.
Checkout flow and shipping calculation
Guide for developers to implement shipping in the checkout flow of a Shoporama theme.
Prepare your theme for multiple languages and countries
Step-by-Step Guide for Developers: How to Make Your Own Shoporama Theme Work with Countries, Including Translated Texts, the Country's Currency and...
Translate your online store into other languages
How to translate your online store when selling in multiple countries: automatic translation, status by language, corrections, addresses in the...
Sell in multiple countries and in multiple languages
Here's how to sell in other countries in your customers' languages and currencies using "Countries": Add a country, set up the address, language,...
Related features
Now, AI can correct the text in your online store
Ask the AI to correct or translate the text in your online store—from buttons to order confirmations. The changes will take effect immediately.
Choose a theme and understand theme settings and the page builder
Select and change themes in Shoporama, and learn the difference between Webstore settings, theme settings, text, and the page designer before you...
Delaware and DelawareDK: All modules in the page designer
A guide to all 25 modules in the page builder for Delaware and DelawareDK: hero, products, categories, text, content items, and...