LocalePack
ChromeFirefoxEdgeOperaSafariDanh sách CWS
Vue.jsReact
Next.jsi18nextReact Native
Hướng dẫn cho lập trình viênCác câu chuyện thành công
One format, every major browser

Bản địa hóa bằng AI cho browser extensions

Tải lên messages.json nguồn, chọn ngôn ngữ đích, thanh toán một lần và tải xuống ZIP _locales sẵn sàng phát hành.

Bản dịch an toàn với placeholder
Tuân thủ WebExtension messages.json
Giá cả minh bạch
messages.json
Ngôn ngữ nguồn (ví dụ)
{
  "appName": {
    "message": "My Extension",
    "description": "Name"
  },
  "welcomeMsg": {
    "message": "Hello, $USER$!",
    "placeholders": {
      "user": {
        "content": "$1"
      }
    }
  }
}
Tiếng Đức (đầu ra)
{
  "appName": {
    "message": "Meine Erweiterung",
    "description": "Name"
  },
  "welcomeMsg": {
    "message": "Hallo, $USER$!",
    "placeholders": {
      "user": {
        "content": "$1"
      }
    }
  }
}
52 locales

Cách hoạt động

Ba bước đơn giản để bản địa hóa browser extension của bạn. Bản dịch chạy sau khi thanh toán—chúng tôi xếp hàng tác vụ và tạo ZIP trong vài phút.

01

Tải lên

Thả tệp messages.json nguồn của bạn. Chúng tôi phân tích ngay lập tức và xác thực định dạng browser extension.

02

Chọn ngôn ngữ & xem giá

Chọn từ 52 ngôn ngữ. Xem giá minh bạch dựa trên kích thước tệp trước khi bạn thanh toán.

03

Tải xuống ZIP

Thanh toán một lần qua Stripe. Chúng tôi tạo tất cả các tệp _locales/{lang}/messages.json và gói chúng thành một ZIP.

Bản demo giá theo thời gian thực

Công cụ ước tính giá minh bạch

Xem chính xác số tiền bạn sẽ trả trước khi tải lên. Báo giá cuối cùng được tính sau khi tải lên dựa trên độ dài chuỗi và các ngôn ngữ đã chọn.

1. Tải tệp lên

Thả messages.json vào đây

hoặc nhấp để duyệt

WebExtension messages.json format. Max 500KB.

2. Chọn ngôn ngữ

|

Đã chọn 3 trong 55 ngôn ngữ

3. Ước tính của bạn

Số ngôn ngữ đã chọn3

Giá cuối cùng được tính sau khi tải tệp lên ở trang thanh toán

Thanh toán một lần • Không cần đăng ký

Dành cho lập trình viên

Được thiết kế chuyên biệt cho định dạng locale của browser extension. Không phải công cụ dịch thuật chung chung.

Hiểu định dạng WebExtension

Được xây dựng riêng cho cấu trúc messages.json của browser extension với hỗ trợ message, description và placeholders.

Bảo vệ placeholder

Giữ nguyên cú pháp $PLACEHOLDER$ đúng như hiện có. Các biến của bạn luôn được bảo toàn trên mọi ngôn ngữ.

Ngữ cảnh từ mô tả

Chúng tôi đọc các trường description của bạn và dùng chúng làm gợi ý ngữ cảnh để AI dịch chính xác hơn.

Xuất ZIP sẵn sàng

Tải xuống một tệp ZIP với cấu trúc thư mục _locales/{lang}/messages.json chính xác. Thả vào tiện ích của bạn.

Xử lý song song

Tất cả ngôn ngữ được dịch đồng thời. Hầu hết tác vụ hoàn tất trong dưới 5 phút.

Thanh toán một lần

Không đăng ký, không phí hàng tháng. Trả một lần cho mỗi tác vụ, tải xuống mãi mãi.

Cách i18n của tiện ích WebExtension hoạt động

Every major browser reads the same _locales/{locale}/messages.json structure. Chrome, Edge and Opera expose the chrome.i18n namespace; Firefox and Safari expose browser.i18n. The file format, the placeholder syntax and the default_locale requirement are identical across all of them, which is why a single translated folder ships everywhere.

Cấu trúc thư mục _locales/
_locales/
├── en/
│   └── messages.json   ← default_locale
├── de/
│   └── messages.json
├── fr/
│   └── messages.json
└── ja/
    └── messages.json
messages.json
{
  "appName": {
    "message": "My Extension",
    "description": "Extension name"
  },
  "greeting": {
    "message": "Hello, $USER$!",
    "placeholders": {
      "user": { "content": "$1" }
    }
  }
}

API thời gian chạy

chrome.i18n / browser.i18n

Ví dụ gọi

getMessage("key")

Bắt buộc trong manifest

"default_locale"

In-extension strings come from _locales/. Store listing copy is managed separately in each store's own dashboard — translating one does not translate the other.

messages.json format explained →

What actually differs between browsers

The messages.json format is shared across every major browser. Only four things vary, and none of them require re-translating your strings.

Runtime namespace
Chrome, Edge, and Opera expose chrome.i18n. Firefox and Safari expose browser.i18n. The method names and arguments are otherwise the same.
Folder location
Most browsers read _locales/ from the extension root. Build frameworks move it: WXT emits public/_locales/, and Plasmo reads locales/ rather than _locales/.
Store listing text
In-extension strings come from _locales/. Store listing copy does not — Chrome Web Store, AMO, and App Store Connect each manage listing translations in their own dashboard.
Locale-code lists
Chromium browsers accept a fixed set of underscore-separated codes and silently ignore anything else. Check your codes before shipping rather than after.

One translated _locales/ folder covers Chrome, Firefox, Edge, Opera, and Safari. The porting work is in the build, never in the strings.

Vì sao không dùng công cụ chung?

Các công cụ dịch thuật đa dụng không hiểu định dạng browser extension.

LocalePack
Dịch thủ công
TMS chung
Thời gian thiết lập2 phútVài giờ mỗi ngôn ngữ30+ phút
Minh bạch chi phí
An toàn định dạng WebExtension
Bảo vệ placeholder
Tốc độ (52 ngôn ngữ)< 5 phútTuầnGiờ
Phù hợp nhất choCross-browser extensionsDự án nhỏỨng dụng web doanh nghiệp

Các câu chuyện thành công

Các dự án thực tế đã dùng LocalePack để tiếp cận khán giả toàn cầu với tối đa 52 ngôn ngữ.

AstrologerAI AI astrology app localized into 52 languages

AstrologerAI: an AI astrology app localized into 52 languages

How the AstrologerAI app translated its entire experience into 52 languages with LocalePack — 6.3M tokens for $58.73 — to reach a worldwide audience in their own language.

DevToys.pro developer tools web app localized into 52 languages

DevToys.pro: 400% international traffic growth across 52 languages

How the DevToys.pro web app translated its entire UI into 52 languages with LocalePack — 5.8M tokens for $58.44 — and quadrupled its international organic traffic.

DevToys New Tab Chrome extension localized into 52 languages

DevToys New Tab: a Chrome extension localized UI + store listing in 52 languages

How the DevToys New Tab Chrome extension localized both its in-extension UI and its Chrome Web Store listing into 52 languages to reach a global audience.

The LocalePack site localized into 52 languages with LocalePack

LocalePack localized itself into 52 languages — with LocalePack

We used our own tool to translate the entire LocalePack site into 52 languages — 2.9M tokens for $27.37 — so developers worldwide find us in their own language.

Xem tất cả câu chuyện thành công

Được các nhà phát triển tiện ích mở rộng tin dùng

“Giúp tôi tiết kiệm hàng giờ làm việc tẻ nhạt. Tải lên messages.json của tôi và nhận lại bản dịch hoàn hảo đúng theo định dạng tôi cần.”

Sarah K.

Dev độc lập, tiện ích AdBlock

“We ship the same _locales folder to Chrome, Firefox and Edge. One translation pass covers all three.”

Marcus T.

Người duy trì tiện ích mở rộng

“Giá minh bạch là điểm thuyết phục tôi. Tôi biết chính xác mình sẽ trả bao nhiêu trước khi tải lên bất cứ thứ gì.”

Dev J.

Cộng tác viên mã nguồn mở

52

Ngôn ngữ được hỗ trợ

100%

Đầu ra an toàn với placeholder

ZIP

Sẵn sàng phát hành

Câu hỏi thường gặp

Mọi điều bạn cần biết về LocalePack.

Related developer guides

Deep dives on the formats, APIs and errors behind this page — written for developers, not translators.

messages.json format explained (with placeholders)

A complete reference for the WebExtension messages.json format: the message, description, and placeholders fields, $PLACEHOLDER$ syntax, $1 positional substitutions, and common mistakes.

WXT i18n: @wxt-dev/i18n and messages.json

How @wxt-dev/i18n compiles YAML, JSON, JSONC, JSON5 and TOML message files into standard _locales/{lang}/messages.json — setup, nested keys, plurals, substitutions, type safety, and how to translate a WXT project.

Plasmo i18n: the locales/ folder gotcha

Plasmo does not read _locales/ at the project root. The three paths it does accept, where default_locale actually lives, the alphabetical-default trap, and how to place a translated _locales ZIP correctly.

Adding i18n to a CRXJS extension

CRXJS ships no i18n helper and its docs have no i18n page. Here is the working pattern: put _locales under public/, declare default_locale in manifest.config.ts, and call chrome.i18n directly.

Browse all guides →

Sẵn sàng phát hành browser extension của bạn trên toàn cầu?

Thanh toán một lần - Tải ZIP - Phát hành toàn cầu

Dùng thử LocalePack
LocalePack
Hướng dẫnQuyền riêng tưĐiều khoảnHỗ trợ

© 2025 LocalePack. Bảo lưu mọi quyền.

Dự án này được dịch bằng LocalePack logoLocalePack