Skip to content

Translation Structure

Mehrdad Pajuhaan edited this page Oct 23, 2026 · 1 revision

Translation Structure

Selldone texts are split into packs. Each pack is a folder with one file per language code, and every language file mirrors the English file key by key. This page explains each folder, the file formats, and how to find the text you want to change.

Overview

translate/
├── dashboard/            Merchant dashboard           <code>.ts
├── shop/                 Storefront + customer panel  <code>.ts
├── global/               Shared texts                 <code>.ts
│   ├── colors/           Color names                  <code>.ts
│   ├── countries/        Country names                <code>.ts (selected languages)
│   ├── community/        Community texts              <code>.ts
│   └── icons/            Direction-aware icon names   ltr.ts, rtl.ts
├── service/              Selldone service pages
│   ├── business-ideas/  expert/  feedback/  footer/  guild/
│   ├── home/  menus/  onboarding/  pricelist/
│   └── help/  internal-pages/   (a few languages)
├── backend/lang/<code>/  Laravel PHP files (emails, invoices, errors, …)
└── repository/           LanguagesRepository.ts (on-demand loader)

Language codes are lowercase file names, for example en.ts, de.ts, zh.ts, zh-tw.ts. The main packs (dashboard, shop, global) have 100 language files each.

The three product surfaces

Surface Folder Used by Examples of top-level keys
Dashboard dashboard/ The merchant management suite commons, page_titles, add_product, vendor_add, product_admin, widgets
Shop shop/ Storefronts and the customer panel footer, product_card, product_info, buy_button, basket_page, order_page, login, coupons
Backend backend/lang/<code>/ Server side: emails, invoices, PDFs, notifications, validation and errors emails.php, invoice.php, errors.php, validation.php, fcm.php, sms.php, …

dashboard/en.ts is the largest file (more than 12,000 lines). shop/en.ts is much smaller and is the best place to start if you want to improve what customers see.

TypeScript packs

Every .ts file is an ES module that exports one object:

export default {
  /** @see SFooterSection **/
  footer: {
    map: "Map",
    email: "Email",
    copyright:
      "The use of content only for non-commercial purposes and with reference to the source (link with {shop_title}). All rights reserved to {shop_title}.",
    privacy: "Privacy policy",
  },
};
  • Comments such as /** @see SFooterSection **/ name the Selldone component that uses the keys. Keep them; they help translators find the context.
  • Placeholders use the {name} form and are filled by vue-i18n.
  • Some values are arrays (for example surveys: ["Very poor", "Poor", "Normal", "Good", "Excellent"]).

global/en.ts also defines defaults such as currency_default: "USD" and language_default: "en", and imports the colors pack.

Backend PHP files

Backend files follow the Laravel language format and return a PHP array:

<?php

return [
    'previous' => '&laquo; Previous',
    'next' => 'Next &raquo;',
];

Placeholders use the :name form, for example 'greetings' => 'Hi, :name!' in emails.php. Use backend/lang/en/ as the reference. The English folder has 25 files, and almost every language folder has the same set; if a file is missing in your language, copy the English file and translate its values.

Shared packs

Pack Purpose
global/ Common words, units, statuses, dialogs, errors and other texts used by every app (mounted as global in the Storefront messages).
global/colors/ Color names.
global/countries/ Country names. Available for a subset of languages (18 files).
global/community/ Community (posts, topics, comments) texts.
global/icons/ltr.ts, rtl.ts Icon names that flip with text direction, such as arrow_back and arrow_next. Not translated.

Service packs

service/ holds texts for Selldone's own pages (home, menus, onboarding, price list, footer, guilds, experts, feedback and business ideas). Most have 100 language files. service/help/ and service/internal-pages/ exist only in a few languages.

The loader

repository/LanguagesRepository.ts maps pack names to folders and loads a language with dynamic import():

Constant Folder
GLOBAL global
COLORS global/colors
COUNTRIES global/countries
COMMUNITY global/community
DASHBOARD dashboard
SHOP shop
BUSINESS_IDEAS, EXPERT, FEEDBACK, FOOTER, GUILD, HOME, MENUS, ONBOARDING, PRICE_LIST service/<name>

PACKAGES_SHOP_OVERRIDE lists the packs a merchant can override per shop: global and shop. See Using the npm Package.

Finding the text you want to change

  1. Find the English sentence on screen.
  2. Search for it in shop/en.ts, dashboard/en.ts, global/en.ts or backend/lang/en/.
  3. Note the key path (for example footer.privacy).
  4. Open the same file for your language and change the value at the same key path.

Next steps