Getting started

Proxylang 가이드

Proxylang을 설정하고, 번역 품질을 높이며, 다른 언어로 검색되게 하는 방법입니다. 개발자용 자료는 하단에 있습니다.

Start here

시작하기

새 계정 생성부터 번역된 사이트 구축까지 4단계로 진행됩니다. 스크립트 태그 방식이 기본이며 모든 플랫폼에서 작동합니다.

WhereSetup

4단계로 설정하기

  1. Add your site

    설정 메뉴로 이동하여 웹사이트 주소를 입력하세요. 해당 사이트가 운영되는 플랫폼을 선택합니다.

  2. Pick languages

    사이트의 기본 언어를 선택한 다음, 추가할 언어들을 선택하세요. 선택 가능한 언어 수는 요금제에 따라 달라집니다.

  3. Install

    사이트에 스크립트 태그를 추가하는 방법을 선택하세요. AI에게 맡기기: ChatGPT, Claude 또는 Cursor에 메시지를 붙여넣으세요. 직접 하기: 한 줄을 복사하여 게시하세요. 개발자에게 보내기: 이메일 초안을 작성해 드립니다. WordPress 사이트는 플러그인을 사용합니다.

  4. Check your site

    마법사가 스크립트가 활성화되었음을 확인합니다. 이제 사이트에 언어 선택기가 나타납니다.

플랫폼별 설치 가이드:

Proxylang 연결 방식 선택

스크립트 태그 방식이 기본이며 어디서든 작동합니다. 다른 모드들은 다른 언어로 검색 엔진 노출을 높여줍니다. 모드 변경은 도메인의 설정 탭에서 언제든 할 수 있으며, 변경 시에도 서비스가 중단되지 않습니다.

Script tag

VisitorSearch engineYour serverProxylangsentences

검색 엔진이 원문 사이트를 읽습니다.

Hybrid

VisitorSearch engineYour serverProxylangsentences

검색 엔진이 번역된 페이지를 읽습니다.

DNS Proxy

VisitorSearch engineYour serverProxylang

모든 방문자가 번역된 페이지를 봅니다.

Green arrow: traffic that goes through Proxylang. Dotted line: Proxylang reads your server behind the scenes.

Script tag

모든 요금제, 모든 플랫폼 지원

번역이 방문자의 브라우저에서 이루어집니다. 검색 엔진은 여전히 원문 언어를 확인합니다.

추천 대상: 앱, 로그인 후 접근 가능한 페이지, 모든 사이트 빌더.

WordPress plugin

WordPress sites

DNS를 건드리지 않고도 스크립트를 대신 설치하여 언어별 주소, SEO 태그 및 사이트맵을 추가합니다.

추천 대상: 모든 WordPress 또는 WooCommerce 사이트

Hybrid

Lite 요금제 이상, 직접 코딩한 사이트 대상

단 한 번의 DNS 변경으로 Proxylang로부터 번역된 페이지를 검색 엔진에 제공합니다. 방문자는 기존 스크립트 태그를 그대로 유지합니다.

추천 대상: 다른 언어로 검색되길 원하는 마케팅 사이트

DNS Proxy

Pro 플랜 이상, 직접 코딩한 사이트

모든 방문자는 /es-es/about과 같은 번역된 주소를 통해 Proxylang의 번역된 페이지를 보게 됩니다.

추천 대상: 스크립트 없이 모든 사용자에게 완전한 번역 URL을 제공하려는 사이트

페이지 번역 방식

스크립트 태그를 사용하면 페이지가 평소처럼 서버에서 로드됩니다. 그런 다음 스크립트가 Proxylang에 각 문장의 번역을 요청하여 교체합니다. 페이지를 처음 방문할 때는 번역되는 과정을 실시간으로 볼 수 있습니다. 번역 내용이 저장되므로 이후 방문부터는 즉시 로드됩니다.

1Page loads from your server as usual2The script sends each sentence to Proxylang3Proxylang translates it and saves the result4The translated text is swapped innext visit: saved copy, instant
The first visit to a page translates as you watch. Every later visit uses the saved copy.

DNS Proxy 또는 Hybrid 모드를 사용하면 Proxylang가 방문자(또는 검색 엔진)와 서버 사이에 위치하게 됩니다:

  1. A visitor opens a translated addressyourdomain.com/es-es/page

  2. Proxylang이 서버에서 원본 페이지를 가져옵니다

  3. AI가 보이는 텍스트를 번역합니다

    레이아웃과 코드는 기존 상태 그대로 유지됩니다.

  4. 번역된 페이지가 저장되어 제공됩니다

    다음 방문자는 즉시 페이지를 볼 수 있습니다.

  5. SEO tags are added

    언어 링크, canonical 주소 등

Short addresses also work. /es/about and /mx/about both redirect to /es-es/about.

사이트에 변경 사항이 없는 경우

  • 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.

다음: 브랜드 및 컨텍스트

Make translations better

브랜드 및 문맥

번역가에게 귀하가 누구인지 알려주세요. 여기서 5분을 투자하는 것이 이 가이드의 다른 어떤 과정보다 품질 향상에 더 효과적입니다.

WhereDomains › your domain › Brand & Context

입력 항목

  • 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.

적용 시점

Brand & Context를 저장하세요. 새로운 번역은 한 시간 이내에 새로운 컨텍스트를 적용합니다. 이미 번역된 텍스트는 기존 문구를 유지합니다. 페이지를 다시 작업하려면 라이브 에디터에서 개별 문장을 수정할 수 있습니다.

다음: 용어집 및 번역 제외 목록


용어집 및 번역 제외 목록

단 한 번의 설정으로 모든 페이지에서 특정 단어가 어떻게 번역될지 결정하세요.

WhereGlossary

사용자 용어

  • 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

새로운 용어는 약 10분 이내에 번역 서버에 반영됩니다. 이미 번역된 텍스트는 다시 번역될 때까지 기존 문구를 유지합니다. 페이지를 확인하려면 브라우저에 저장된 복사본이 표시되지 않도록 시크릿 창에서 열어보세요.

번역 제외

용어집 상단의 Never Translate 카드는 모든 언어에서 작성된 그대로 유지해야 하는 단어(브랜드명, 제품명, 해시태그 등)를 관리합니다. 각 60자 이내로 최대 100개까지 등록할 수 있습니다. 대소문자를 구분하므로 "iphone"이 아닌 "iPhone"으로 입력하세요.

AI 개선 사항

Proxylang는 정해진 일정에 따라 사이트의 번역을 검토하고 작은 수정 사항을 제안합니다. 승인된 수정 사항은 이유 및 교체된 문구와 함께 AI 표시가 된 용어로 용어집에 추가됩니다. 이 항목들은 언제든 삭제할 수 있습니다.

  • 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.


라이브 에디터

사이트에서 직접 번역 수정하기: 문장을 클릭하고, 입력하고, 저장하세요. 모든 플랜에 포함되어 있습니다.

WhereLive Editor, or press Esc twice on your site

번역 수정하기

  1. 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 .
  2. Switch the site to the language you want to fix.
  3. 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.

번역가 초대하기

번역가에게 Proxylang 계정은 필요하지 않습니다. 번역가는 귀하의 사이트에서 로그인하여 번역 외의 다른 것은 편집할 수 없도록 제한된 권한으로 작업할 수 있습니다.

  1. On the Live Editor page, find Invite a translator . Type their email.
  2. Under Can edit , leave All languages or pick only the languages they should touch.
  3. 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.

다음: 번역 대상 제어하기


번역 범위 제어하기

브랜드명, 쿠폰 코드, 리뷰를 원문 그대로 유지하거나 번역을 완전히 중단할 수 있습니다.

WhereYour HTML, or Domains › your domain › Advanced

특정 내용을 원문 그대로 유지하기

브랜드명, 쿠폰 코드, 인용구, 고객 리뷰처럼 절대 바뀌어서는 안 되는 텍스트가 있습니다. 코드 미사용부터 코드 사용까지 세 가지 도구를 제공합니다.

  • 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-translate class to the element. Everything inside it is skipped. See below.
  • A whole file or region. Wrap it in the comment markers. See below.

클래스가 지정된 블록 제외하기

Add the class proxylang-no-translate to any element. The attribute data-proxylang-no-translate does the same thing. Works in every mode.

HTML
<!-- 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>

주석이 포함된 영역 제외하기

클래스를 추가할 수 없거나 JavaScript 파일 내부의 텍스트를 처리할 때 유용합니다. 두 마커 사이의 모든 내용은 건너뜁니다.

HTML
<!-- @proxylang-do-not-translate-start -->
<div class="testimonial">
  Customer reviews stay exactly as written.
</div>
<!-- @proxylang-do-not-translate-end -->
JavaScript

자동 제외됨

  • 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.

검색 엔진에 대해서만 제외하기

방문자에게는 번역된 내용을 보여주면서도, 검색 엔진에는 원래 문구(순위가 매겨지는 태그라인이나 슬로건 등)를 인덱싱하게 하고 싶을 때가 있습니다. 이럴 때는 봇 전용 마커를 사용하세요. 이 마커는 Proxylang이 봇에게 페이지를 제공하는 DNS Proxy 및 Hybrid 모드에서만 적용됩니다. 스크립트 태그만 사용하는 경우에는 아무런 효과가 없습니다.

HTML
<!-- 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 -->

모든 작업 일시 중지

도메인의 Advanced 탭에 있는 두 개의 스위치를 사용하면 사이트에서 아무것도 삭제하지 않고도 새로운 번역을 중단할 수 있습니다. 이미 번역된 텍스트는 계속 표시됩니다.

  • 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.


Get found in search

다른 언어로의 SEO

번역된 페이지가 검색되도록 하세요. Proxylang은 검색 엔진이 찾는 태그를 추가하며, 하나의 페이지에서 이를 모니터링할 수 있도록 지원합니다.

WhereSEONeedsLite plan or above

SEO 페이지

SEO를 열고 사이트를 선택하세요. Lite 요금제 이상이 필요합니다. 키워드 및 페이지 제목 탭은 Hybrid 또는 DNS Proxy 모드가 활성화되어 있어야 합니다. 스크립트 태그만 사용하면 검색 엔진이 번역된 제목을 볼 수 없기 때문입니다.

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.

모든 번역된 페이지에 추가되는 태그

  • 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.

검색 엔진이 Proxylang으로부터 페이지를 받는 Hybrid 및 DNS Proxy 모드에서 적용됩니다. 스크립트 태그만 사용하는 경우 검색 엔진은 원래 사이트를 읽습니다.

Show an example
What a page's head contains
<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" />

제목, 설명 및 이미지 텍스트

페이지 제목, 메타 설명, 소셜 미리보기 제목 및 설명, 키워드가 번역됩니다. 이미지 alt 텍스트, 버튼 툴팁, 폼 플레이스홀더도 마찬가지입니다. Page Titles & Descriptions 탭에서 특정 페이지의 문구를 직접 고정할 수 있습니다.

리치 결과

페이지에 구조화된 데이터(Google의 리치 결과에 표시되는 제품, 기사, FAQ 또는 이벤트의 숨겨진 세부 정보)가 포함된 경우, 텍스트 필드는 번역되고 언어 필드는 업데이트됩니다. 가격, 날짜, URL 및 식별자는 그대로 유지됩니다.

사이트맵

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
/sitemap.xml
<?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>

사이트맵에 포함할 페이지 선택

SEO Settings 탭의 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.

검색 엔진에 새 페이지 알리기

  • 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.txt is served with the sitemap lines added. Your own rules are kept.

AI 검색 엔진

  • robots.txt allows GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot and Google-Extended.
  • A /llms.txt file 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.

모든 주소의 언어

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.

DNS Proxy 모드에서만 적용됩니다. 서브도메인은 루트 도메인을 따릅니다.


Hybrid 모드 (검색 엔진을 위한 SEO)

방문자는 스크립트 태그를 유지하면서, 검색 엔진은 Proxylang으로부터 번역된 페이지를 받습니다.

WhereDomains › your domain › SetupNeedsLite plan or above, site built with code

주요 기능

스크립트 태그는 방문자의 브라우저에서 페이지를 번역합니다. 검색 엔진은 해당 스크립트를 실행하지 않으므로 원래 언어만 볼 수 있습니다. Hybrid 모드는 이 문제를 해결합니다.

검색 엔진 및 AI 봇

Proxylang를 통해 페이지 전체를 번역하세요. Google, Bing, Naver, ChatGPT, Perplexity 및 링크 미리보기(Slack, LinkedIn, Facebook)가 지원 목록에 포함되어 있습니다.

Your visitors

스크립트 태그를 통해 현재 사이트 모습을 그대로 유지하며 번역하세요. 호스팅, 분석 및 A/B 테스트는 그대로 유지됩니다.

Wix, Squarespace, Webflow 및 유사한 빌더를 사용하는 사이트는 이 방식으로 DNS를 변경할 수 없으므로 스크립트 태그 방식을 유지합니다.

활성화 방법

"Hybrid" 스위치는 따로 없습니다. 동일한 도메인에 DNS Proxy와 Script Tag가 모두 활성화된 상태가 바로 Hybrid입니다.

  1. 도메인을 열고 Setup 탭을 클릭하세요

    Domains → 내 도메인 → Setup.

  2. Turn on DNS Proxy

    도메인 등록업체에 표시된 DNS 레코드를 추가한 후 인증하세요. 이 단계가 검색 엔진이 Proxylang에 접속할 수 있게 해줍니다.

  3. Keep Script Tag on

    방문자는 이미 설치된 스크립트 태그를 계속 사용하게 됩니다.

  4. Done

    두 방식이 모두 켜져 있으면 도메인 배지에 "Hybrid (SEO)"라고 표시됩니다. 하나를 끄면 사이트 중단 없이 다른 모드로 전환됩니다.

비용 안내

봇 방문 시에는 일반 요율의 4분의 1 수준으로 잔여 단어 수가 차감됩니다. 과도한 크롤링으로 인한 잔액 소진을 방지하기 위해 세 가지 제한 설정이 있습니다. SEO 페이지의 Settings에서 각 제한을 낮출 수 있습니다.

Bot requestlimit 1Words todayover:original pagelimit 2Budget for this pageover:original pagelimit 3Visits today (unverified)over:original pageTranslated pageGoogle, Bing, Apple, DuckDuckGo, Yandex skip limit 3.

봇의 일일 단어 사용량

한도에 도달하면 봇은 UTC 기준 자정까지 원본 언어로 표시됩니다. 봇 번역을 완전히 중단하려면 0으로 설정하세요.

Start
3,000
Pro+
20,000

Budget per page

봇 방문 시 한 페이지당 번역할 수 있는 양(AI 토큰 기준, 단어당 약 2.7개). 기본값은 4,000입니다. 제목, 설명 및 헤딩은 계산에서 제외됩니다.

Start
8,000
Pro+
50,000

미인증 봇의 일일 방문 횟수

Google, Bing, Apple, DuckDuckGo 및 Yandex는 네트워크 주소를 통해 인증되므로 제한이 없습니다. 그 외의 모든 서비스는 이 한도를 공유합니다.

Start
5
Pro+
10
Free of charge. Bots that bring no visitors (SEO scrapers, uptime checkers) always get the original page and cost nothing.

사용 시점

  • 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.

로그인이 필요한 페이지는 Hybrid를 사용해도 이점이 없습니다. 해당 페이지는 스크립트 태그 방식을 유지하세요.

다음: 여러 사이트 및 서브도메인


여러 사이트 및 서브도메인

서브도메인은 무료로 추가할 수 있으며, Start 요금제 이상부터는 더 많은 루트 도메인을 추가할 수 있습니다. 모든 사이트는 하나의 단어 잔액을 공유합니다.

WhereDomains

추가 가능한 항목

  • 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.

모든 사이트가 하나의 단어 잔액을 공유합니다. 두 번째 사이트를 추가한다고 해서 단어 수가 늘어나지는 않으며, 동일한 풀에서 차감됩니다.

나중에 더 낮은 요금제로 변경하더라도 서비스가 중단되지 않습니다. 이미 추가한 모든 사이트를 그대로 유지할 수 있습니다. 다만 한도 이하로 내려가기 전까지는 사이트를 더 추가할 수 없습니다.

서브도메인 상속 항목

서브도메인은 루트 도메인을 따릅니다. 동일한 연결 모드, 언어, 사이트맵 설정 및 Advanced 탭의 스위치를 상속받습니다. 이러한 설정은 루트에서 한 번만 설정하면 됩니다.

루트 도메인이 DNS Proxy 또는 Hybrid 모드를 사용하는 경우, 각 서브도메인에도 자체 DNS 레코드가 필요합니다. 앱에 추가해야 할 정확한 레코드가 표시됩니다. 루트 도메인은 4개(기본 도메인, www, 인증 레코드 2개), 서브도메인은 2개가 필요합니다.

사이트별 모드 선택

마케팅 사이트 또는 랜딩 페이지

Hybrid mode

다른 언어로도 검색되길 원하시나요? 요금제와 사이트 조건이 충족된다면 Hybrid를 사용하세요(Lite 요금제 이상, 직접 코딩한 사이트). 그렇지 않더라도 스크립트 태그가 방문자를 위해 번역을 수행합니다.

앱 또는 고객 포털

Script tag

로그인이 필요한 페이지는 인덱싱되지 않으므로 검색 최적화 효과를 기대할 수 없습니다. DNS 변경이나 트래픽 경로 수정도 필요하지 않습니다.

Features

라이브 챗

양방향 번역이 가능한 채팅 버블입니다. 하나의 구독으로 모든 사이트에서 무제한 에이전트를 사용할 수 있습니다.

WhereDomains › your domain › Live ChatNeedsIncluded from Start up. 14-day trial on Test Drive and Lite

주요 기능

사이트에 표시되는 채팅 버블입니다. 방문자는 자신의 언어로 메시지를 작성하고, 고객님은 자신의 언어로 읽고 답변합니다. 양측의 메시지는 실시간으로 번역됩니다. 하나의 구독으로 계정 내 모든 사이트를 이용할 수 있으며, 에이전트 수는 제한 없이 추가할 수 있습니다.

켜기

도메인을 열고 라이브 챗 탭으로 이동하여 스위치를 켜세요. 사이트에 채팅 버블이 나타나며, 해당 사이트는 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.

팀원 추가

  1. On the Live Chat tab, in the Agents card, type a teammate's email and click Invite . Seats are free and unlimited.
  2. They get a link, good for seven days. They enter the name visitors will see and the language they want to read chats in.
  3. They see that site's conversations only, marked "Shared". No settings, no billing.

해당 행의 삭제 버튼을 눌러 팀원을 제거하세요.

채팅 답변하기

  • 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.

데스크톱 및 모바일 앱

다운로드 페이지에서 macOS, Windows 및 Linux용 데스크톱 앱을 받을 수 있습니다. 브라우저를 닫은 상태에서도 알림과 읽지 않은 메시지 배지를 확인할 수 있으며, 앱은 자동으로 업데이트됩니다. iPhone 및 Android 앱은 출시 예정입니다.

로그인 시 잠시 일반 브라우저가 열린 후 앱으로 돌아갑니다. 이는 정상적인 동작입니다.

요금제별 포함 사항

번역된 메시지만 카운트됩니다. 동일 언어 메시지는 무료입니다. 월간 허용량은 모든 사이트에서 공유되며 매월 1일에 초기화됩니다.

Start
Live Chat includedChat · 2,000 translated messages/mo
Pro
Live Chat includedChat Plus · 10,000 translated messages/mo
Business and above
Live Chat includedChat Scale · 50,000 translated messages/mo
  • 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.

다음: 이미지 번역


이미지 번역

배너 및 제품 이미지 내부의 텍스트를 방문자의 언어로 다시 그려줍니다.

WhereDomains › your domain › Image TranslationsNeedsImage credits (prepaid)

설정

1. Buy credits

이미지 번역은 모든 도메인에서 사용 가능합니다. 크레딧 잔액만 확인하면 됩니다. Billing에서 팩을 구매하세요. 팩의 유효 기간은 12개월입니다.

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. 번역할 이미지 선택

선택한 이미지만 번역됩니다. 세 가지 방법이 있으며, 가장 쉬운 방법부터 소개합니다:

  • 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-image to the image tag.
HTML
<!-- 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 />

작동 방식 및 비용

  • 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.

모든 모드에서 작동합니다. "이미지 주소 붙여넣기" 방식을 사용하면 매칭 작업이 방문자의 브라우저에서 실행되므로 스크립트 태그(스크립트 태그 또는 Hybrid 모드)가 필요합니다.

번역 대상

Translate these

  • Banners with text on them
  • Infographics and charts with labels
  • Product images with printed details
  • Screenshots with on-screen text

태그를 지정하지 마세요 (비용이 청구됩니다)

  • Photos with no text
  • Logos and icons
  • SVG files and GIFs

PNG, JPG 및 WebP를 지원합니다. 파일 크기가 매우 큰 경우 번역 전에 크기가 조정됩니다. 33개의 대상 언어를 지원하며, 전체 목록은 도메인의 Image Translations 탭에서 확인할 수 있습니다.

다음: 검색 번역


검색 번역

방문자가 검색창에 입력하는 내용을 번역하여 어떤 언어로든 검색 결과를 얻을 수 있게 합니다.

WhereDomains › your domain › AdvancedNeedsSearch credits (prepaid). Script tag or Hybrid mode

설정

1. Buy searches

선불 검색 크레딧으로 결제합니다. Billing에서 팩을 구매하세요. 팩은 만료되지 않습니다.

10,000 searches
$9.99 / ₩13,900
50,000 searches
$39.99 / ₩55,900
200,000 searches
$139.99 / ₩194,000

2. 도메인별로 켜기

도메인을 열고 Advanced 탭으로 이동하여 Translate Search Queries를 켜세요. 크레딧이 있을 때까지 스위치는 꺼진 상태로 유지됩니다. 실제 사이트에 적용되기까지 최대 5분이 걸릴 수 있으므로 테스트 전에 잠시 기다려 주세요.

작동 원리

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.

A search form that just works
<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.

페이지 내 목록을 필터링하는 검색창

일부 검색창은 서버로 아무런 데이터도 보내지 않습니다. 페이지에 이미 있는 목록(FAQ, 제품 그리드 등)을 필터링할 뿐입니다. 이 경우 input 요소에 다음 속성이 필요합니다:

HTML
<!-- 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.

문맥을 통해 번역 지원하기

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).

팁

  • 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.

알려진 제한 사항

  • 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.

다음: 언어 전환기 디자인 및 스타일


언어 전환기 디자인 및 스타일

방문자가 보는 언어 메뉴의 모든 것: 위치, 디자인, 표시 시점 등을 다룹니다.

WhereLanguage Switcher

변경 가능한 항목

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.

변경 사항은 몇 초 이내, 최대 5분 안에 사이트에 반영됩니다. 변경 사항이 보이지 않으면 페이지를 새로고침하세요.

방문자가 처음 접하게 될 언어

별도로 설정할 것은 없습니다. 첫 방문 시, Proxylang은 방문자 브라우저가 선호하는 언어를 확인하여 활성화된 언어 중 가장 적합한 언어를 선택합니다. 일치하는 언어가 없으면 방문자의 국가를 확인한 뒤, 사이트 자체 언어를 사용합니다. 그 이후에는 방문자의 선택이 1년 동안 유지됩니다.

To test another language, open your site in a private window, or add ?lang=ko-KR to the address.

자체 메뉴에 전환기 추가하기

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.

다음: 분석 및 사용량

Your account

분석 및 사용량

어떤 언어로 누가 방문하는지, 그리고 번역된 콘텐츠가 어디까지 도달하는지 확인하세요.

WhereDashboard › Analytics

방문자 및 방문 언어

대시보드의 분석 탭에서는 방문자, 방문 횟수, 페이지, 유입 경로, 국가 및 기기, 그리고 번역 버전을 읽은 사용자 비율을 확인할 수 있습니다. 쿠키는 사용되지 않으며, 방문자는 주소로 복원할 수 없는 암호화된 핑거프린트를 통해 집계됩니다.

  • 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.

당신의 언어가 닿는 곳

대시보드 탭에서는 요금제 사용량을 확인할 수 있습니다. 지표 및 페이지 탭에서는 일별, 언어별, 페이지별로 상세 내역을 보여줍니다.

  • 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.

다음: 요금제, 결제 및 크레딧


요금제, 결제 및 크레딧

각 요금제의 포함 사항, 한도 도달 시 발생하는 상황, 그리고 크레딧과 코드의 작동 방식에 대해 설명합니다.

WhereBilling

요금제 제공 혜택

모든 요금제에는 단어 허용량, 월간 페이지 뷰 허용량, 지원 언어 수 및 사이트 수가 포함되어 있습니다. 단어 허용량은 월간 단위가 아닌 총량입니다. 문장은 처음 번역될 때만 카운트되며, 그 이후에는 번역된 상태로 유지됩니다. 각 언어는 별도로 계산됩니다. 예를 들어 500단어 분량의 페이지를 3개 언어로 열면 1,500단어를 사용하게 됩니다. Start 요금제 이상부터는 방문자가 77개 언어 중 원하는 언어를 선택할 수 있으며, 요금제에 따라 검색 엔진이 인덱싱하는 언어 수가 결정됩니다. 크롤러는 인덱싱된 모든 언어를 가져가므로, 인덱싱된 언어는 방문자 없이도 단어를 소모하게 됩니다.

단어: 한 번 채워지는 총량

each new sentence is counted once, then never again

페이지 뷰: 매월 1일 초기화

one count per page a visitor opens in a translated language
Both are shared across all your sites.

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.

변경 또는 취소

  • 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.

이미지 및 검색 크레딧

유료 요금제에는 구독 시 1회에 한해 크레딧 패키지가 포함됩니다. Lite는 이미지 2장 및 검색 500회, Start는 이미지 10장 및 검색 2,000회, Pro는 이미지 30장 및 검색 2,000회, Business 및 Global은 이미지 100장 및 검색 2,000회입니다. 요금제를 업그레이드하면 차액만큼만 추가됩니다. 포함된 크레딧은 만료되지 않으며, 업그레이드 시마다 지급되는 것이 아니라 계정당 1회 제공됩니다.

크레딧이 부족하면 결제 페이지, 이미지 번역 페이지 또는 역검색 페이지에서 선불 팩을 추가로 구매할 수 있습니다. 팩은 모든 사이트에서 공유됩니다. 구매한 이미지 팩은 12개월 동안 유효하며, 만료 30일 전에 이메일로 안내해 드립니다. 구매한 검색 팩은 만료되지 않습니다.

구매 창은 새 탭에서 열립니다. 결제 페이지로 돌아오면 잔액이 새로고침됩니다.

프로모션 코드

  • 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.

친구 추천하기

Your link is on the Referral page. A friend who signs up through it gets 15% off their first plan. When they subscribe, your next monthly payment is 50% off, once per friend. The link is remembered for 90 days. Packs do not count, plans do.

For developers

Attribute reference, JavaScript API and events, Live Chat API, Content Security Policy, right-to-left languages.

Attribute reference

For developers

Every 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 developers

Read the active language, build your own switcher, react to changes.

window.Proxylang

Available in script tag, Hybrid and DNS Proxy mode.

MethodReturnsDescription
getCurrentLanguage()stringActive language code, e.g. "ko-KR".
getBaseLanguage()stringThe site’s own language.
getLanguages()ArrayEnabled 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()booleanTrue once the widget has initialised.
onReady(fn)voidRuns fn when ready, or at once if already ready.
isTranslated()booleanTrue once the first translation pass has finished.
onTranslated(fn)voidRuns fn when the first pass finishes, or at once if it already has.
onLanguageChange(fn)() => voidRuns fn on every switch. Returns a function that unsubscribes.
JavaScript
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")  // navigates

proxylang:ready

Fired on document once the widget has initialised. detail carries language and baseLanguage .

JavaScript
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.

JavaScript
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.

JavaScript
// 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=1 to any page address to get verbose logs in the console.
  • In DNS Proxy mode a proxylang:translating event fires on window with detail.loading true 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 developers

Put 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 $crisp to $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, $proxylang is a plain array.
JavaScript
// 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

CommandWhat 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:text and message:show appear exactly as you write them. They are not translated. Pick the text for the visitor's language yourself with window.Proxylang.getCurrentLanguage() .
  • A message:show message while the window is closed adds to the unread count on the chat bubble.
JavaScript
// 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

CommandWhat 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.

CommandWhat 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.
JavaScript
$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')


콘텐츠 보안 정책(CSP)

For developers

Most 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:

HTTP header
# 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:

HTML meta tag
<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.

HTTP header
# Only needed if your policy blocks all inline scripts:
Content-Security-Policy: script-src 'self' 'unsafe-inline'


Right-to-left languages

For developers

Arabic, 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.

HTML
<!-- 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 .