Back to blog
Side-by-side illustration comparing a WordPress multilingual admin interface on the left with a JSON translation API workflow on the right.

PolyLingo vs Polylang: what's the difference and when to use each

By Robert M

PolyLingo vs Polylang: what's the difference and when to use each

If you've landed here, you're probably in one of two situations: you're happy with Polylang inside WordPress but wondering if there's something equivalent for a project that isn't on WordPress, or you're migrating away from WordPress entirely and trying to figure out what happens to your multilingual setup.

This post answers both questions directly. We'll cover what each tool actually does, where each one fits, and how to pick between them.


What Polylang is (and what it isn't)

Polylang is a WordPress plugin. It's one of the best multilingual plugins in the WordPress ecosystem. It manages language switchers, lets you create translated versions of posts and pages, handles hreflang tags, and integrates with the WordPress block editor cleanly. If you're running a WordPress site, it's a serious, well-maintained tool and there's a good reason it has millions of active installs.

The limitation is right there in the description: it's a WordPress plugin. It has no API you can call from outside WordPress. It has no concept of a JSON locale file, a Markdown content file, or an HTML template sitting in a Next.js project. Its entire model assumes content lives in the WordPress database and is rendered by WordPress.

That's not a criticism. It's just the scope of the tool.


What PolyLingo is

PolyLingo is a translation API. You send it content (plain text, Markdown, JSON, or HTML) and it returns translated versions in every language you ask for, in a single request. It has no opinion about your CMS, your framework, or your deployment setup. It works wherever you can make an HTTP request.

The core design goal is format preservation. Most translation APIs are built around sentences: you send a string, you get a string back. That model breaks down quickly when your content has structure. Paste a JSON locale file into a typical translation service and you'll get translated key names, corrupted delimiters, or prose where an object used to be. PolyLingo treats structure as off-limits. Only string values change; everything else comes back exactly as it was sent.

A concrete example. You send this:

{"btn": {"save": "Save", "cancel": "Cancel"}}

A sentence-oriented translator might give you back:

{"button": {"save": "Guardar", "cancel": "Cancelar"}}

The key btn became button. That will break your application. PolyLingo gives you:

{"btn": {"save": "Guardar", "cancel": "Cancelar"}}

Keys untouched. Only the values translated.

The same principle applies to Markdown (headings stay headings, code blocks are left verbatim, link URLs don't change) and HTML (tags and attributes are preserved, only text nodes and appropriate attributes are translated).


The actual difference: scope

The simplest way to put it:

Polylang manages multilingual content inside WordPress. It's a CMS layer. It handles which post is the Spanish version of which English post, it generates language switchers, and it keeps translations in sync when you update content.

PolyLingo translates structured content over an API. It's a translation layer. You feed it content, it returns translations. What you do with those translations is up to you.

They solve adjacent problems, not the same problem. That's why the comparison isn't really "which is better" but "which problem do I have."


When to use Polylang

  • Your site runs on WordPress and you want to stay on WordPress
  • You need a content management workflow: editors switching between language versions, translation status tracking, language switchers in the theme
  • You're not a developer and you want a UI-driven solution
  • You're using WooCommerce and need product translation managed inside WordPress

Polylang is excellent at all of this. If WordPress is your stack, it's the right tool.


When to use PolyLingo

  • You're building on Next.js, Nuxt, SvelteKit, Astro, or any other non-WordPress framework
  • You're using a headless CMS (Contentful, Sanity, Prismic) and need to translate content at publish time or via a webhook
  • Your content lives in JSON locale files that need to be translated without corrupting the key structure
  • You're migrating off WordPress and want to carry your multilingual workflow with you
  • You have Markdown content (blog posts, documentation, product descriptions) and need translated versions that don't break the formatting
  • You want to translate into multiple languages in a single API call rather than making one call per language

PolyLingo's /translate endpoint accepts a targets array, so one request can return all 36 supported languages at once. For a locale file that needs to ship in ten languages, that's one API call instead of ten.


What about migrating from WordPress?

If you're moving a WordPress site to a headless or static setup, your Polylang content doesn't come with you automatically. The translations are stored as WordPress post metadata and don't export cleanly to Markdown files or JSON structures.

The practical path most teams take:

  1. Export your WordPress content to Markdown or JSON (tools like wordpress-export-to-markdown handle the mechanical part)
  2. Use PolyLingo to translate the exported content into your target languages
  3. Store the resulting files in your new content structure alongside the source language

PolyLingo's batch endpoint (POST /translate/batch) is built for exactly this. You can send up to 100 content items in a single request, each with its own format, all sharing the same set of target languages. For a site migration with hundreds of pages, that's the right tool for the job.


Side-by-side summary

PolyLingoPolylang
Works without WordPressYesNo
Format preservation (JSON, Markdown, HTML)YesWordPress content only
One request, all languagesYesNo
REST API accessYesNo
Content management UITranslator UI (no-code)Full WordPress admin
Auto-detects content formatYesN/A
RTL language supportYesYes
Usage-based billingYesFree plugin / Polylang Pro flat fee

The short version

If you're on WordPress and staying on WordPress: use Polylang. It's built for that environment and it's good at it.

If you're off WordPress, going off WordPress, or building anything that isn't WordPress: PolyLingo gives you the same structured multilingual workflow through an API that works with whatever you're building with.

The two tools can also coexist. Some teams run Polylang on their main marketing site (which stays on WordPress) and use PolyLingo for their docs site, their web app UI strings, or their email templates. The workflow is the same; the stack doesn't have to be.


Try it

PolyLingo's free tier includes 100,000 tokens per month. That's enough for several blog posts across ten languages, or a medium-sized locale file in 36 languages. No credit card required.

curl -sS -X POST "https://api.usepolylingo.com/v1/translate" \
  -H "Authorization: Bearer $POLYLINGO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "# Welcome\n\nTranslate **any format** without breaking the structure.",
    "format": "markdown",
    "targets": ["es", "fr", "de", "ja"]
  }'

Start translating free