---
title: "WordPress in two languages without duplicating pages"
description: "How WordPress stores a second language, as a copy of each post or as translations of one page, and what each model costs you every time the original changes."
url: "https://www.langrelay.com/blog/wordpress-multilingual-without-duplicating-pages"
---

1. [Home](https://www.langrelay.com/)
2. [Blog](https://www.langrelay.com/blog)
3. WordPress in two languages without duplicating pages

ArticleWordPress

# WordPress in two languages without duplicating pages

How WordPress stores a second language, as a copy of each post or as translations of one page, and what each model costs you every time the original changes.

[Chris Jayden](https://www.langrelay.com/about)

Founder

Published

6 October 2026

Reading time

7 min read

![Fishermen and children pull a boat painted with green and orange leaf tiles up the beach of a village at a coral sunset.](https://www.langrelay.com/_emdash/api/media/file/01M4ETAD9YS387QXAAT7RSB7B0.webp)

On this page

1. What WordPress does with languages on its own
2. The two storage models
3. What an edit costs in each model
4. Menus, widgets and theme text
5. When a post per language is the better choice
6. When one translated page is the better choice

You can run WordPress in two languages without keeping a second copy of every page. You do it by translating the HTML WordPress outputs and storing the translations next to the one original, instead of creating a separate post for each language. Plugins split into those two camps, and the choice shows up later in your workload: every time you edit the original, a copy-per-language setup has a second (or fifth) post to bring up to date, and a translate-the-page setup has only the changed sentences to retranslate.

I build LangRelay, which sits in the second camp. The first camp is the better fit for some sites, and the sections below say which.

## What WordPress does with languages on its own

The Site Language setting under Settings, General is described in WordPress's own documentation as "The WordPress dashboard language". It sets the language of the admin screens. It does not give a post a second language, and there is no core field for "this is the German version of that page".

The one route that needs no translation plugin is Multisite, which is part of core. The WordPress handbook describes a network as a collection of sites that share the same installation's core files and can share plugins and themes. The same handbook also says the sites of a network are separate sites that do not share content by default. A two-language network is therefore two sites, and every page exists twice.

Polylang, which makes a translation plugin, has published a guide to exactly this setup. It walks through five steps: enable Multisite, create a site per language, set up the theme and plugins again on each one, write the content for each language, and link the sites together with menu links. The guide is candid about the downsides. It says you have to recreate your entire setup and design manually, that the approach is not SEO friendly because nothing connects the language versions with hreflang, and that the link to another language always lands on that site's home page first.

## The two storage models

Translation plugins that give each language its own URL pick one of these.

```
Model A: a post per language

  post 3  "About us"       (en)  ─┐
  post 7  "Über uns"       (de)  ─┼─ linked as translations of each other
  post 9  "Sobre nosotros" (es)  ─┘

Model B: one post, translated output

  post 3  "About us" (en)
     │
     ├── WordPress renders the page as usual
     └── the plugin swaps in stored translations for /de/ and /es/
```

In model A, each language is a real WordPress post. WPML's documentation of its database tables gives an example: an English post with ID 3 and its Spanish translation with ID 7 share a translation group ID, which is how WPML knows they belong together. Polylang works the same way. Polylang Pro's REST API returns, for each post, a list of language codes with the IDs of the translated posts, and you link a French post to its English original by their IDs.

In model B there is one post. The translations are stored somewhere else and applied when the page is served. TranslatePress keeps them in dictionary tables in your database and links each translation to the exact original string. Weglot's developer documentation says its WordPress plugin creates a URL for each language, such as `/fr/about/`, without creating pages in the WordPress backend, and its plugin listing says translations are stored on Weglot's servers. LangRelay works on one post too: the plugin takes the HTML WordPress has rendered and swaps in the approved translations before the page goes out.

The two models make different promises. Model A promises that each language is a full WordPress object you can edit, filter, query and keep. Model B promises that there is only one page to maintain.

## What an edit costs in each model

Picture a 1,200-word service page translated into German and Spanish. You rewrite one paragraph and add a new section with an image.

In model A, that edit happens in one post and the other two are now out of date. What happens next depends on the plugin's settings:

- WPML, with its Translate Everything Automatically mode on and its own PTC engine, picks up new posts and edits automatically, and its automatic translation pricing documentation says you pay once for each page in each language. After that it tracks the highest word count you paid for per page and language, and only new words above it cost. Every other route, including the legacy engines and content you send to translation by hand, pays per updated word.
- Polylang Pro can create a translation with DeepL, saved as a draft. Its guide says that if you modify the original after generating the translation, the translated version will not update automatically. You edit each translated post by hand or translate it again.

In both cases the German and Spanish pages are posts in their own right. A structural change, such as the new section and its image, has to arrive in each copy, either through a retranslation that rebuilds the post or by hand.

In model B, the page is still one post, so the new section and image appear in every language as soon as you publish. Only the text needs new translations:

- TranslatePress links each translation to the exact original string, so its documentation says an edited string, even a slightly edited one, is treated as a new string. With its Automatic Translation Memory feature turned on, a translation stays assigned when the change is less than 5% of the text.
- With LangRelay, the plugin reports the edit about a minute after you publish. LangRelay translates the new and changed text and leaves the rest of the page's approved translation alone. The new text goes live like any other translation: right away by default, unless the free checks hold it. Until then it shows in the original language, because LangRelay serves only approved translations. If an edit changes enough that more than a tenth of the page's translated text no longer matches the page, the plugin serves the whole page in the original language until the new translation is approved, which avoids a page that is half one language and half another.

Model B removes the job of keeping posts in sync and adds a short window after each edit in which a translated page can show some sentences in the original language. With LangRelay that window lasts until the new translation goes live, which by default is as soon as it is ready.

## Menus, widgets and theme text

Pages are only part of a site. Menus, footer text, widget titles, buttons from your theme and labels from page builders all need translating too.

A post-per-language plugin handles that text separately, because it is not part of any post. WPML calls it strings, which its documentation defines as every text on your site that isn't part of a post, page or taxonomy term, from the tagline and widget titles to theme labels such as "Read more". With its automatic mode and auto-registration on, WPML registers new strings as they appear and translates them in its next pass; otherwise you translate them on its Strings tab. Polylang has a Translations table under Languages for the same job, covering the site title, the tagline, widget titles and strings that themes and plugins register.

Model B plugins see all of that text in the rendered page, so it is translated the same way as the body text. In LangRelay's case the plugin also reports changes to menus, categories and tags, the site title and tagline, and the active theme, so those edits follow the same path as an edited page. Text that repeats across the site, such as a footer line, is translated once and reused wherever it appears.

## When a post per language is the better choice

Pick model A when the languages are meant to differ. If your German site sells a different range and has its own blog, then separate posts are the honest model, and a plugin that keeps them linked is what you want.

It is also the stronger choice when you want to own every translation as WordPress content. WPML's and Polylang's translations sit in your WordPress database as posts, queryable like any other post. Some model B tools keep translations with the service instead: Weglot's plugin listing says its translations are stored on Weglot's servers, and LangRelay's plugin fetches approved translations from LangRelay and caches them on your site. TranslatePress is the exception in model B, with its dictionary tables in your own database.

## When one translated page is the better choice

Pick model B when every language should say the same thing and the original changes often, as on a SaaS marketing site that rewrites its pages a few times a year. Each extra language then adds translation work but no new pages to maintain. Layout changes and new images arrive in every language at once.

That is the case LangRelay was designed around. You connect your site, choose the languages in the LangRelay Dashboard, and the plugin serves each language under its own subdirectory, such as `/de/`. The [step-by-step guide to translating a WordPress site](https://www.langrelay.com/guides/translate-wordpress-site) walks through the whole setup and shows the HTML the plugin adds. If you are comparing plugins, the [WordPress translation plugin comparison](https://www.langrelay.com/blog/best-wordpress-translation-plugins) sorts each one by storage model, and [language switcher best practices](https://www.langrelay.com/blog/language-switcher-best-practices) covers the control visitors use to move between languages.

If you would like to walk through your own site with me, [book a demo](https://www.langrelay.com/book-a-demo).

## Sources

The pages this one cites, with the day each was read.

1. 01[Settings General screen (WordPress.org documentation)](https://wordpress.org/documentation/article/settings-general-screen/)wordpress.org, checked 6 October 2026
2. 02[Create A Network (WordPress Advanced Administration Handbook)](https://developer.wordpress.org/advanced-administration/multisite/create-network/)developer.wordpress.org, checked 6 October 2026
3. 03[Multisite network administration (WordPress Advanced Administration Handbook)](https://developer.wordpress.org/advanced-administration/multisite/administration/)developer.wordpress.org, checked 6 October 2026
4. 04[WordPress Multilingual Without Installing Plugins: A 5-Step Guide (Polylang)](https://polylang.pro/wordpress-multilingual-without-installing-plugins-a-5-step-guide/)polylang.pro, checked 6 October 2026
5. 05[WPML's Database Tables (WPML documentation)](https://wpml.org/documentation/support/wpml-tables/)wpml.org, checked 6 October 2026
6. 06[Pricing for Automatic Translation (WPML documentation)](https://wpml.org/documentation/automatic-translation/automatic-translation-pricing/)wpml.org, checked 6 October 2026
7. 07[How to Translate WordPress Posts, Pages, and Custom Post Types With WPML](https://wpml.org/documentation/translating-your-contents/posts-and-custom-post-types/)wpml.org, checked 6 October 2026
8. 08[REST API (Polylang documentation)](https://polylang.pro/documentation/support/developers/rest-api/)polylang.pro, checked 6 October 2026
9. 09[How to use DeepL machine translation with Polylang Pro (Polylang documentation)](https://polylang.pro/documentation/support/guides/how-to-use-deepl-machine-translation-with-polylang-pro/)polylang.pro, checked 6 October 2026
10. 10[Translating Strings (WPML documentation)](https://wpml.org/documentation/translating-your-contents/strings/)wpml.org, checked 6 October 2026
11. 11[Strings translation (Polylang documentation)](https://polylang.pro/documentation/support/guides/strings-translation/)polylang.pro, checked 6 October 2026
12. 12[Delete all translations and plugin data (TranslatePress documentation)](https://translatepress.com/docs/developers/delete-all-translations-and-plugin-data/)translatepress.com, checked 6 October 2026
13. 13[Translation Editor (TranslatePress documentation)](https://translatepress.com/docs/translation-editor/)translatepress.com, checked 6 October 2026
14. 14[Weglot for WordPress, Getting Started (Weglot developer documentation)](https://developers.weglot.com/wordpress/getting-started)developers.weglot.com, checked 6 October 2026
15. 15[Translate WordPress with Weglot (WordPress.org plugin directory)](https://wordpress.org/plugins/weglot/)wordpress.org, checked 6 October 2026

[Chris Jayden](https://www.langrelay.com/about)

Founder, LangRelay

Chris Jayden is the founder of LangRelay. Chris has worked on websites of every size, from large e-commerce stores to small sites with a handful of pages, and started LangRelay after years of translating them the hard way.

On this page

1. What WordPress does with languages on its own
2. The two storage models
3. What an edit costs in each model
4. Menus, widgets and theme text
5. When a post per language is the better choice
6. When one translated page is the better choice

Share

- [Share on LinkedIn (opens in a new tab)](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.langrelay.com%2Fblog%2Fwordpress-multilingual-without-duplicating-pages)
- [Share on X (opens in a new tab)](https://x.com/intent/post?url=https%3A%2F%2Fwww.langrelay.com%2Fblog%2Fwordpress-multilingual-without-duplicating-pages&amp;text=WordPress%20in%20two%20languages%20without%20duplicating%20pages)

See it on your site

A 30-minute walkthrough on one of your pages.

[Book a demo](https://www.langrelay.com/book-a-demo)

- multilingual
- multisite
- translation plugins
- WordPress

Book a demo

## See LangRelay on your own site

Book 30 minutes with the team. We translate one of your pages live and walk through review, publishing and multilingual SEO.

[Book a demo](https://www.langrelay.com/book-a-demo)[See pricing](https://www.langrelay.com/pricing)
