A forwarded Chinese tech headline promised a lot: "two lines of JS code, one-click support for 104 languages, zero configuration, no API key, and SEO-friendly." That is the kind of claim that either saves you a quarter of i18n work or quietly wrecks your site. So I went and read the actual project β its repo, its docs, its limits β and then ran it against the only question that matters for us: should NXplace adopt it?
Here's the verdict up front: it is a genuinely clever, genuinely free tool that solves the wrong half of the problem for a content platform. Worth piloting as a reader convenience. Not worth replacing a real i18n strategy.
xnx3/translate (official site translate.zvo.cn, mirrored on Gitee). ~3.1k stars, 481 forks, 1,100+ commits.<script src="https://cdn.staticfile.net/translate.js/3.5.1/translate.js"></script>
<script>
translate.language.setLocal('chinese_simplified'); // source language
translate.service.use('client.edge'); // translation channel
translate.execute(); // go
</script>
Drop it before </html>, and a language <select> appears at the bottom of the page. That's it. No JSON language files, no per-string calls, no signup, no API key.
How it works: it walks the DOM at runtime, detects the page's dominant language, sends the text nodes to a machine-translation backend, swaps the text in place, and caches the result. A MutationObserver (translate.listener.start()) watches for dynamically rendered text, so Vue/React/Angular SPAs get translated too.
| Claim | Verdict | Reality |
|---|---|---|
| "Two lines of JS" | β True | Literally the three-call block above. |
| "No language config file, no API key" | β True | The whole point of the design. |
| "104 languages" | β οΈ Half-true | Depends entirely on the channel: client.edge = 73, translate.service = 112β450, v2 = 120+. The "104" is somewhere in the middle of the marketing. |
| "Zero configuration" | β οΈ Half-true | Zero config to try. Real deployments need a decision on channel, caching, cache-busting, and what not to translate. |
| "SEO-friendly" | π© The important one | See below. |
| "Free, MIT" | β True (with asterisks) | Free tier exists; heavy use pushes you toward the paid/LLM channel. |
The tagline says "SEO-friendly" and the docs say the crawler "sees your source unchanged." That is technically true β and it's a double-edged sword.
What it means: because translation happens in the browser after load, Googlebot (and any crawler that doesn't run your JavaScript, and there are still plenty) receives your original HTML. Your original-language SEO is untouched β no duplicate-content mess, no cloaking.
But the flip side is the one nobody advertises: your translated content never exists in the HTML source, so it cannot be indexed as translated pages. No /es/, /ja/, no hreflang, no ranking for Spanish or Japanese keywords. You get a nicer experience for a human who lands on your page; you do not get a single extra organic visit from a Spanish search.
For real international SEO the author ships a separate TCDN product β a server-side mirror that pre-translates your site, binds per-language domains, and serves fully translated HTML that is crawlable. That's the honest SEO answer, and it's a different, paid-ish product.
| Channel | Backend | Languages | Daily limit | Cost |
|---|---|---|---|---|
client.edge (recommended) |
Microsoft | 73 | None | Free |
translate.service (default) |
Community, self-hostable | 112β450 | ~2M chars/day | Free (occasionally unstable) |
giteeAI LLM channel |
Qwen3 / Hunyuan-MT | ~100+ | 3M chars/day with invite (1M without) | Free tier; Β₯10 top-up for pay-as-you-go; qwen3-8B free |
| Enterprise cluster | Multi-region | 112 | 2M+/day, negotiable | Paid |
Things you should know before trusting it:
client.edge the data goes to Microsoft; on the community channel, through the author's nodes; on GiteeAI, to China's GiteeAI platform. The docs are unusually candid about this: "data will flow overseas β if you have data-security requirements, use private deployment."translate.nomenclature.append) and ignore lists (by id/class/tag/text) β use them, or your brand name gets translated.translate100, from m2m100/small100) that runs on 1 core / 2 GB RAM at ~43 tokens/sec on a plain CPU β no GPU, no internet. That's a genuinely notable engineering detail.Who already uses it: Discuz, Layui, DzzOffice, wangmarket CMS, Z-Blog, several Chinese CMS platforms, plus universities and state-linked enterprises. The community backend reportedly handled 1B+ translation requests per day in late 2024 β which is exactly why the free public channel wobbles.
I'd say yes as a feature, no as a strategy. Here's the split.
language field. translate.js adds zero indexable language variants. If international search traffic is a goal, this tool doesn't deliver it β TCDN or real i18n does.client.edge (no character cap) with the JS self-hosted and a strict ignore-list for brand names, nav, and code blocks.translate.setDocuments(...)), never buttons, forms, code, or legal copy.translate100 on a small CPU box) so no text leaves our infrastructure.Bottom line: translate.js is one of the better-maintained free i18n tools I've read this year β clever architecture, honest docs, a real private-deployment path, and a permissive license. For NXplace it's a cheap, high-delight reader toggle worth a two-week pilot. It is not a substitute for an internationalization strategy, and its "SEO-friendly" badge means "doesn't hurt your original SEO," not "gets you translated traffic." Buy it for what it actually is, and it's a bargain.
Sources: the project README and docs at translate.zvo.cn (channels, character limits, v2βv3 notes), the GitHub repo xnx3/translate (license, stars, activity), and general search-engine guidance on client-side-rendered content and indexability.