Any WordPress site · WooCommerce · v0.11.0

Translate
once. Serve
from a file.

Content is translated in the background the moment you publish it. Visitors read a dictionary compiled to a file, no API on the request, no translation triggered by traffic.

/es/ Español /de/ Deutsch /fr/ Français /it/ Italiano /pt/ Português /nl/ Nederlands /pt-br/ Português do Brasil /ja/ 日本語 /sv/ Svenska /pl/ Polski
Any WordPress site

Not only
for stores.

WooCommerce is optional. A blog, a company site, a portfolio or a shop, if it runs on WordPress, it is translated the same way: in the background, and served from a file.

Pages & posts

Every page and post, with their categories and tags. Publish or edit and the new text is translated a few seconds later.

  • en About us
  • es Sobre nosotros
  • de Über uns

Menus

The header, the footer and every menu built in Appearance → Menus.

  • en Home Shop Contact
  • es Inicio Tienda Contacto
  • de Startseite Shop Kontakt

Your theme

Buttons, header and footer texts — read from one page of each template, so the theme’s own words are covered too.

  • en Read more
  • es Leer más
  • de Weiterlesen

Addresses

Every address in the reader’s language — pages, posts, products, categories and the WooCommerce account pages. The old address redirects with a 301, so no link breaks.

  • en /product/linen-blouse/ /my-account/orders/
  • es /es/producto/blusa-de-lino/ /es/mi-cuenta/pedidos/
  • de /de/produkt/leinenbluse/ /de/mein-konto/bestellungen/

SEO

hreflang on every page, and the translated address in the canonical and og:url, so no translation is dropped as duplicate.

<link rel="canonical" href="https://example.com/es/sobre-nosotros/">
<link rel="alternate" hreflang="en" href="https://example.com/about-us/">
<link rel="alternate" hreflang="es" href="https://example.com/es/sobre-nosotros/">
<link rel="alternate" hreflang="de" href="https://example.com/de/ueber-uns/">
<meta property="og:url" content="https://example.com/es/sobre-nosotros/">
Works with

SEO & sitemaps

  • Yoast SEO
  • Rank Math
  • Slim SEO
  • WordPress sitemap
Works with

Page cache

  • WP-Optimize
  • LiteSpeed Cache
  • WP Rocket
  • W3 Total Cache
Works with

Store

  • WooCommerce
  • Official WordPress & WooCommerce translation packs
Running WooCommerce? The cart, the checkout and the order emails are covered too
Built for stores too

The parts
others leave
in English.

The cart, the checkout, the notices, where an untranslated string hurts most, at the moment someone is spending money. Covered in three different ways, because they come from three different places.

Inbox3
Mariana StudioSep 15
A note about your order #1042
Your parcel is on its way and arrives tomorrow.
Mariana StudioSep 14
Your order #1042 is complete
Thank you for shopping with us.
Mariana StudioSep 12
Your order #1042 has been paid
Hi Emma, thank you for your purchase.

Your order #1042 has been paid

Mariana Studio <[email protected]> September 12, 2026, 9:14 AM

Hi Emma, thank you for your purchase. We are already preparing your order.

Linen midi dress — Black, M× 1€49.00
Silk blouse — Ivory, S× 2€78.00
Total€132.00
Shipping
Flat rate · €5.00
Payment
Credit card

Mariana Studio · 12 Flower Lane, Dublin · Reply to this email to reach us.

Posteingang3
Mariana Studio15. Sept.
Eine Notiz zu Ihrer Bestellung #1042
Ihr Paket ist unterwegs und kommt morgen an.
Mariana Studio14. Sept.
Ihre Bestellung #1042 ist abgeschlossen
Danke, dass Sie bei uns eingekauft haben.
Mariana Studio12. Sept.
Ihre Bestellung #1042 wurde bezahlt
Hallo Emma, vielen Dank für Ihren Einkauf.

Ihre Bestellung #1042 wurde bezahlt

Mariana Studio <[email protected]> 12. September 2026, 09:14

Hallo Emma, vielen Dank für Ihren Einkauf. Wir bereiten Ihre Bestellung bereits vor.

Midikleid aus Leinen — Schwarz, M× 1€49.00
Seidenbluse — Elfenbein, S× 2€78.00
Gesamtsumme€132.00
Versand
Pauschal · €5.00
Zahlung
Kreditkarte

Mariana Studio · 12 Flower Lane, Dublin · Antworten Sie auf diese E-Mail, um uns zu erreichen.

Boîte de réception3
Mariana Studio15 sept.
Une note concernant votre commande #1042
Votre colis est en route et arrive demain.
Mariana Studio14 sept.
Votre commande #1042 est terminée
Merci d’avoir fait vos achats chez nous.
Mariana Studio12 sept.
Votre commande #1042 a été payée
Bonjour Emma, merci pour votre achat.

Votre commande #1042 a été payée

Mariana Studio <[email protected]> 12 septembre 2026 à 09:14

Bonjour Emma, merci pour votre achat. Nous préparons déjà votre commande.

Robe midi en lin — Noir, M× 1€49.00
Chemisier en soie — Ivoire, S× 2€78.00
Total€132.00
Expédition
Forfait · €5.00
Paiement
Carte bancaire

Mariana Studio · 12 Flower Lane, Dublin · Répondez à cet e-mail pour nous contacter.

Bandeja de entrada3
Mariana Studio15 sept.
Una nota sobre tu pedido #1042
Tu paquete está en camino y llega mañana.
Mariana Studio14 sept.
Tu pedido #1042 se ha completado
Gracias por comprar con nosotros.
Mariana Studio12 sept.
Tu pedido #1042 ha sido pagado
Hola Emma, gracias por tu compra.

Tu pedido #1042 ha sido pagado

Mariana Studio <[email protected]> 12 de septiembre de 2026, 9:14

Hola Emma, gracias por tu compra. Ya estamos preparando tu pedido.

Vestido midi de lino — Negro, M× 1€49.00
Blusa de seda — Marfil, S× 2€78.00
Total€132.00
Envío
Precio fijo · €5.00
Pago
Tarjeta de crédito

Mariana Studio · 12 Flower Lane, Dublin · Responde a este correo para contactarnos.

Every email after the purchase arrives in the buyer’s language. Your own copy stays in English.

The language switcher

Any corner.
Four shapes.

Nothing for the theme to fight. Four kilobytes of CSS, only on the pages where it shows. Three shapes are plain links with zero JavaScript. Colours, size, corners and shadow are set with a live preview that warns under 4.5:1, and every value is a CSS variable, so a theme can restyle it without !important.

AppearanceSwitcher tab
Box#ffffff
Language#1a1a1a
Current#1a1a1a
Hover#dcdcde
Text size14px
Corners8px
Shadowsoft
Contrast 16.1:1 — passes WCAG AA. The panel warns the moment a text colour falls under 4.5:1.
How it works

One
separation.

Translation happens in the background. Serving is read-only. It is the model Shopify uses for Translate & Adapt, and the opposite of plugins that translate HTML on demand and pay again for every new page a visitor opens.

Translation time

Background
01Only new or edited text is sent to be translated. A whole shop takes under a minute.
02The translations are saved to a file on your own server, a few seconds after you publish.

Serving time

Read-only
01Visitors read the translations from that file — no database query, no outside request, no cost per visit.
02Each language has its own address: /es/tienda/ for /shop/.
Set-up

Four steps. One button.

There is no API account to set up and nothing to configure: the translation API holds its own key. A glossary and a brand tone are optional, under Settings.

1 Languages

Pick the source, add the targets

Each target language gets its own URL prefix — /en/, /es/. The panel installs the missing WordPress and WooCommerce translation packs with one click.

2 License

Paste the key

Best in wp-config.php as PHT_LICENSE_KEY: not in the database, not in an export, not editable from the admin. One key serves every site of your plan.

3 Dashboard

Translate the site

One button reads the whole site and sends what is missing, with a progress bar. Close the page — the rest carries on in the background.

4 Strings

Review what matters

Filter by status, search, fix by hand. From then on, whatever you publish is translated on its own.

Compare

Three ways to translate WordPress.

What changes between translating by hand, renting a translation service and serving your own translations from a file.

This plugin

PixelHunter Translate

Translated in the background, served from a file on your server.

What you pay for New or edited text, once per language. Every visit is free.
Where translations live In a file on your server
If you stop paying Everything already translated keeps working
Speed 0 ms in the source language; a translated page costs no query and no HTTP request
SEO hreflang, your SEO plugin’s sitemap, translated addresses

Manual translation plugin

You write each language, page by page.

What you pay for A licence, plus your time or translation credits
Where translations live In your database
If you stop paying Translations stay
Speed Like any WordPress page
SEO hreflang and sitemaps, once set up

Cloud translation service

A service translates and serves the pages for you.

What you pay for Usually a subscription sized by words and languages
Where translations live On the provider’s servers
If you stop paying Translations usually stop showing
Speed Depends on the provider’s network
SEO hreflang through the service

A general comparison by type of tool, not of any one product. Checked September 2026.

Pricing

Pay for text.
Not traffic.

Every visit is free, only new or edited text is sent to be translated. Each character counts once per target language, and unused characters roll over while the subscription is active. Yearly plans cost ten months.

Billing period
Currency
Free trial
Free
no card, once
30,000 characters, once
1 site
Try it free
Starter
$€9/mo
billed monthly
$€90/yr
12 months for the price of 10
300,000 characters a month
1 site
3,600,000 characters a year, all at the start
1 site
Subscribe Subscribe
Pro Most stores
$€19/mo
billed monthly
$€190/yr
12 months for the price of 10
1,500,000 characters a month
up to 5 sites on one key
18,000,000 characters a year, all at the start
up to 5 sites on one key
Subscribe Subscribe
Agency
$€49/mo
billed monthly
$€490/yr
12 months for the price of 10
6,000,000 characters a month
up to 25 sites on one key
72,000,000 characters a year, all at the start
up to 25 sites on one key
Subscribe Subscribe

What will my site use?

characters, then only what you add or edit.

Share of each plan’s characters for a month Share of each plan’s characters for the year, all at the start

Free trial best fit
Starter best fit
Pro best fit
Agency best fit

The best fit translates it all in the first month. Later months only use new or edited text.

The best fit covers it at the start: the 12 months arrive at once. After that, only new or edited text.

No monthly plan does it in one month. A yearly plan does — its 12 months arrive at the start. Or the first translation spreads over a few months: unused characters roll over.

More than any plan gives at once: the first translation spreads over time, and unused characters roll over.

Estimates: a product ≈ 1,250 characters, a 1,000-word page ≈ 6,000, the theme and menus ≈ 10,000 once. Visits and unchanged pages never count.

Questions about taxes, how characters are counted or changing plan? Read the plans guide in the documentation.

Straight answers

What it does. What it doesn’t.

Setup, SEO, the store and billing, the questions people ask before they install.

01

Do I need an API account?

No. The plugin only talks to the PixelHunter translation API, which holds its own key — you only need the license key.

02

Do I need WooCommerce?

No. WooCommerce is optional: the plugin translates any WordPress site — pages, posts, menus, categories and the texts of your theme. When there is a store, the cart, the checkout and the order emails are covered too.

03

Are the translated pages in my sitemap?

Yes. There is no second sitemap to submit: the translated pages are added to the one you already have. With Yoast SEO, Rank Math or Slim SEO each page gets one entry per language, with all its versions as hreflang alternates; without an SEO plugin, WordPress’s own sitemap gets one sitemap per language.

04

Which plugins does it work with?

Yoast SEO, Rank Math and Slim SEO for canonicals and sitemaps; WP-Optimize, LiteSpeed Cache, WP Rocket and W3 Total Cache for page cache purging; and WooCommerce, with its official translation packs. Any other page cache can be connected through two hooks. Pages made with Elementor, Breakdance, Oxygen, Bricks or any other builder, ACF fields and custom product tabs are translated too: the plugin reads the page itself.

05

Are URL slugs translated?

Yes, with Settings → Translated addresses: /product/linen-blouse/ becomes /de/produkt/leinenbluse/. An address is made once, from the translated title (or from the slug, when it was written by hand), and never changes on its own; the source address with the prefix redirects to it with a 301, so no link breaks. On for new installs; a site that updates keeps its addresses until you turn it on.

06

Does it slow my site down?

In the source language, 0 ms. On translated pages the dictionary is read from OPcache; a host page cache serves each language once per URL per TTL.

07

“Subtotal”, “Proceed to checkout”?

They come from the official WooCommerce translation pack — reviewed by humans, at no API cost. The panel says which packs are missing and installs them.

08

Do emails to the shop change?

No. Emails to the administrator stay in the store’s language; only the customer’s emails go out in the language of the purchase.

09

Requirements?

WordPress 6.7 or later and PHP 8.1 or later. No build step, no jQuery, no runtime dependencies.

10

What happens when the characters run out?

Translation pauses and retries every hour. Nothing is lost: pending texts wait for the next period, and the site keeps serving everything already translated. You do not have to open the plugin to find out: a notice appears at the top of the WordPress admin and the site's admin email gets one email. With less than 10% of the plan left, you get a notice and an email first. Need more? Change plan in My account: a new key for the new plan arrives by email, and translation resumes once it is pasted on your sites.

11

And if I cancel?

The key works until the end of the paid period. After that the site still serves every translation it has — only new text stops being translated.

12

Does staging count as a site?

Yes. Translate on the live site, or free a slot in My account → Activations while you work on the copy. The free trial is once per site and does not accept disposable emails.

13

What is not translated?

Code inside <script> — the JSON-LD structured data is the exception, and is translated with the page — and customer emails not tied to an order, which go out in the store's language. Each sentence has one translation across the whole site.

For developers

Three functions. Three filters. Two actions.

Current language
<?php if ( 'en' === pht_current_language() ) : ?>
  <p>Free shipping to the UK.</p>
<?php endif; ?>
Switcher, by hand
[pht_switcher show_label="no" class="mine"]

<?php pht_switcher( [ 'style' => 'dropdown' ] ); ?>
Any page cache
add_action( 'pht_purge_urls', function ( $urls ) {
  foreach ( $urls as $url ) my_cache_purge( $url );
} );

Publish.
Read it in
every language.

30,000 characters, one site, no card. The key arrives by email after checkout.