Docs / Getting Started / How to Run Your Directory in Multiple Languages

How to Run Your Directory in Multiple Languages

Translate your directory's interface, field labels, tags, and listing descriptions. One directory holds every language, and the widget follows the language of the page it sits on.

Your directory can display in any language. Interface wording, your field labels, your tags and categories, and the listing descriptions themselves.

One directory holds every language you set up, and each visitor reads one of them. The widget takes it from the language of the page it sits on, so a single embed covers every language version of your site.

The split worth understanding first

Translation happens in exactly two places, and which one you use depends on whether the text repeats.

Text that repeats gets translated once on the Translations page. A field label like "Téléphone" sits on all of your listings, so you write "Phone" a single time and every listing picks it up.

Text that belongs to one listing lives inside that listing. A member's description was written for that member, so its translations travel with it, in the same record.

That's the whole mental model. Everything below is those two halves in detail.

Start on the Translations page

Open Translations, add a language (30 to choose from), and you'll get rows to fill in. Then work down the sections:

  • Interface. The widget's own wording: Back, Show on Map, Loading, No results found, Search..., Search location..., Select..., Show All, All filters, plus the prompt visitors read before they've searched anything. 11 phrases.
  • Field labels — one row per field you've created. A "Téléphone" field shows up here, and you type "Phone" next to it.
  • Search and filters: your filter labels and their placeholder text.
  • Tags and categories gives you a row for each distinct value in your data, so "Membre actif" becomes "Active member".

Every section shows a count like "6 of 11", so you can see what's left without hunting for it. Blank rows fall back to the wording you originally authored, which means a half-finished language still reads correctly on your live site. Nothing breaks while you're partway through.

One language gets marked Default. That's the fallback for any visitor whose language you haven't set up yet.

Worth stating plainly, because it comes up: translating a tag changes what visitors read and nothing else. Filtering still works. Shared links still land on the same filtered view in every language.

Names, descriptions and text fields

Now the per-listing half. Names, descriptions, and any text or textarea value can hold every language in one value, marked up like this:

Open daily 9-6.
[lang=fr] Ouvert tous les jours de 9h à 18h.
[lang=es] Abierto todos los días de 9 a 18.

Four rules cover the whole format:

  • Text before the first marker is the default, shown to visitors whose language has no block of its own.
  • A marker stays in effect until the next marker or the end of the value.
  • [/lang] closes a block when you want to be explicit. Optional.
  • It's just text in the field, so it works everywhere a listing gets edited: the dashboard, a spreadsheet import, the REST API, Zapier, a submission form. Round-trip through CSV and the markers come back intact.

Why one value instead of a French copy of every listing? Because one member is one row. Nobody maintains parallel directories, and nobody re-imports two spreadsheets when a phone number changes.

Search and filters run on the language showing on screen. So a French visitor typing French words finds French listings.

Tip

Give each language its own paragraph in the description editor. Easier to scan when you come back to edit, and the markers stay visible instead of buried mid-sentence.

Which language a visitor gets

The most specific signal wins. In order:

  1. A language set in the embed snippet (config: { locale: "fr" }). This locks it, which is what you want when a page is always French.
  2. The URL: ?ed_lang=fr, or a language path segment like /fr/members.
  3. The page's own <html lang>. This is the important one for Wix Multilingual, WordPress with WPML or Polylang, Squarespace, and Webflow localized sites. Each language version of the page declares its language, and the widget follows it.
  4. The visitor's browser languages, in their preference order.
  5. Your Default language from the Translations page.

Regional codes degrade sensibly, so someone browsing on fr-CA reads a directory you set up as fr. Arabic and Hebrew render right-to-left automatically.

Wix Multilingual, WPML and similar setups

Each language version of a page can hold its own embed code, so you've got two options. Paste the same snippet on every language version and let <html lang> sort it out. Start there. One snippet to maintain, and adding Spanish next year means changing nothing on your site. Or hard-set locale per language version, which pins the French page to French regardless of who's visiting.

Install steps for Wix are in the Wix directory guide.

Your own language switcher

If your site already has a language toggle, point it here:

window.EmbedDirectoryWidget.setLanguage('fr');

Everything on the page switches: interface wording, field labels, tags, and the listing text itself. The rest of the configuration options are documented in the Widget JavaScript API.


Open Translations →

Stuck on something?

Send us a note and we'll get back to you as soon as possible.

Get in Touch

Build your directory today

Set up in minutes. Works on any website.