View Categories

Translating Sales Igniter Rentals & Bookings (WooCommerce)

18 min read

Sales Igniter Rentals & Bookings is translation-ready: every piece of text the plugin prints on the product page, in the calendar, in emails and in the admin goes through WordPress’s translation functions, so you can put it in any language without touching code. This page covers the tools most stores use (Loco Translate, WPML, Polylang, Poedit, TranslatePress and Weglot), where the files have to live so an update does not wipe them, what changed in version 1.0.64, and the handful of things that look like plugin text but are actually WooCommerce or your theme.

First: which plugin owns the text you want to change #

By far the most common reason a translation “does not work” is that it was entered under the wrong text domain. WordPress keeps a separate dictionary per plugin, keyed by that domain, and only looks a string up in the dictionary that the code asked for. Translating Add to cart in the woocommerce domain changes WooCommerce’s button on ordinary products; it does not change the Add to cart or Reserve button on a booking product, because that button is drawn by our plugin and looked up in our domain.

Since 1.0.64 the product is two plugins in one install. The free base, Sales Igniter Rentals & Bookings Lite, holds everything a visitor sees; the paid Regular add-on bundles that base and adds the professional features on top. Each has its own domain, and so does each Pro add-on:

Text you want to translateWhere it comes fromText domain
Calendar and date picker, “Select your dates”, “%d left”, “Start over”, the price and pricing card, “Add to cart” / “Reserve” on booking products, booking emails, the Rentals › Bookings adminSales Igniter Rentals & Bookings Lite (the free base, included inside Regular)sales-igniter-rentals-bookings-lite
Serials, Send & Return, the dashboard, advanced pricing, extensions, the REST APISales Igniter Rentals & Bookings for WooCommerce Regularsibooking
Subscriptions & MembershipsSales Igniter Subscriptionssisubscriptions
Refundable security depositsSales Igniter Security Depositssisecuritydeposits
Rental contracts and PDF signingSales Igniter Rental Contract Signing & PDF Generationsipdfsign
Custom fields, damage waiver, ID verificationSales Igniter Custom Fieldssicustomfields
Cart, checkout, My Account, order emails, “Add to cart” on non-booking productsWooCommercewoocommerce
Header, footer, menus, theme buttonsYour themethe theme’s own domain (divi, astra, …)

If you are unsure which one a string belongs to, search for it in Loco Translate under the Lite plugin first; roughly nine strings out of ten that a customer wants to change are there.

Where translation files live (and where they get deleted) #

A translation is a pair of files per language, <domain>-<locale>.po (the editable source) and <domain>-<locale>.mo (the compiled file WordPress reads), for example sales-igniter-rentals-bookings-lite-fr_FR.po and sales-igniter-rentals-bookings-lite-fr_FR.mo. Where you put them matters:

LocationPathSurvives a plugin update?
System (recommended)wp-content/languages/plugins/Yes. WordPress loads files here for any plugin on its own; no translation plugin needs to stay active.
Custom (Loco Translate only)wp-content/languages/loco/plugins/Yes. Loco’s protected folder; it also wins over the System file. Loco Translate must remain installed and active for files here to load.
Author (inside the plugin)wp-content/plugins/sales-igniter-rentals-bookings-lite/Languages/ or wp-content/plugins/sibooking/Languages/No. Every update replaces the plugin folder, and your files with it.

Never save your own translations inside the plugin folder. From 1.0.64 the plugin does load its own Languages/ folder (that is where the languages we ship live), but it is still not the place for yours: the next update overwrites it.

The Lite plugin’s folder is sales-igniter-rentals-bookings-lite, whether you installed it from WordPress.org or downloaded it from this site — both builds unpack to the same folder, so the paths above are the same either way. Inside the Regular add-on the same files sit at wp-content/plugins/sibooking/lib/sibookinglite/, which is an internal path and is not where your own translations belong.

Included languages #

Version 1.0.64 ships the Lite base with seven languages: French (fr_FR), German (de_DE), Spanish (es_ES), Italian (it_IT), Dutch (nl_NL), Brazilian Portuguese (pt_BR) and European Portuguese (pt_PT). Set the site language under Settings › General › Site Language and the storefront switches with it. If you do not like a shipped wording, translate that string yourself in the System or Loco location: your own translation overrides the shipped one string by string, so you only need to change the strings you care about, and your file is kept on update.

Calendar strings are JavaScript and need JSON files (1.0.64 or later) #

Part of the storefront is drawn in the browser by the calendar script rather than by PHP: “Select your dates”, “%d left”, “%d days”, “Until %s”, “Start over”, “Please first select your booking dates” and friends. WordPress translates that kind of text from a JSON file that sits next to the .mo, not from the .mo itself.

  • Before 1.0.64 those strings could not be translated at all: the plugin did not register its scripts for translation, so a translation in the .po was silently ignored on the front end. If you are on an older version and the calendar stays in English, update first.
  • From 1.0.64 they translate like everything else, provided the JSON file exists. WordPress looks for wp-content/languages/plugins/sales-igniter-rentals-bookings-lite-fr_FR-<hash>.json, where the hash is an MD5 of the script’s path inside the plugin, one file per script.
  • Loco Translate creates the JSON for you every time you click Save (Loco 2.5 or later); nothing to configure.
  • Poedit does not. After saving with Poedit, run wp i18n make-json once (see the Poedit section). WPML cannot generate the file either; see the WPML section for what it can do instead.

Method 1: Loco Translate (recommended, free) #

Loco Translate edits .po files inside the WordPress admin, compiles the .mo and the JSON on Save, and knows about the safe folders. It is the tool we test against.

  1. Install and activate Loco Translate from Plugins › Add New.
  2. Go to Loco Translate › Plugins and click Sales Igniter Rentals & Bookings Lite. (Do the Regular add-on, Sales Igniter Rentals & Bookings for WooCommerce Regular, as a second, separate pass later; it holds only the professional-feature strings.)
  3. If your language is already listed (one of the seven shipped ones), click it. If not, click New language, pick the language, and under Choose a location select System (languages/plugins/sales-igniter-rentals-bookings-lite-fr_FR.po). Custom is fine too. Do not pick Author. Click Start translating.
  4. Find a string with the filter box above the list: type part of the English text, for example Reserve or Select your dates. Click the row, type the translation in the bottom pane.
  5. Strings with a count, such as Month / Months or %d left, show one tab per plural form of your language (two for French or German, more for Polish or Russian). Fill in each tab and keep the %d or %s placeholder in place; the plugin replaces it with the number or date at run time.
  6. Click Save. Loco writes the .po, compiles the .mo and generates the JSON files for the calendar strings in the same folder. Reload a product page in a private window (see the cache note under Troubleshooting).

After a plugin update, open the language again and click Sync. Loco merges any new strings from the updated plugin into your file (they show up untranslated, with a count in the status bar); translate them and Save. Existing translations are kept.

Editing a shipped language: Loco shows the shipped French, for example, at the Author location, which is read-only in practice. Click it, then use Copy to create a copy at the System or Custom location, and edit the copy. Only the strings you change in the copy differ from the shipped file; everything else keeps falling through to it.

Regular installs where Lite is not a separate plugin: the Regular add-on bundles the Lite base in its own folder, so Loco may list only the Regular plugin. In that case open the Regular bundle, switch to its Advanced tab, click Add set, enter sales-igniter-rentals-bookings-lite as the Text domain and lib/sibookinglite as the source file path, and save the configuration. The Lite strings then appear as a second set in the same bundle, and Sync extracts them from the bundled copy so that the JSON files match the scripts actually served.

Method 2: WPML String Translation #

  1. Make sure the WPML String Translation add-on is installed and active.
  2. Go to WPML › Theme and plugins localization. In the plugins list tick Sales Igniter Rentals & Bookings Lite (and the Regular add-on if you use it) and click Scan selected plugins for strings. On recent WPML versions the same scan is under WPML › Translations › Strings, in the “Not seeing strings you are looking for?” section.
  3. Open WPML › String Translation (or the Strings tab) and set the domain filter to sales-igniter-rentals-bookings-lite. Search for the string, click the pencil, enter the translation for each language, and tick Translation is complete.
  4. Repeat with the domain filter set to sibooking for Regular strings, and to the add-on domains from the table above.

JavaScript strings under WPML. WPML states that it cannot generate the JSON translation files WordPress needs for scripts registered with wp_set_script_translations(), which is how the calendar strings are loaded from 1.0.64 on. Since WPML 4.9 there is a switch, WPML › Settings › String Translation › Detect strings in JavaScript files, which makes those strings appear for translation (in the Other strings area of Translation Management); WPML recommends turning it off again after the scan for performance. If the calendar still shows English after that, the reliable route is to translate the Lite domain with Loco Translate alongside WPML (they do not conflict; WPML keeps handling your pages and products), or to generate the JSON with wp i18n make-json from a .po as described in the Poedit section.

Method 3: Polylang #

Polylang’s Languages › Translations panel is for dynamic options (site title, widget titles, values a plugin registers explicitly). Polylang itself documents that strings coming from a plugin’s .po/.mo files are not scanned and do not appear there, and points to Loco Translate for them. That applies to Polylang Pro as well.

  1. Add your languages under Languages › Languages as usual; Polylang switches the WordPress locale per page, and the plugin follows it.
  2. Install Loco Translate and follow Method 1 once per language. Each language gets its own sales-igniter-rentals-bookings-lite-<locale>.mo and JSON in the System folder, and Polylang’s locale switch picks the right one.
  3. Product titles, descriptions and any text you typed into a rental product (custom price labels, notes) are content, not plugin strings: translate those through Polylang’s product translation as normal.

Method 4: Poedit and SFTP #

Use this if you prefer working offline or do not want another plugin on the site.

  1. Download the template from the plugin: wp-content/plugins/sales-igniter-rentals-bookings-lite/Languages/sales-igniter-rentals-bookings-lite.pot (on a Regular-only install it is at wp-content/plugins/sibooking/lib/sibookinglite/Languages/sales-igniter-rentals-bookings-lite.pot; the Regular add-on’s own template is wp-content/plugins/sibooking/Languages/sibookings.pot).
  2. In Poedit choose File › New from POT/PO file, open the .pot, pick the language, and translate. Poedit shows plural forms as tabs, the same as Loco.
  3. Save as sales-igniter-rentals-bookings-lite-fr_FR.po (domain, hyphen, WordPress locale code). Poedit writes the .mo next to it automatically (Preferences › Advanced › Automatically compile MO file when saving must be on, which is the default).
  4. Upload both files with SFTP to wp-content/languages/plugins/. Create the folder if it does not exist. Do not upload into the plugin folder.
  5. Generate the JSON for the calendar strings. With WP-CLI on the server, from the WordPress root:
    wp i18n make-json wp-content/languages/plugins/sales-igniter-rentals-bookings-lite-fr_FR.po --no-purge
    This writes one sales-igniter-rentals-bookings-lite-fr_FR-<hash>.json per script into the same folder. --no-purge keeps the JavaScript strings in your .po so you can keep editing one file; without it the command removes them from the .po. If you have no shell access, ask your host to run it, or do this one step with Loco Translate: install it, open the language (it finds your uploaded file at the System location), click Save once, and Loco compiles the JSON.
  6. After a plugin update, open your .po in Poedit, choose Translation › Update from POT file with the new .pot, translate the new strings, save, re-upload, and re-run the JSON step.

Method 5: TranslatePress and Weglot #

TranslatePress and Weglot work on the rendered page instead of the plugin’s files: you open the front end, click a piece of text and type the translation. Because they translate what is actually in the browser, they also catch text the calendar inserts with JavaScript, on any plugin version, and they need no knowledge of text domains.

  • They work per page and per exact text. “3 left” and “12 left” are two different strings to them, and a string you translated on one product may need to be confirmed on another page (TranslatePress’s “automatic translation” and Weglot’s machine translation close that gap, at their own cost).
  • Text that only appears after an interaction (the booking summary after picking dates, validation messages) has to be triggered in the visual editor before it can be selected.
  • Emails and the admin are outside their reach; use one of the file-based methods above for those.
  • They combine fine with a .mo file. A good pattern is a complete Lite translation via Loco plus TranslatePress or Weglot for the multilingual page content.

Method 6: quick overrides without a translation plugin #

To change one or two words on an English site (say, Reserve to Book now) you do not need a translation at all. A gettext filter in a small must-use plugin, a code-snippets plugin or your child theme’s functions.php does it. Keep the domain check: it is what stops the snippet from renaming every “Add to cart” in WooCommerce too.

add_filter( 'gettext', function ( $translated, $original, $domain ) {
    if ( 'sales-igniter-rentals-bookings-lite' !== $domain ) {
        return $translated;
    }
    $overrides = array(
        'Reserve'           => 'Book now',
        'Select your dates' => 'Pick your rental dates',
    );
    return $overrides[ $original ] ?? $translated;
}, 10, 3 );

The first argument compared is the original English text exactly as it appears in the plugin, including capitalisation and placeholders. Plural strings go through ngettext instead (same idea, five arguments). This filter covers text rendered by PHP; the calendar’s JavaScript strings are loaded from the JSON files and do not pass through it, so for those use a real translation file.

Upgrading from 1.0.62 or earlier: keep your existing translation #

Up to 1.0.62 there was one plugin and one text domain, sibooking, so an existing translation is a file called sibooking-fr_FR.mo. From 1.0.64 the visible strings moved to the Lite base, whose domain is sales-igniter-rentals-bookings-lite — the plugin’s slug on WordPress.org. You do not lose anything: the plugin also loads your existing sibooking-<locale>.mo from the System and Loco locations into the sales-igniter-rentals-bookings-lite domain, so the base strings keep showing your translation, and where a shipped language exists your own wording still wins.

The same applies to the short-lived sibookinglite domain that the free plugin used in its first two releases: a sibookinglite-<locale>.mo you made then is merged into the new domain automatically, from the System, Loco and plugin Languages/ locations, and it still wins over the shipped wording. There is nothing to rename — but if you edit a translation from now on, do it in the sales-igniter-rentals-bookings-lite files, which is what Loco Translate and WPML will show you.

To keep editing the base strings in Loco Translate going forward, move them over once:

  1. Back up your .po first. In Loco Translate open the plugin, find your language row and click Download PO (the .po is the file with your work in it; the .mo can always be regenerated from it).
  2. Update to 1.0.64 or later.
  3. In the folder that holds your file (wp-content/languages/plugins/ or wp-content/languages/loco/plugins/), copy sibooking-fr_FR.po to sales-igniter-rentals-bookings-lite-fr_FR.po in the same folder, via SFTP or your host’s file manager. Copy, do not rename: the Regular add-on still uses the sibooking file for its own strings.
  4. In Loco Translate go to Plugins › Sales Igniter Rentals & Bookings Lite. Your language now appears, at the location you copied into. Click it.
  5. Click Sync. Loco lines your translations up with the Lite template, keeps every match, and lists the strings that are new or were never translatable before (the calendar’s JavaScript strings among them).
  6. Translate the new strings and click Save. This creates the .mo and the JSON files for the calendar strings.
  7. Open the Regular add-on in Loco and Sync its language too, so the sibooking file drops the strings that moved to Lite and picks up anything new.

What is not the plugin #

These come up in support as “translation” questions, and none of them is solved in the plugin’s translation files.

  • Currency symbol and price format. A price such as Fr. 20.– or 20,00 € is formatted by WooCommerce. Change it under WooCommerce › Settings › General › Currency options (symbol position, thousand and decimal separators, number of decimals). A symbol WooCommerce does not offer, such as Fr. instead of CHF, is a one-line woocommerce_currency_symbol filter, and the Swiss .– ending is a woocommerce_get_price_html / price-format snippet; both are WooCommerce-side.
  • Month and weekday names, date order, first day of the week. The calendar takes them from the WordPress locale (Settings › General › Site Language and Week Starts On) and from the plugin’s own date-format settings under Rentals › Settings. If the calendar shows English month names, the site language is English; nothing in the .po changes that.
  • Cart, checkout, My Account, “Add to cart” on regular products, WooCommerce order emails. WooCommerce’s own strings, covered by its language pack, which WordPress installs automatically for the site language. To reword one, translate it under the woocommerce domain.
  • Theme text (headers, “Read more”, search box, breadcrumbs, the button styling that puts text in capitals). Divi, Astra, Flatsome and the rest each have their own text domain and their own language files; translate those under the theme in Loco.
  • Text you typed yourself in a product, a price label, a rental note or an email template setting is content: it is shown exactly as saved, and multilingual stores translate it per language with WPML, Polylang or TranslatePress.

Troubleshooting #

SymptomLikely causeWhat to do
Translated, but the button or label is still EnglishWrong text domainCheck the table at the top. The booking button, calendar and pricing card are sales-igniter-rentals-bookings-lite, not woocommerce.
Translated, still English, domain is rightWrong file location or file nameThe .mo must be sales-igniter-rentals-bookings-lite-<locale>.mo in wp-content/languages/plugins/ (or Loco’s languages/loco/plugins/, with Loco active). The locale must match Settings › General exactly: fr_FR is not fr_CA or fr_BE.
Works when logged in, English for visitors (or the other way round)Page or object cachePurge your caching plugin (WP Rocket, LiteSpeed Cache, W3 Total Cache…) and any host or Cloudflare cache after saving a translation. Object caches (Redis, Memcached) can hold the old translation table too; flush them.
Everything is translated except the calendar: “Select your dates”, “%d left”, “Start over”, “Until …”JavaScript strings without JSON, or a plugin older than 1.0.64Update to 1.0.64 or later. Then Save the language once in Loco Translate, or run wp i18n make-json as in the Poedit section; check that sales-igniter-rentals-bookings-lite-<locale>-<hash>.json files exist next to the .mo.
Translation vanished after updating the pluginFile was saved inside the plugin folderRestore it from your .po backup into wp-content/languages/plugins/ and never use the Author location again.
New strings after an update show in EnglishThe .po predates the updateLoco: open the language, Sync, translate, Save. Poedit: Update from POT file.
Upgraded from 1.0.62, calendar strings untranslated, everything else fineOld single-domain file has no JSONFollow the upgrade procedure above; the Save in Loco creates the JSON.
The string is nowhere in the plugin’s listIt is a WooCommerce or theme string, or your own contentLook under woocommerce or the theme in Loco; or edit the product / setting where you typed it.

Still stuck? Send us the language code from Settings › General, the exact English string, a screenshot of where it appears, and a listing of wp-content/languages/plugins/; those four things answer almost every translation ticket.