DEV Community

Serghei Streltov
Serghei Streltov

Posted on • Originally published at welocale.net

How to Translate Your WordPress Site into 50+ Languages (Free Plugin, No Code)

Most WordPress translation solutions ask you to restructure your site. WPML adds a language switcher and creates separate post copies for each language. Polylang does the same. Both require you to manage translations page by page, keep multiple versions of every post in sync, and deal with plugin conflicts when your theme or other plugins update.

The WeLocale plugin works differently. There is no per-page translation workflow, no duplicate posts, no theme editing. You install the plugin, connect it to your WeLocale account with your app key, and the site is translated at runtime, in the visitor's browser, without touching your database.

Here is how to do it.

Step 1: Install the WeLocale plugin

In your WordPress admin, go to Plugins > Add New Plugin.
Search for WeLocale.
Click Install Now, then Activate.

The plugin is free and listed at wordpress.org/plugins/welocale.

Step 2: Get your app key

If you do not have a WeLocale account yet, sign up for free at welocale.net. The free plan includes 3,000 words and 1 language, enough to see it working on your real site.

Once you are in, go to Website > Widget in the WeLocale dashboard. Copy your Public App Key (a UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Step 3: Connect the plugin

  1. In WordPress admin, go to Settings > WeLocale.
  2. Paste your App Key into the field.
  3. Make sure your domain is listed under Allowed Domains in your WeLocale dashboard (Website > Settings > Allowed Domains).
  4. Save.

Reload your site's front end. The language switcher appears automatically, no shortcode, no widget placement needed.

How it works

The plugin loads a small JavaScript widget on your front end. When a visitor selects a language, the widget retrieves stored translations and replaces text in place. Your page structure, theme, and all other plugins stay exactly as they are. Nothing is changed server-side.

Translations are stored permanently in your WeLocale account. Words are never reset at month end, once a string is translated, it stays translated.

What about SEO?

On Pro and Scale plans, WeLocale automatically injects hreflang tags in the page <head> for every language you have enabled. This tells Google which version of a page to serve to which audience, with no duplicate content penalties.

On the free and Starter plans, translations are live for visitors but hreflang tags are not added. For a small site or a test this is fine. For production multilingual SEO, upgrade to Pro.

FAQ

Will this conflict with WPML or Polylang? No. WeLocale works on the rendered front end and does not touch WordPress's content or translation data. You can run both, though there is no reason to once WeLocale is set up.

Where do I manage translations? In your WeLocale dashboard at welocale.net. You can review and edit every translation, accept or revert changes, and see which strings are pending.

Do I need to update the plugin when the widget changes? No. The widget JS auto-updates without requiring a plugin release. Plugin updates are only needed when the settings screen or integration logic changes.

Is there a free plan? Yes. 3,000 words and 1 target language, no credit card required. Start free at welocale.net.

Does it work with WooCommerce? Yes. The widget translates everything rendered on the front end, including product names, descriptions, cart text, and checkout labels.

More platforms

The WeLocale JS widget works on any website. On Webflow, add it in Site Settings > Custom Code. On Wix, use the Custom Code section in Settings. On any custom HTML site, paste the snippet from your dashboard into the <head>. A Shopify app is coming soon.

Get started

Install the free plugin from wordpress.org/plugins/welocale and sign up free at welocale.net. The free plan covers your first 3,000 words, enough to translate your most important pages and see the result live before committing to anything.

Top comments (0)