Emergency situation

In case of emergencies or breakdowns, you can send an SMS to our emergency hotline

On-call phone (SMS only)

+45 29 70 15 95

Send an SMS with the following information:

  • Your name and webshop
  • Description of the problem
  • Your callback phone number

Notes: This service is only for critical situations where your webshop is down or has serious problems. For regular support, please use our normal support channels.

Translate and customize texts in your webshop

Guide to language management in Shoporama. Customize and translate all texts in your online store, from buttons to checkout texts. Includes developer documentation with Smarty examples and CSV import.

Reading time: approx. {eight} minutes
Shopejer Developer

All text in your online store 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 to write—and can customize the language to suit your target audience and your brand identity.

Open the Text Manager

  1. Go to Design > Texts in the admin panel
  2. You’ll now see all texts organized into sections (e.g., Cart, User, Email, Order)
  3. Use the search bar 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.

Shoporamas Tekster-side med originaltekst til venstre og oversættelsesfelt til højre, samt søgefelt, sektionsfilter, og Eksporter- og Importer-knapper
Under Design > Texts, each original text appears on the left and a field for your customized version appears on the right. If the field is empty, the original text is used, and at the top you can search, filter by section, and export or import all texts as a CSV file.

For example, you can change:

  • "Add to Cart" to "Add to Shopping Cart"
  • "Out of stock" 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—just visit the relevant pages in your online store, and the texts will become available for customization.

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.

  1. Click Export to download all texts as a CSV
  2. Open the file in a spreadsheet (e.g., Excel or Google Sheets)
  3. Fill in the “translated ” column with your customized texts
  4. Save the file as a CSV (with semicolons as the separator and UTF-8 as the character set)
  5. 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 — Which section the text belongs to

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 text strings, 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 import the copy again 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 problem 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 even a comma or a 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 is saved with commas instead, the import function cannot 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 that 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

Each online store has one language, which you select under Online Store > General, and its own list of texts. If your store is to be available in multiple languages, this is done with one online store per language, and the texts are therefore customized separately for each store. The export feature makes it easy to move translations from one store to another. Read more about multilingual setup in the article 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. So if “Add to Cart” becomes “Add to the Cart,” that’s considered 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.

Texts from a previous theme

Texts from a theme you no longer use remain on the list. They don’t cause any problems, 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 the translations you’ve entered on the page. If your theme still uses that text, it will reappear on its own the next time the page is displayed—just without your customization.

Checklist After a Theme Update

  1. Click around your online store so that new text has time to be registered. Don’t forget the shopping cart, checkout, and receipt page.
  2. Go to Design > Texts and review the list for empty translation fields.
  3. If you have a lot of text, export the list using the Export button and locate the empty fields in the spreadsheet.
  4. Fill in the missing information and re-import the file using Import.
  5. 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 of 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’re only relevant 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 you can fix it. 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’d also like to adjust the checkout flow itself, you can read more in Customize Your Checkout.

Need help with text management? Contact us at support@shoporama.dk.


For developers: Smarty syntax for translatable text

When developing or customizing 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 manager 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.

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 Danish to create new texts
  • Test the translations — Visit the pages in the online store to verify that the variables are replaced correctly

Read more about theme development and language support in the article “Language Support in Themes.”