Getting started
Guía de Proxylang
Cómo configurar Proxylang, mejorar las traducciones y aparecer en otros idiomas. El material para desarrolladores está al final.
Start here
Primeros pasos
Cuatro pasos desde una cuenta nueva hasta un sitio traducido. La etiqueta de script es la opción por defecto y funciona en todas las plataformas.
Configuración en cuatro pasos
Add your site
Ve a Configuración y escribe la dirección de tu sitio web. Elige la plataforma en la que se ejecuta.
Pick languages
Elige el idioma propio de tu sitio y luego los idiomas que quieras añadir. Tu plan determina cuántos puedes añadir.
Install
Pick how the script tag gets onto your site. Let AI do it: paste our message into ChatGPT, Claude or Cursor. Do it yourself: copy one line and publish. Or send it to your developer: we write the email. WordPress sites use the plugin.
Check your site
El asistente confirma que el script está activo. Aparecerá un selector de idiomas en tu sitio.
Guías de instalación por plataforma:
Elige cómo se conecta Proxylang
La etiqueta de script es la opción por defecto y funciona en todas partes. Los otros modos añaden visibilidad en motores de búsqueda en otros idiomas. Puedes cambiar de modo más tarde en la pestaña de Configuración del dominio; nada dejará de funcionar cuando realices el cambio.
Script tag
Los motores de búsqueda leen tu sitio original.
Hybrid
Los motores de búsqueda obtienen páginas traducidas.
DNS Proxy
Todo el mundo obtiene páginas traducidas.
Script tag
Todos los planes, todas las plataformas
La traducción ocurre en el navegador del visitante. Los motores de búsqueda siguen viendo tu idioma original.
Ideal para: aplicaciones, páginas tras un inicio de sesión y cualquier constructor de sitios.
WordPress plugin
WordPress sites
Instala el script por ti y añade direcciones por idioma, etiquetas SEO y sitemaps sin tocar el DNS.
Ideal para: Cualquier sitio de WordPress o WooCommerce.
Hybrid
Plan Lite y superiores, sitios creados con código
Un solo cambio de DNS. Los motores de búsqueda reciben las páginas traducidas de Proxylang. Los visitantes mantienen la etiqueta del script.
Ideal para: Sitios de marketing que quieres que se encuentren en otros idiomas.
DNS Proxy
Desde el plan Pro en adelante, sitios creados con código
Cada visitante recibe las páginas traducidas de Proxylang, en direcciones traducidas como /es-es/about.
Ideal para: Sitios que desean URLs traducidas completas para todo el mundo, sin usar scripts.
Cómo se traduce una página
Con la etiqueta del script, la página se carga desde tu servidor como de costumbre. El script solicita entonces Proxylang la traducción de cada frase y la sustituye. La primera visita a una página se traduce mientras la ves. Todas las visitas posteriores son instantáneas, ya que la traducción se guarda.
Con el modo DNS Proxy o Hybrid, Proxylang se sitúa entre el visitante (o el motor de búsqueda) y tu servidor:
A visitor opens a translated address
yourdomain.com/es-es/pageProxylang obtiene la página original de tu servidor
La IA traduce el texto visible
El diseño y el código permanecen exactamente como estaban.
La página traducida se guarda y se sirve
El siguiente visitante la recibe al instante.
SEO tags are added
Enlaces de idioma, dirección canónica y más.
Short addresses also work. /es/about and /mx/about both redirect to /es-es/about.
Si no hay cambios en tu sitio
- Open your site in a private window and use the language switcher. Your own browser may have a language remembered.
- Check the script is on every page, not only the home page. Your platform guide shows where it goes.
- Turn off ad blockers for a moment. Some block third-party scripts.
- Nothing at all, even after a refresh? Your site may have a Content Security Policy. See the developer section at the end of this guide.
Siguiente: Marca y contexto
Make translations better
Marca y contexto
Dile al traductor quién eres. Dedicar cinco minutos aquí aporta más a la calidad que cualquier otra cosa en esta guía.
Qué rellenar
- Brand Name. Your name in your site's language and in English. It is kept exactly as written in every language.
- Site Description. Two or three sentences: what you sell, who reads the site, the tone you want. Example: "Online shop for Korean skincare. Customers are women 25 to 40. Friendly, not formal." This also helps translate visitors' search queries.
- Landing Pages. Pick up to 20 pages (your home page, pricing) where headlines and calls to action should read like native marketing copy rather than a word-for-word translation.
- Translation Formality. Formal, casual or automatic. This one is chosen when you add the domain and cannot be changed later, because every saved translation depends on it.
Cuándo entra en vigor
Haz clic en Guardar Marca y Contexto. Las nuevas traducciones utilizarán el nuevo contexto en menos de una hora. El texto que ya estaba traducido mantendrá su redacción. Para rehacer una página, puedes corregir frases individuales en el Editor en vivo.
Siguiente: Glosario y lista de no traducir
Glosario y lista de no traducir
Decide cómo debe traducirse una palabra, una sola vez, para todas las páginas.
Tus términos
- A term is a word or phrase in your site's language, its translation, and the language it applies to. Add one with Add Term . Tick case sensitive if "Apple" and "apple" should be treated differently.
- Terms apply everywhere the phrase appears. Up to 5,000 terms per domain.
- Have a list already? Use Import with a CSV file. Columns:
source_text, target_text, source_lang, target_lang, case_sensitive, notes. Export gives you the same format back. - Tick rows and click Delete Selected to remove many at once.
Timing
Los nuevos términos llegan a los servidores de traducción en unos diez minutos. El texto que ya estaba traducido mantendrá su redacción antigua hasta que se vuelva a traducir. Para comprobar una página, ábrela en una ventana privada para que tu navegador no te muestre una copia guardada.
No traducir nunca
La tarjeta de No traducir en la parte superior del glosario contiene palabras que deben permanecer exactamente como están escritas en todos los idiomas: tu marca, el nombre de un producto o un hashtag. Hasta 100 entradas de 60 caracteres cada una. La coincidencia distingue entre mayúsculas y minúsculas, así que añade "iPhone", no "iphone".
Mejoras de IA
Proxylang revisa las traducciones de tu sitio de forma programada y propone pequeñas correcciones. Las correcciones aprobadas se añaden a tu glosario como términos marcados como AI, con el motivo y la redacción que sustituyeron. Puedes eliminar cualquiera de ellos.
- Turn the review off for a domain with the switch in the AI Improvements card. Terms already added stay until you delete them.
- A sentence you edited in the Live Editor is never changed by an AI improvement. Your edit wins.
Editor en vivo
Corrige una traducción en tu propio sitio: haz clic en la frase, escribe y guarda. Incluido en todos los planes.
Editar una traducción
- Go to Live Editor , pick the domain and click Start editing . Your site opens in a new tab with the editor bar on it. Shortcut: on any page of your site, press Esc twice and click Open editor .
- Switch the site to the language you want to fix.
- Click any text. A panel shows the Original and the Translation . Change the translation and click Save .
- You see your change at once. Other visitors see it within about five minutes.
- Your edit always wins. Proxylang will not overwrite it, and neither will AI improvements.
- Changed your mind? Open the same text and click Reset to automatic translation .
- Some text has placeholders like
{0}for a link or bold word. Keep them in your translation, in any order. - Only verified domains you own appear in the Live Editor.
Invitar a un traductor
Un traductor no necesita una cuenta de Proxylang. Inicia sesión en tu sitio y podrá editar las traducciones, nada más.
- On the Live Editor page, find Invite a translator . Type their email.
- Under Can edit , leave All languages or pick only the languages they should touch.
- Click Send invite . A password appears once . Copy it now, or click Email them to open a ready-made email. Nothing is sent automatically.
- The translator opens your site, switches language, presses Esc twice and signs in with that email and password.
- To remove someone, hover their row in the translator list and click the ×. They are locked out at once.
- The editor bar and panels are available in English, Korean, Japanese, Spanish, German, French, Italian and Portuguese.
Siguiente: Controla qué se traduce
Controla qué se traduce
Mantén los nombres de marca, los códigos de cupón y las reseñas en el idioma original, o pausa la traducción por completo.
Mantener algo en el idioma original
Ciertos textos nunca deberían cambiar: un nombre de marca, un código de cupón, una cita o las reseñas escritas por clientes. Tienes tres herramientas, desde ninguna línea de código hasta algo de código.
- A single word or name, everywhere. Add it to the Never Translate list in the glossary. No code.
- A block on a page. Add the
proxylang-no-translateclass to the element. Everything inside it is skipped. See below. - A whole file or region. Wrap it in the comment markers. See below.
Omitir un bloque con una clase
Add the class proxylang-no-translate to any element. The attribute data-proxylang-no-translate does the same thing. Works in every mode.
<!-- Everything inside is left in the original language -->
<div class="proxylang-no-translate">
<h2>Brand Name™</h2>
<p>SAVE20 is your coupon code.</p>
</div>
<!-- The attribute form does the same -->
<span data-proxylang-no-translate>Acme Corp</span>Omitir una región con comentarios
Útil cuando no puedes añadir una clase, o para texto dentro de archivos JavaScript. Todo lo que esté entre los dos marcadores se omitirá.
<!-- @proxylang-do-not-translate-start -->
<div class="testimonial">
Customer reviews stay exactly as written.
</div>
<!-- @proxylang-do-not-translate-end -->Omitido por ti
- Code samples inside
<pre>and<code>, in every mode. Syntax highlighters that render into those tags (Shiki, highlight.js, Prism) are covered. Code editors that render into a plain<div>(CodeMirror, Monaco) are not; add the class to their wrapper. <kbd>,<var>and<samp>when Proxylang translates on the server (DNS Proxy and Hybrid).- Legal pages at standard addresses. See the Legal pages section.
- Email addresses, URLs, numbers and prices.
Omitir solo para motores de búsqueda
A veces quieres que los motores de búsqueda indexen la redacción original (un eslogan o una frase por la que posicionas) mientras los visitantes siguen leyéndolo traducido. Usa los marcadores exclusivos para bots. Estos solo se aplican cuando Proxylang sirve páginas a los bots, es decir, en los modos DNS Proxy e Hybrid. Si se usan solo con la etiqueta de script, no hacen nada.
<!-- Search engines index the original wording.
Visitors still see it translated. -->
<h2 class="proxylang-bot-only-no-translate">Our Brand Tagline</h2>
<!-- Attribute form -->
<p data-proxylang-bot-only-no-translate>Ranked slogan</p>
<!-- Comment form, for a larger region -->
<!-- @proxylang-bot-only-do-not-translate-start -->
<section>...</section>
<!-- @proxylang-bot-only-do-not-translate-end -->Pausar todo
Dos interruptores en la pestaña Avanzada del dominio detienen las nuevas traducciones sin eliminar nada de tu sitio. El texto que ya estaba traducido se seguirá mostrando.
- Pause Translations. Humans. Visitors see cached translations only. New pages stay in the original language. Use it while you look into a cost spike or a quality problem.
- Pause Translations. Bots. Same, for search engines and AI crawlers. Stops SEO spend without touching what visitors see.
- Also on that tab: Preserve Line Breaks keeps line breaks where the original has them. DNS Proxy mode only.
Páginas legales
Las políticas de privacidad y los términos permanecen en tu propio idioma de forma predeterminada.
Mantén las páginas legales en tu propio idioma
Una traducción automática de un contrato puede no ser válida en un tribunal, y una página legal larga consumiría mucho de tu saldo de palabras sin necesidad. Por ello, Proxylang omite estas páginas a menos que indiques lo contrario.
Páginas omitidas sin configuración previa
Proxylang se guía por la dirección de la página. Estas se omiten en todos los planes y en todos los modos:
/privacy,/privacy-policy,/cookie-policy,/cookies,/gdpr/terms,/tos,/terms-of-service,/terms-and-conditions,/legal,/eula/disclaimer,/dmca,/copyright,/refund,/refund-policy,/return-policy,/shipping-policy- German:
/agb,/datenschutz,/impressum,/nutzungsbedingungen
Solo se omite el texto principal de la página. El encabezado, el menú y el Footer se siguen traduciendo, para que tus visitantes puedan seguir orientándose.
Páginas legales en otras direcciones
If your legal page lives somewhere else (for example /about/policies), mark it yourself. Add the proxylang-no-translate class to the element that wraps the legal text. On a site builder, put the legal text in a code block or custom HTML element and add the class there.
<!-- Wrap the legal text, not the whole page -->
<main class="proxylang-no-translate">
<h1>Privacy Policy</h1>
<p>Last updated ...</p>
</main>Si quieres que se traduzcan
Pide a un abogado o a un traductor certificado que elabore la versión en el otro idioma y publícala como una página propia. No confíes en la traducción automática para nada que un cliente pueda firmar o disputar.
Siguiente: SEO en otros idiomas
Get found in search
SEO en otros idiomas
Logra que encuentren las páginas traducidas. Proxylang añade las etiquetas que buscan los motores de búsqueda y te ofrece una página para supervisarlo.
La página de SEO
Abre el SEO y elige un sitio. Requiere el plan Lite o superior. Las pestañas de Palabras clave y Títulos de página también requieren el modo Hybrid o DNS Proxy, ya que, con solo la etiqueta de script, los motores de búsqueda nunca ven los títulos traducidos.
- Health
- A score from 0 to 100 and a to-do list. It checks that search engines can reach your translated pages, that the right tags are on them, and that setup is finished.
- Keywords
- Type up to 20 phrases your customers search for, in your own language. Proxylang writes a matching set for every language search engines index and uses them for your home page title and description. A language that joins them later gets its set shortly after you save, with no click. You can give a pricing or campaign page its own set.
- Page Titles & Descriptions
- See the title and description each language really shows in search results, and pin your own wording for any page. A pin is exact and final for that page and language. Too long? Click Shorten.
- Settings
- Bot translation budget, which pages go in the sitemap, and a switch to stop SEO tags while you test.
- Google Search Console. The Health checklist has a "Connect Google Search Console" step. It pulls Google's own indexing data into the Health tab. Available once Hybrid or DNS Proxy is on.
- Naver and Daum. If Korean is one of your languages, a card lists the four manual steps those engines need. Tick each one off as you go.
- AI answers. A second checklist covers listings that help ChatGPT, Gemini and Perplexity recommend you: Wikidata, Google Business Profile and, for software, G2 and Product Hunt.
Which languages search engines see
Your plan sets how many languages search engines index. Visitors can still pick every language you turn on. A language you add joins the indexed ones on its own while your plan has room. It goes into the sitemap and language links, and if you have saved keywords on the Keywords tab, it gets its own keywords and home page title written from them. To choose them yourself, use the search icon next to each language on the domain's Languages tab.
When every slot is taken, the Languages tab and the SEO Keywords tab name the languages search engines can't see. Swap one in for an indexed language, or upgrade for more.
Etiquetas añadidas a cada página traducida
- Language links (hreflang) that tell search engines which page is which language.
- A canonical address per language, so translations are not seen as duplicates.
- The page's language tag, for Bing and Baidu.
- Social preview locale, so shared links show the right language.
Se aplica en los modos Hybrid y DNS Proxy, donde los motores de búsqueda obtienen las páginas de Proxylang. Con la etiqueta de script, leen tu sitio original.
Show an example
<link rel="alternate" hreflang="en-US" href="https://example.com/page" />
<link rel="alternate" hreflang="es-ES" href="https://example.com/es-es/page" />
<link rel="alternate" hreflang="fr-FR" href="https://example.com/fr-fr/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />
<link rel="canonical" href="https://example.com/es-es/page" />
<meta property="og:locale" content="es_ES" />Títulos, descripciones y texto de imágenes
Se traducen el título de la página, la meta descripción, el título y la descripción de la vista previa social y las palabras clave. También se traducen los textos alt de las imágenes, los tooltips de los botones y los marcadores de posición de los formularios. Fija tu propia redacción para cualquier página en la pestaña Page Titles & Descriptions.
Resultados enriquecidos
Si tus páginas contienen datos estructurados (los detalles ocultos de productos, artículos, FAQ o eventos que generan los resultados enriquecidos en Google), los campos de texto se traducen y el campo de idioma se actualiza. Los precios, fechas, URLs e identificadores se dejan intactos.
Sitemaps
Proxylang builds a sitemap per language and lists them all at /sitemap.xml on your domain. Pages come from your own sitemap, plus pages Proxylang has seen. Each language also has its own file, such as /es-es/sitemap.xml . They refresh daily, and right away when a language save changes which languages search engines see; click Regenerate sitemap on the SEO Settings tab to rebuild now.
Show an example
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap><loc>https://example.com/sitemap-1.xml</loc></sitemap>
<sitemap><loc>https://example.com/es-es/sitemap.xml</loc></sitemap>
<sitemap><loc>https://example.com/fr-fr/sitemap.xml</loc></sitemap>
</sitemapindex>Elige qué páginas se incluyen en el sitemap
En la pestaña SEO Settings, bajo Sitemap Pages :
- All pages. The default.
- Only specific paths. Start with a few pages, add more later.
- Exclude paths. Hide a section, such as
/internal/*.
One path per line. * matches anything, so /blog/* covers every blog post. The home page is always included. Subdomains use their root domain's setting.
Informar a los motores de búsqueda sobre nuevas páginas
- Bing, Yandex, Naver, Seznam and Yep are told the moment a translated page is saved. DuckDuckGo, Ecosia and Qwant use Bing's index. Nothing to set up.
- Google does not take pings. It finds your pages through the sitemap and the language links. Connecting Search Console lets you watch it happen.
- Your
robots.txtis served with the sitemap lines added. Your own rules are kept.
Motores de búsqueda con IA
robots.txtallows GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot and Google-Extended.- A
/llms.txtfile describes your site and lists its languages and sitemaps for AI tools that look for one. - AI bots get translated pages only in Hybrid or DNS Proxy mode. They are counted under the bot budget like any other crawler.
Idioma en cada dirección
In DNS Proxy mode, visitors normally see clean addresses and their language is remembered in a cookie. Turn on URL Language Prefix (domain → Advanced tab) and every visitor sees the language in the address, like /es-es/about . Search results, ads and analytics then always point at one clear version of each page.
Solo modo DNS Proxy. Los subdominios siguen a su dominio raíz.
Modo Hybrid (SEO para motores de búsqueda)
Los motores de búsqueda obtienen páginas traducidas de Proxylang mientras tus visitantes mantienen la etiqueta de script.
Qué hace
La etiqueta script traduce las páginas en el navegador del visitante. Los motores de búsqueda no ejecutan ese script, por lo que solo ven tu idioma original. El modo híbrido soluciona eso.
Motores de búsqueda y bots de IA
Obtén una página totalmente traducida de Proxylang. Google, Bing, Naver, ChatGPT, Perplexity y las vistas previas de enlaces (Slack, LinkedIn, Facebook) están en la lista.
Your visitors
Obtén tu sitio exactamente como es hoy, traducido mediante la etiqueta script. Tu hosting, analíticas y tests A/B permanecen intactos.
Los sitios en Wix, Squarespace, Webflow y constructores similares no pueden cambiar el DNS de esta manera, por lo que se mantienen con la etiqueta script.
Cómo activarlo
No existe un interruptor de "Híbrido". El modo híbrido es lo que obtienes cuando el Proxy DNS y la Etiqueta Script están activados para el mismo dominio.
Abre tu dominio y luego la pestaña Configuración
Dominios → tu dominio → Configuración.
Turn on DNS Proxy
Añade los registros DNS que te mostramos en tu registrador de dominios y luego verifica. Este es el paso que permite que los motores de búsqueda lleguen Proxylang.
Keep Script Tag on
Tus visitantes seguirán utilizando la etiqueta script que ya instalaste.
Done
Con ambos activados, la insignia del dominio dirá "Hybrid (SEO)". Si desactivas cualquiera de los dos, el sitio volverá al otro modo sin tiempo de inactividad.
Coste
Las visitas de los bots consumen palabras de tu saldo, a una cuarta parte de la tarifa normal. Tres límites evitan que un rastreo descontrolado lo agote. Puedes reducir cada uno en la página de SEO, en Ajustes.
Palabras por día para bots
Una vez alcanzado el límite, los bots recibirán tu idioma original hasta la medianoche UTC. Configúralo en 0 para detener la traducción de bots por completo.
- Start
- 3,000
- Pro+
- 20,000
Budget per page
Cuánto puede traducir una visita de un bot de una sola página, en tokens de IA (aprox. 2,7 por palabra). Por defecto 4.000. El título, la descripción y los encabezados nunca cuentan.
- Start
- 8,000
- Pro+
- 50,000
Visitas por día, bots no verificados
Google, Bing, Apple, DuckDuckGo y Yandex están verificados por su dirección de red y no tienen límite. Todo lo demás comparte este tope.
- Start
- 5
- Pro+
- 10
Cuándo usarlo
- You want your pages to rank in other languages.
- You want AI search tools to quote your translated pages.
- You do not want Proxylang in the path of real visitors. Hybrid keeps them on your own server.
Las páginas tras un inicio de sesión no ganan nada con el modo híbrido. Mantén esas con la etiqueta script.
Siguiente: Múltiples sitios y subdominios
Múltiples sitios y subdominios
Añade subdominios gratis y más dominios raíz con el plan Start y superiores. Todos los sitios comparten un único saldo de palabras.
Qué puedes añadir
- Subdomains of a site you already added (app.yourdomain.com, shop.yourdomain.com). Free on every plan. They do not count toward your domain limit.
- Separate root domains (yourdomain.com and yourapp.io). Needs the Start plan or above, which carries as many as you like. Test Drive and Lite cover one site.
Todos tus sitios comparten un único saldo de palabras. Un segundo sitio no añade palabras; las toma del mismo fondo común.
Si más adelante te cambias a un plan más pequeño, nada dejará de funcionar. Conservas todos los sitios que ya has añadido. Simplemente no podrás añadir más hasta que vuelvas a estar por debajo del límite.
Qué hereda un subdominio
Un subdominio sigue a su dominio raíz. Obtiene el mismo modo de conexión, idiomas, ajustes de sitemap y selectores de la pestaña Avanzada. Configuras esto una sola vez en el raíz.
Si el raíz utiliza Proxy DNS o modo híbrido, cada subdominio también necesita sus propios registros DNS. La aplicación muestra los registros exactos que debes añadir: cuatro para un dominio raíz (el dominio base, www y dos registros de verificación) y dos para un subdominio.
Qué modo usar para cada sitio
Sitio de marketing o landing page
Hybrid mode
Quieres que te encuentren en otros idiomas. Usa Hybrid si tu plan y tu sitio lo permiten (plan Lite o superior, sitio creado con código). De lo contrario, la etiqueta de script seguirá traduciéndolo para los visitantes.
App o portal de cliente
Script tag
Las páginas protegidas por inicio de sesión nunca se indexan, por lo que no hay beneficio de búsqueda que perseguir. Sin cambios de DNS, nada en la ruta de tráfico.
Features
Chat en vivo
Una burbuja de chat que traduce en ambos sentidos. Una suscripción, todos los sitios, agentes ilimitados.
Qué hace
Una burbuja de chat en tu sitio. Los visitantes escriben en su idioma. Tú lees y respondes en el tuyo. Ambos lados se traducen sobre la marcha. Una suscripción cubre todos los sitios de tu cuenta, con tantos agentes como desees.
Actívalo
Abre el dominio, ve a la pestaña Live Chat y activa el interruptor. La burbuja aparecerá en tu sitio y el sitio aparecerá en tu consola de chat en Chat .
- On Start and above, chat is already included with your plan. Nothing to buy and no trial to start.
- On Test Drive and Lite, every account gets one 14-day trial with 2,000 translated messages. No card needed. The trial is per account, not per site.
- When nobody is online, visitors see "We are away" and can leave their email. You answer by email from the console. Turn this off in widget settings if you prefer.
Añade a tu equipo
- On the Live Chat tab, in the Agents card, type a teammate's email and click Invite . Seats are free and unlimited.
- They get a link, good for seven days. They enter the name visitors will see and the language they want to read chats in.
- They see that site's conversations only, marked "Shared". No settings, no billing.
Elimina a alguien con el botón Remove en su fila.
Responder chats
- The console has three panes: conversations, the open chat, and visitor details (page they are on, country, past chats).
- Having the console open makes you "Online". Click the pill to go "Away"; visitors then get the offline form.
- Type
/in the reply box for quick replies (hello, order, refund, shipping). - You can send images up to 10 MB. Edit a sent message and the visitor's translation is redone.
- If a teammate is already answering, your reply box locks so the visitor never gets two answers.
- Under Chat settings → Widget , set the bubble colour, position, greeting and the name visitors see. The greeting is shown as written and is not translated yet.
Aplicaciones para escritorio y móviles
La página de Downloads tiene la aplicación de escritorio para macOS, Windows y Linux. Te ofrece alertas y avisos de mensajes no leídos con el navegador cerrado, y se actualiza sola. Las aplicaciones para iPhone y Android figuran como próximamente disponibles.
Al iniciar sesión, se abre tu navegador habitual por un momento y luego vuelve a la aplicación. Esto es normal.
Qué incluye cada plan
Solo cuentan los mensajes traducidos. Los mensajes en el mismo idioma son gratuitos. El cupo mensual se comparte entre todos tus sitios y se reinicia el día 1.
- Test Drive and Lite include no chat plan beyond the trial. Bigger chat plans are a monthly add-on, priced on the Live Chat page.
- At the limit, chat keeps running but messages arrive untranslated and new conversations wait until the 1st. A chat already in progress always finishes.
- Hiding the "Powered by Proxylang" line in the chat window needs the Pro plan or above.
Siguiente: Traducción de imágenes
Traducción de imágenes
Redibuja el texto dentro de banners e imágenes de productos en el idioma del visitante.
Configuración
1. Buy credits
La traducción de imágenes está activada para todos los dominios. Tu saldo de créditos es el único requisito. Compra un paquete en Billing . Los paquetes son válidos durante 12 meses.
- 10 images
- $5 / ₩7,000
- $0.50 per image
- 50 images
- $20 / ₩28,000
- $0.40 per image
- 100 images
- $35 / ₩49,000
- $0.35 per image
2. Elige qué imágenes traducir
Solo se traducen las imágenes que elijas. Tres formas, de la más fácil a la más compleja:
- Live Editor. Open your site, press Escape twice, sign in, click Image Translation in the editor bar and tap the images. Works on any platform.
- Paste image addresses. On the domain's Image Translations tab, use Auto-Translate Images by URL . Good for site builders where you cannot edit HTML.
- Tag the HTML. Add
data-pl-translate-imageto the image tag.
<!-- Only tagged images are translated -->
<img src="/hero-banner.png" data-pl-translate-image alt="Welcome" />
<!-- Any image source works -->
<img src="https://cdn.example.com/promo.jpg" data-pl-translate-image />Qué sucede y cuánto cuesta
- The first visitor in a language sees the original image. Translation runs in the background, usually under two minutes, then the translated image replaces it on the page without a refresh.
- Every visitor after that gets the translated image instantly. It is kept forever.
- One credit per image, per language. The same banner in Korean and Japanese costs two credits.
- Images whose longer side is over 2000px cost two credits per language. Tall product detail images usually fall in this group.
- Visitors reading your site in its own language never use credits.
Funciona en todos los modos. Con el método de "pegar direcciones de imagen", la coincidencia se ejecuta en el navegador del visitante, por lo que necesita la etiqueta script (etiqueta script o modo Hybrid).
Qué traducir
Translate these
- Banners with text on them
- Infographics and charts with labels
- Product images with printed details
- Screenshots with on-screen text
No los etiquetes (se cobran igual)
- Photos with no text
- Logos and icons
- SVG files and GIFs
Se admiten PNG, JPG y WebP. Los archivos muy grandes se reducen antes de la traducción. Se admiten 33 idiomas de destino; la lista se encuentra en la pestaña Image Translations del dominio.
Siguiente: Traducción de búsqueda
Traducción de búsqueda
Traduce lo que los visitantes escriben en tu cuadro de búsqueda para que obtengan resultados en cualquier idioma.
Configuración
1. Buy searches
Se paga con créditos de búsqueda prepago. Compra un paquete en Billing . Los paquetes nunca caducan.
- 10,000 searches
- $9.99 / ₩13,900
- 50,000 searches
- $39.99 / ₩55,900
- 200,000 searches
- $139.99 / ₩194,000
2. Actívalo por dominio
Abre el dominio, ve a la pestaña Advanced y activa Translate Search Queries . El interruptor permanecerá desactivado hasta que tengas créditos. Puede tardar hasta cinco minutos en aplicarse en tu sitio en vivo, así que espera antes de realizar pruebas.
Cómo funciona
If your search box is a normal form, or its field is named q, query, search, keyword, term or s, it works with no changes. When the visitor presses Enter, Proxylang translates the query and your search receives the translated text.
<form action="/search" method="GET">
<input type="search" name="q" />
<button type="submit">Search</button>
</form>- Runs from the script tag, so it works in script tag and Hybrid mode. Not on DNS Proxy-only sites.
- Visitors reading your site in its own language are not affected and use no credits.
- Each search uses one credit, including repeats. Translated queries are remembered per domain, so repeats are instant.
- If translation takes longer than 4.5 seconds, the original query is sent through instead. Visitors never wait on a spinner.
Cuadros de búsqueda que filtran una lista en la página
Algunos cuadros de búsqueda nunca envían nada a un servidor. Filtran una lista que ya está en la página (una FAQ, una cuadrícula de productos). Esos necesitan un atributo en el input:
<!-- Translate when the visitor presses Enter (default) -->
<input type="text" placeholder="Search..." data-proxylang-reverse-search />
<!-- Translate as they type, after a short pause -->
<input type="text" placeholder="Search..." data-proxylang-reverse-search="live" /> By default the query is translated when the visitor presses Enter. Add ="live" to translate as they type, after a short pause. Live mode uses more credits, one per pause.
Ayuda a la traducción con contexto
A one-word query can mean many things. Proxylang uses the Site Description from your Brand & Context tab to pick the right meaning. For one specific search box you can override it with data-proxylang-search-context="..." on the input (up to 240 characters).
Consejos
- Keep Enter mode unless your search really needs results while typing. It costs a fraction of live mode.
- Write a clear Site Description. "Korean skincare shop" gives better query translations than "our website".
- Test in a private window with the site switched to another language.
Limitaciones conocidas
- Queries over 200 characters are passed through untranslated.
- When credits reach zero, searches pass through untranslated. Buying a pack turns it back on within a minute.
- For developers: searches sent by
form.submit()in code are not intercepted; use a normal submit. For fetch requests, only the query parameters and top-level JSON fields are translated. GraphQL requests are skipped.
Siguiente: Apariencia del selector de idiomas
Apariencia del selector de idiomas
Everything about the language menu visitors see: where it sits, how it looks, when it shows.
Lo que puedes cambiar
- Activate Switcher
- The on/off switch for the widget on this site. Also holds a test key for trying the script on your own computer.
- Layout
- Floating in a corner, or inline where you place it. Starting corner. Whether visitors can drag it.
- Appearance
- Button size, menu size, corner shape, shadow, and whether languages show as "EN", "English" or both.
- Colors
- Six ready-made themes, or your own colours for light and dark mode.
- Behavior
- Shrink to an icon after a few seconds, menu animation, and a soft fade when translated text appears.
- Branding
- Hide the "Translation by Proxylang" line in the menu. Start plan and above.
- Loading Indicators
- A spinner, a thin bar at the top, both, or nothing while a page translates.
- Dark Mode Detection
- Follow the visitor's system setting, or tell Proxylang which CSS class your site uses for dark mode.
- Advanced
- Stacking order, the width at which the mobile layout kicks in, and the right-to-left auto-flip switch.
Changes reach your site within seconds, five minutes at most. If you do not see them, refresh the page.
Which language a visitor gets first
There is nothing to set. On the first visit, Proxylang looks at the languages the visitor's browser prefers and picks the best match among the languages you enabled. If none match, it uses the visitor's country, and then your site's own language. After that, the visitor's choice is remembered for a year.
To test another language, open your site in a private window, or add ?lang=ko-KR to the address.
Put the switcher in your own menu
Under Layout, choose Inline and place <div id="proxylang-widget"></div> where the switcher should appear, for example in your header. For a second spot in a mobile menu, add <div id="proxylang-widget-mobile"></div> as well.
Siguiente: Analytics y uso
Your account
Analytics y uso
Mira quién visita en qué idioma y hacia dónde van tus palabras.
Quién visita, en qué idioma
La pestaña Analytics de tu panel muestra visitantes, visitas, páginas, de dónde viene la gente, su país y dispositivo, y la cuota de quienes leen una versión traducida. No se utilizan cookies; los visitantes se cuentan mediante una huella digital cifrada que no puede volver a convertirse en una dirección.
- A visit ends after 30 minutes without activity.
- Bots are hidden by default, and so is your own traffic from a development machine. Use the Filter button to show them.
- Detailed records are kept for 90 days.
- The Visitor Map shows the same data on a world map.
Hacia dónde van tus palabras
La pestaña Dashboard muestra cuánto de tu plan has utilizado. Las pestañas Metrics y Pages lo desglosan por día, idioma y página.
- A sentence costs words once, the first time it is translated for your site. Showing it again is free.
- Bot visits in Hybrid and DNS Proxy mode count at a quarter of the rate. The chart shows "Visitor words" and "Bot words" separately.
- A page view is one page opened by a real visitor in a translated language. Bots, visitors reading the original language, and your own testing on localhost do not count.
- You get an email at 75%, 90% and 100% of your allowance.
Siguiente: Planes, facturación y créditos
Planes, facturación y créditos
Qué incluye cada plan, qué ocurre al alcanzar el límite y cómo funcionan los créditos y los códigos.
Lo que te ofrece un plan
Cada plan tiene un límite de palabras, un límite mensual de visualizaciones de página, un número de idiomas y un número de sitios. El límite de palabras es un total, no una cantidad mensual: una frase solo se cuenta la primera vez que se traduce y permanece traducida después de eso. Cada idioma cuenta por separado: una página de 500 palabras abierta en tres idiomas consume 1.500 palabras. Con el plan Start y superiores, los visitantes pueden elegir cualquiera de los 77 idiomas, y el plan determina cuántos de ellos indexan los motores de búsqueda. Los rastreadores obtienen cada idioma indexado, por lo que esos son los idiomas que consumen palabras sin que haya un visitante.
Palabras: un total que se agota una sola vez
Visualizaciones de página: se reinician el día 1
| Plan | Words (total) | Page views / month | Languages | Sites |
|---|---|---|---|---|
| Test Drive | 2,000 | 1,500 | 1 | 1 |
| Lite | 20,000 | 15,000 | 5 | 1 |
| Start | 100,000 | 50,000 | All 77 (3 indexed) | Unlimited |
| Pro | 500,000 | 150,000 | All 77 (10 indexed) | Unlimited |
| Business | 2,500,000 | 750,000 | All 77 (25 indexed) | Unlimited |
Test Drive
- Words (total)
- 2,000
- Page views / month
- 1,500
- Languages
- 1
- Sites
- 1
Lite
- Words (total)
- 20,000
- Page views / month
- 15,000
- Languages
- 5
- Sites
- 1
Start
- Words (total)
- 100,000
- Page views / month
- 50,000
- Languages
- All 77 (3 indexed)
- Sites
- Unlimited
Pro
- Words (total)
- 500,000
- Page views / month
- 150,000
- Languages
- All 77 (10 indexed)
- Sites
- Unlimited
Business
- Words (total)
- 2,500,000
- Page views / month
- 750,000
- Languages
- All 77 (25 indexed)
- Sites
- Unlimited
- Global, Enterprise and Custom plans are arranged through the Custom card on the pricing page.
- Lite and above add per-language SEO and Hybrid mode. Pro and above add DNS Proxy mode.
- Words used up. New text stays in the original language until you upgrade. Text already translated keeps showing, and the language switcher keeps working. There is no overage charge.
- Page views used up. The same happens for one month, then the whole site is served in its original language until the next month or an upgrade.
- Bot visits in Hybrid and DNS Proxy mode count at a quarter of the rate.
- Yearly billing is ten months for twelve.
- Moving to a smaller plan never takes a site offline. You keep what you have and cannot add more until you fit.
Cambios o cancelaciones
- Open Billing and pick a plan under Available Plans . A change takes effect at once. The price difference is settled on your next invoice.
- New subscriptions on Start or Pro (monthly, paid in USD, outside Korea) start with a 14-day free trial.
- Korean customers pay in KRW through KG이니시스, with VAT shown separately. Yearly Korean plans are a one-time payment you renew by hand. Cancel with the 해지 button; you keep access to the end of the period.
- Every charge and receipt is under Payment History at the top of the Billing page.
Créditos de imagen y búsqueda
Los planes de pago incluyen un lote único de créditos la primera vez que te suscribes: Lite con 2 imágenes y 500 búsquedas, Start con 10 imágenes y 2.000 búsquedas, Pro con 30 imágenes y 2.000 búsquedas, Business y Global con 100 imágenes y 2.000 búsquedas. Al subir de plan, solo se añade la diferencia. Los créditos incluidos nunca caducan y se conceden una vez por cuenta, no una vez por cada mejora.
Si se te agotan, compra más en forma de packs prepagados en la página de Billing, en la página de Image Translation o en la página de Reverse Search. Los packs se comparten entre tus sitios. Los packs de imágenes comprados son válidos durante 12 meses y recibirás un correo electrónico 30 días antes de que caduque uno; los packs de búsqueda comprados nunca caducan.
La compra se abre en una pestaña nueva. Tu saldo en la página de Billing se actualiza cuando vuelves a ella.
Códigos promocionales
- Outside Korea there is no code box. Your discount is attached to your account and applied at checkout on its own.
- In Korea, the code box is on the Billing page while you are on the free plan. Codes apply to the first payment only.
- Discounts do not stack. The largest one wins.
Recomienda a un amigo
Tu enlace está en la página de Referral. Un amigo que se registre a través de él obtiene un 15 % de descuento en su primer plan. Cuando se suscriba, tu próximo pago mensual tendrá un 50 % de descuento, una vez por cada amigo. El enlace se recuerda durante 90 días. Los packs no cuentan, los planes sí.
For developers
Attribute reference, JavaScript API and events, Live Chat API, Content Security Policy, right-to-left languages.
For developers
Attribute reference, JavaScript API and events, Live Chat API, Content Security Policy, right-to-left languages.
Attribute reference
For developersEvery class, attribute and comment marker Proxylang reads from your HTML.
Browser means the script tag and pages visitors load in Hybrid mode. Server means pages Proxylang renders for search engines in Hybrid mode and for everyone in DNS Proxy mode. Both means both.
Skip
class="proxylang-no-translate"Both- Skip this element and everything inside it.
data-proxylang-no-translateBoth- Same as the class.
class="notranslate"Browser- Google’s standard skip class. Honoured as well.
translate="no"Browser- The HTML standard skip attribute. Honoured as well.
data-pl-skipBrowser- Short form of the skip attribute.
<!-- @proxylang-do-not-translate-start --> … <!-- @proxylang-do-not-translate-end -->Server- Skip a region of HTML. JS files use the same words after //.
class="proxylang-bot-only-no-translate"Server- Keep the original wording for search engines only. Visitors still get the translation.
data-proxylang-bot-only-no-translateServer- Attribute form of the bot-only skip.
<!-- @proxylang-bot-only-do-not-translate-start --> … <!-- @proxylang-bot-only-do-not-translate-end -->Server- Comment form of the bot-only skip.
Hint
data-pl-context="…"Server- A hint for the translator about this element (“button label”, “product name”).
data-pl-max-chars="N"Server- Keep the translation at or under N characters. Useful for fixed-width buttons.
data-proxylang-search-context="…"Browser- Context for translating what visitors type in this search box.
Force
data-pl-retranslate="token"Both- Translate this element again, bypassing every cache. Change the token to trigger it. Must be switched on for your domain by Proxylang support.
data-no-url-path-langBrowser- On the script tag itself. Your own router owns /xx-xx/ paths, so Proxylang will not read the language from the URL.
Features
data-pl-translate-imageBoth- Translate the text in this image. See Image translation.
data-proxylang-reverse-searchBrowser- Translate what visitors type in this search box. See Search translation.
class="proxylang-flip-on-rtl"Both- Mirror this element for right-to-left languages.
data-pl-no-rtl-fixBoth- Leave this element out of the right-to-left animation fixes.
Also skipped without markers: <pre> and <code> everywhere; <kbd>, <var> and <samp> on the server; <script>, <style>, <svg>, <math>, form inputs and iframes.
JavaScript API and events
For developersRead the active language, build your own switcher, react to changes.
window.Proxylang
Available in script tag, Hybrid and DNS Proxy mode.
| Method | Returns | Description |
|---|---|---|
getCurrentLanguage() | string | Active language code, e.g. "ko-KR". |
getBaseLanguage() | string | The site’s own language. |
getLanguages() | Array | Enabled languages as { code, english, native, isBase }. Empty until the config has loaded. |
setLanguage(code) | Promise<void> | Switch language. Navigates the page. Unknown codes are ignored with a console warning. |
isReady() | boolean | True once the widget has initialised. |
onReady(fn) | void | Runs fn when ready, or at once if already ready. |
isTranslated() | boolean | True once the first translation pass has finished. |
onTranslated(fn) | void | Runs fn when the first pass finishes, or at once if it already has. |
onLanguageChange(fn) | () => void | Runs fn on every switch. Returns a function that unsubscribes. |
window.Proxylang.getCurrentLanguage() // "ko-KR"
window.Proxylang.getBaseLanguage() // "en-US"
window.Proxylang.getLanguages()
// [{code: "en-US", english: "English", native: "English", isBase: true},
// {code: "ko-KR", english: "Korean", native: "한국어", isBase: false}, ...]
window.Proxylang.setLanguage("fr-FR") // navigatesproxylang:ready
Fired on document once the widget has initialised. detail carries language and baseLanguage .
window.Proxylang.onReady(() => {
console.log(window.Proxylang.getCurrentLanguage())
})
document.addEventListener('proxylang:ready', (e) => {
console.log(e.detail.language, e.detail.baseLanguage)
})proxylang:translated
Fired on document exactly once per page load, when the first translation pass has finished. It never fires again, not for added content or client-side navigation. It is guaranteed within about five seconds; if the safety cap fires first, detail.timedOut is true and language may be null. Use it to remove a loading overlay.
document.addEventListener('proxylang:translated', (e) => {
console.log(e.detail.language) // "ko-KR", or null if timedOut
console.log(e.detail.baseLanguage) // "en-US"
console.log(e.detail.timedOut) // true if the 5s cap fired first
document.getElementById('loading-overlay')?.remove()
})
// Same thing, callback style. Runs at once if already finished.
window.Proxylang.onTranslated(() => { /* ... */ })proxylang:languagechange
Fired on document when the visitor switches language, with detail.language . Callbacks run before the page navigates, so an analytics call may not finish sending. Use your analytics library's beacon or "transport: beacon" option.
// Returns a function that unsubscribes
const stop = window.Proxylang.onLanguageChange((lang) => {
navigator.sendBeacon('/analytics', JSON.stringify({ event: 'language_change', lang }))
})
// Or listen for the DOM event
document.addEventListener('proxylang:languagechange', (e) => {
console.log(e.detail.language)
})
// Later, e.g. when a component unmounts
stop()Debugging
- Add
?proxylang_debug=1to any page address to get verbose logs in the console. - In DNS Proxy mode a
proxylang:translatingevent fires onwindowwithdetail.loadingtrue or false around each re-translation. - Framework apps: the script waits for hydration before touching the page. If your app re-renders text after that, the observer picks it up and translates it.
Live Chat JavaScript API
For developersPut text in the chat window, open it from your own buttons, and tell your team who the visitor is.
$proxylang
The chat loads with your Proxylang script tag. Send it commands by pushing them onto window.$proxylang . Commands pushed before the chat has loaded wait and run in order once it has.
- The commands use the same format as Crisp's
$crisp. A page already wired to Crisp moves over by renaming$crispto$proxylang. - Commands the chat does not know are ignored. They never throw an error on your page.
$proxylang.get()and$proxylang.is()exist only after the chat has loaded. Before that,$proxylangis a plain array.
// Safe to run before the chat has loaded. Commands wait, then run in order.
window.$proxylang = window.$proxylang || []
$proxylang.push(['do', 'chat:open'])Put text in the chat window
| Command | What it does |
|---|---|
['set', 'message:text', [text]] | Fills the reply box. The visitor can edit it and presses send themselves. Nothing reaches your team until they do. |
['do', 'message:show', ['text', text]] | Shows a message from your team in the chat. Only this visitor sees it, only on this page. It is not sent to your team or saved, and a reload removes it. |
['do', 'message:send', ['text', text]] | Sends a message as the visitor. Your team gets it in the console, translated like any other message. |
- Text is capped at 4,000 characters. Empty text is ignored.
message:textandmessage:showappear exactly as you write them. They are not translated. Pick the text for the visitor's language yourself withwindow.Proxylang.getCurrentLanguage().- A
message:showmessage while the window is closed adds to the unread count on the chat bubble.
// A "Request a quote" button: open the chat with a message ready to send
function requestQuote() {
$proxylang.push(['set', 'message:text', ['Hi, I would like a quote for the Pro plan.']])
$proxylang.push(['do', 'chat:open'])
}
// A message from your team, shown only to this visitor on this page
$proxylang.push(['do', 'message:show', ['text', 'Questions about plans? Ask us here.']])
// A message sent as the visitor. Your team gets it in the console.
$proxylang.push(['do', 'message:send', ['text', 'I need help with order #1042']])Open and close
| Command | What it does |
|---|---|
['do', 'chat:open'] | Opens the chat window. |
['do', 'chat:close'] | Closes it. |
$proxylang.is('chat:opened') | True while the window is open. |
Tell your team who the visitor is
Your team sees these in the visitor pane of the chat console. To make an email verified, sign it on your server with the secret from Chat settings › Widget › Verified visitor emails . The signature is the HMAC-SHA256 of the email, as hex.
| Command | What it does |
|---|---|
['set', 'user:email', [email, signature]] | The visitor’s email. Add the signature to mark it verified. |
['set', 'user:nickname', [name]] | The name your team sees. |
['set', 'user:avatar', [url]] | Picture address. https only. |
['set', 'user:phone', [phone]] | Phone number. |
['set', 'user:company', [name, { url, description }]] | Company name, with an optional website and description. |
['set', 'session:data', [[[key, value], ...]]] | Up to 32 key/value pairs. Values are text, numbers or true/false. Keys are cut to 40 characters and text values to 200. Pushing again adds new keys and overwrites existing ones; keys are never removed until session:reset. Once there are 32 keys, new keys are skipped without an error. |
['set', 'session:event', [[[name, data, colour]]]] | Adds entries to the visitor’s timeline. Colour is red, orange, yellow, green, blue, purple, pink, brown, grey or black. |
$proxylang.get('user:email') | Reads back a value you set. Works for every user: key and for session:data. |
['do', 'session:reset'] | Starts a new visitor in this browser. Call it when a user signs out, so the next person to sign in does not see their chats or take over their email. |
$proxylang.push(['set', 'user:email', [user.email, signature]])
$proxylang.push(['set', 'user:nickname', [user.name]])
$proxylang.push(['set', 'user:company', ['Acme', { url: 'https://acme.com' }]])
// Key/value pairs shown in the visitor pane
$proxylang.push(['set', 'session:data', [[['plan', 'pro'], ['orders', 3]]]])
// Timeline entries: name, optional data, optional colour
$proxylang.push(['set', 'session:event', [[['checkout-failed', { total: 120 }, 'red']]]])
// When the user signs out: start a new visitor in this browser
$proxylang.push(['do', 'session:reset'])
// Once the chat has loaded
$proxylang.get('user:email')
$proxylang.is('chat:opened')Política de seguridad de contenido
For developersMost sites do not have a Content Security Policy. If nobody set one up for your site, skip this section.
Do you need this?
A CSP is a rule list that tells the browser which scripts and servers a page may use. If your site has one, it can block Proxylang. The sign: translations never appear and there is no error on the page. Open the browser console (F12) and look for a line starting with Refused to and mentioning Content Security Policy.
Script tag and Hybrid mode
The script loads from proxy.proxylang.dev and Live Chat from chat.proxylang.dev . It also fetches translations, swaps in translated images and adds a few inline styles. Add these sources to your existing policy:
# Add these sources to your existing policy.
# script-src: the Proxylang script, plus 'unsafe-inline' for the small styles/scripts it injects
# connect-src: translation, image and chat requests (wss:// is the Live Chat socket)
# img-src: translated images are served from Proxylang storage
Content-Security-Policy:
script-src 'self' https://proxy.proxylang.dev https://chat.proxylang.dev 'unsafe-inline';
style-src 'self' 'unsafe-inline';
connect-src 'self' https://proxy.proxylang.dev https://chat.proxylang.dev wss://chat.proxylang.dev;
img-src 'self' data: https:Same rules as a meta tag, if that is how your site sets its policy:
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' https://proxy.proxylang.dev https://chat.proxylang.dev 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src 'self' https://proxy.proxylang.dev https://chat.proxylang.dev wss://chat.proxylang.dev; img-src 'self' data: https:">DNS Proxy mode
Translations are added on the server, so most policies work as they are. Only a policy that blocks all inline scripts needs a change: Proxylang adds small inline scripts that keep translations in place while the page loads.
# Only needed if your policy blocks all inline scripts:
Content-Security-Policy: script-src 'self' 'unsafe-inline'Right-to-left languages
For developersArabic, Hebrew, Persian and Urdu read right to left. Proxylang flips the layout for you.
What happens automatically
When a visitor picks a right-to-left language, Proxylang sets dir="rtl" on the page so text, menus and layout mirror. When an Arabic or Hebrew site is shown in English, it sets dir="ltr" and overrides any CSS that pins the direction, so the layout flips back.
- Any right-to-left target gets
dir="rtl", even if the source is already right-to-left. - Left-to-right to left-to-right leaves the page untouched.
- In script tag and Hybrid mode the page paints in its original direction first and flips once the script runs. DNS Proxy mode flips on the server with no flash.
To turn the flip off for a domain, use the switch on the Language Switcher page. It only becomes active once a right-to-left language is enabled on that domain.
Mirror an arrow or icon
Directional graphics (a "next" arrow, a back icon) do not mirror on their own. Add the proxylang-flip-on-rtl class to any element that should.
<!-- Mirrored when the page is right-to-left -->
<img src="/arrow-next.svg" class="proxylang-flip-on-rtl" />
<svg class="proxylang-flip-on-rtl">...</svg>Animation fixes and opting out
Some animations look wrong when mirrored. Proxylang adds CSS fixes for the common ones: progress bars and loading bars fill from the right, tickers and marquees keep their scroll direction, carousels and sliders keep working, and NProgress bars stay at the top edge.
If one of those fixes breaks something on your site, add data-pl-no-rtl-fix to that element and Proxylang leaves it alone. The one exception is NProgress, which is styled by its own class and cannot be excluded this way.
For your own CSS, two variables follow the reading direction: --pl-transform-origin-start and --pl-transform-origin-end .