Dịch tệp JSON locale mà không làm thay đổi khóa của bạn.
Khóa vẫn là khóa. Phân cấp vẫn nguyên vẹn. Chỉ các giá trị chuỗi được dịch — và chỉ các giá trị chuỗi. Mọi loại thuộc tính khác được giữ nguyên y như ban đầu.
Công cụ dịch tiêu chuẩn không hiểu JSON.
API dịch chung nhìn JSON của bạn như một đoạn văn bản dài. Chúng dịch cả tên khóa cùng với giá trị. Chúng làm phẳng các đối tượng lồng nhau. Chúng nối các chuỗi không nên nối. Kết quả trả về là JSON bị hỏng cấu trúc, cần chỉnh sửa thủ công trước khi sử dụng được. Nếu bạn quản lý tệp locale cho ứng dụng sản xuất, bạn biết rằng đưa chúng vào API dịch tiêu chuẩn tạo ra nhiều công việc hơn là tiết kiệm.
Vấn đề không chỉ nằm ở tên khóa. API dịch tiêu chuẩn còn làm hỏng các biến nội suy. Một chuỗi như "Hello {name}, you have {count} messages" trả về với tên biến bị dịch — "Hola {nombre}, tienes {cuenta} mensajes" — làm hỏng mọi runtime đang mong đợi tên biến gốc. Kéo theo hàng giờ gỡ lỗi.
Với các nhóm duy trì tệp locale đa ngôn ngữ cho ứng dụng sản xuất, đây không phải là vấn đề lý thuyết. Nó đã xảy ra rồi. Câu hỏi là mất bao lâu để sửa chữa thủ công mỗi lần.
PolyLingo duyệt qua JSON của bạn trước khi dịch.
PolyLingo hiểu cấu trúc JSON. Nó đệ quy duyệt đối tượng của bạn, xác định các giá trị chuỗi chứa văn bản cần dịch, và chỉ gửi những giá trị đó đến mô hình dịch. Tên khóa không bao giờ bị thay đổi. Số, boolean, giá trị null và các kiểu không phải chuỗi được giữ nguyên. Kết quả đầu ra là JSON hợp lệ với cấu trúc giống hệt — chỉ khác là các giá trị chuỗi đã được dịch.
Các biến nội suy — {name}, {{count}}, %s, và các mẫu tương tự — được nhận diện và giữ nguyên trong quá trình dịch. Chúng được thay thế bằng chỗ giữ chỗ trước khi dịch, và được phục hồi nguyên dạng trong đầu ra. Mô hình dịch không bao giờ xem chúng là văn bản cần dịch.
Mảng được xử lý chính xác: mỗi phần tử chuỗi được dịch, trong khi chỉ số số và cấu trúc mảng không thay đổi. Mảng hỗn hợp chứa cả chuỗi và không phải chuỗi (số, đối tượng) được duyệt đúng cách với các kiểu không phải chuỗi giữ nguyên.
{
"nav_home": "Home",
"nav_pricing": "Pricing",
"hero_title": "Grow your audience globally",
"hero_cta": "Get started for free",
"footer_rights": "All rights reserved."
}{
"nav_home": "Accueil",
"nav_pricing": "Tarifs",
"hero_title": "Développez votre audience mondiale",
"hero_cta": "Commencer gratuitement",
"footer_rights": "Tous droits réservés."
}{
"nav": {
"home": "Home",
"pricing": "Pricing",
"blog": "Blog"
},
"hero": {
"title": "Grow your audience globally",
"subtitle": "Translate in seconds.",
"cta": "Get started for free"
},
"errors": {
"notFound": "Page not found",
"serverError": "Something went wrong"
}
}{
"nav": {
"home": "Inicio",
"pricing": "Precios",
"blog": "Blog"
},
"hero": {
"title": "Expande tu audiencia globalmente",
"subtitle": "Traduce en segundos.",
"cta": "Comienza gratis"
},
"errors": {
"notFound": "Página no encontrada",
"serverError": "Algo salió mal"
}
}curl -X POST https://api.usepolylingo.com/v1/translate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "{\"nav_home\": \"Home\", \"hero_title\": \"Get started\"}",
"format": "json",
"targets": ["es", "fr", "de", "ja", "zh"],
"model": "standard"
}'
# Response:
# {
# "translations": {
# "es": "{\"nav_home\": \"Inicio\", \"hero_title\": \"Empezar\"}",
# "fr": "{\"nav_home\": \"Accueil\", \"hero_title\": \"Commencer\"}",
# ...
# }
# }Những gì PolyLingo đảm bảo cho mỗi bản dịch JSON
- ✓Tên khóa không bao giờ bị thay đổi
- ✓Đối tượng và mảng lồng nhau được xử lý đệ quy
- ✓Số, boolean, giá trị null được giữ nguyên
- ✓Hỗ trợ 36 ngôn ngữ trong một yêu cầu duy nhất
- ✓Tự động nhận dạng là JSON — không cần cờ định dạng
- ✓Hoạt động với tệp locale phẳng và lồng sâu
- ✓Biến nội suy ({name}, {{count}}, %s) được giữ nguyên chính xác
- ✓Đầu ra là JSON hợp lệ — có thể phân tích cú pháp mà không cần chỉnh sửa
Ba bước để có tệp locale đã dịch
Dán JSON hoặc gọi API
Sử dụng trình dịch không cần mã cho các bản dịch một lần: dán JSON, chọn ngôn ngữ, tải tệp đã dịch. Để tự động hóa, gọi POST /v1/translate với nội dung JSON và mã ngôn ngữ mục tiêu.
Nhận tất cả ngôn ngữ trong một phản hồi
API trả về một đối tượng JSON với một mục cho mỗi ngôn ngữ mục tiêu, mỗi mục chứa tệp locale đã dịch đầy đủ với cấu trúc giống hệt. Không gọi riêng từng ngôn ngữ. Không lặp. Một yêu cầu cho tất cả đầu ra.
Đặt đầu ra vào thư mục messages của bạn
Ghi mỗi tệp đã dịch vào messages/es.json, messages/fr.json, messages/de.json — hoặc nơi thư viện i18n của bạn mong đợi. Cấu trúc giống hệt tệp nguồn, không cần xử lý thêm.
Nơi dịch JSON quan trọng nhất
i18n ứng dụng với next-intl hoặc i18next
Dịch trực tiếp các tệp messages/*.json hoặc locales/*.json của bạn. Khóa giữ nguyên, phân cấp được bảo toàn, biến nội suy không bị thay đổi. Đặt tệp vào thư mục messages và triển khai.
Xuất nội dung CMS
Các nền tảng CMS không đầu thường xuất nội dung có cấu trúc dưới dạng JSON. PolyLingo dịch các giá trị chuỗi trong khi giữ nguyên tên trường, loại nội dung lồng nhau và các giá trị không phải chuỗi như ngày tháng, boolean và ID.
Phản hồi API và tệp cấu hình
Bất kỳ cấu trúc JSON nào có giá trị chuỗi cần dịch — mô tả sản phẩm, mẫu thông báo, nội dung trong ứng dụng qua API — đều có thể dịch mà không thay đổi cấu trúc ứng dụng phụ thuộc.
Câu hỏi thường gặp về dịch JSON
Các biến nội suy như {name} hoặc {{count}} có được giữ nguyên không?
Có. PolyLingo nhận diện các mẫu nội suy phổ biến bao gồm {variable}, {{variable}}, %(variable)s, và %s trước khi dịch. Chúng được thay thế bằng chỗ giữ chỗ ổn định, văn bản xung quanh được dịch, và tên biến gốc được phục hồi trong đầu ra. Mô hình dịch không bao giờ xem tên biến là nội dung cần dịch.
Các giá trị không phải chuỗi như số, boolean, null thì sao?
Các giá trị không phải chuỗi được giữ nguyên hoàn toàn. PolyLingo chỉ dịch các giá trị chuỗi chứa văn bản ngôn ngữ tự nhiên. Số, boolean, null và mảng không chứa chuỗi được giữ nguyên y như trong nguồn.
PolyLingo có xử lý được cấu trúc JSON lồng sâu không?
Có. PolyLingo đệ quy duyệt các đối tượng với bất kỳ độ sâu lồng nào. Việc dịch áp dụng cho tất cả giá trị chuỗi trong cấu trúc, bất kể lồng sâu đến đâu.
Nếu một số khóa chứa nội dung không dịch được như slug hoặc mã thì sao?
PolyLingo mặc định dịch tất cả giá trị chuỗi. Nếu bạn có trường chuỗi không muốn dịch — slug, mã ngôn ngữ, định danh kỹ thuật — cách khuyến nghị là loại bỏ chúng khỏi JSON gửi đi, hoặc dùng tham số định dạng rõ ràng và chỉ định trường bỏ qua (sắp ra mắt). Với hầu hết tệp locale, tất cả giá trị chuỗi đều được dịch.
Có hoạt động với JSON5 hoặc JSONC (JSON có chú thích) không?
Hiện tại PolyLingo xử lý JSON chuẩn. JSON5 và JSONC (có chú thích) nên được tiền xử lý để loại bỏ chú thích và chuyển sang JSON chuẩn trước khi gửi. Đây là bước phổ biến trong pipeline xây dựng và chỉ thêm chi phí tối thiểu.
Tôi có thể dịch bao nhiêu ngôn ngữ trong một yêu cầu?
Tối đa 36 ngôn ngữ được hỗ trợ trong một yêu cầu duy nhất. Phản hồi chứa một đối tượng JSON đã dịch cho mỗi mã ngôn ngữ. Giới hạn tốc độ tùy theo gói — gói miễn phí cho phép 10 yêu cầu mỗi phút, trong khi gói Growth và Scale cho phép 200–600 yêu cầu mỗi phút.
Dịch tệp locale của bạn trong vài giây.
Dán JSON của bạn, chọn ngôn ngữ, nhận lại tệp locale hợp lệ cho mọi ngôn ngữ mục tiêu.
Bắt đầu dịch miễn phíDán JSON locale của bạn và xem kết quả — miễn phí, không cần tài khoản.